blob: 67c637ccffb19e0772be8af45b5de68703076e93 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
@page "/channels/{GuildId:long}/{ChannelId:long}"
@page "/channels/{GuildId:long}/{ChannelId:long}/{MessageId:long}"
@using System.Collections.ObjectModel
@using ArcaneLibs.Blazor.Components.Services
@using ArcaneLibs.Extensions
@using Spacebar.Client.Components
@using Spacebar.Models.Gateway
@using Spacebar.Models.Generic
@inject JsConsoleService jsConsole
<style>@_guildCss</style>
<ChannelMessageList Messages="@_messages"></ChannelMessageList>
@code {
private ObservableCollection<Message> _messages { get; set; } = [];
private string _guildCss = "";
[Parameter]
public long GuildId { get; set; }
[Parameter]
public long ChannelId { get; set; }
[Parameter]
public long? MessageId { get; set; }
protected override async Task OnInitializedAsync() {
var cid = ChannelId;
Console.WriteLine($"OIA GuildChannel(g={GuildId},c={ChannelId},m={MessageId})");
await (App.ClientManager.ClientAvailable ?? Task.CompletedTask);
if (MessageId is null) {
App.ClientManager.Client?.Gateway.OnceGatewayMessage.Add(async evt => {
if (evt is { Opcode: GatewayOpcode.S2CDispatch, DispatchEventType: "MESSAGE_CREATE" }) {
if (evt.EventData["channel_id"].GetValue<string>() != ChannelId.ToString()) return false;
await jsConsole.Info("Current channel message:", evt);
var msg = evt.GetData<Message>();
await jsConsole.Info("... typed:", msg);
_messages.Add(msg);
StateHasChanged();
}
return cid != ChannelId;
});
await (App.ClientManager.ClientReady ?? Task.CompletedTask);
_messages = new ObservableCollection<Message>(Enumerable.Reverse(await App.ClientManager.Client.GetChannel(ChannelId).GetMessagesAsync(
before: App.ClientManager.ClientState.Guilds[GuildId].Channels.First(x => x.Id == ChannelId).LastMessageId + 1,
limit: 100
)));
// build role color css...
_guildCss = "";
foreach (var role in App.ClientManager.ClientState.Guilds[GuildId].Roles) {
_guildCss += $$"""
.role_{{role.Id}} {
color: #{{role.Colors.PrimaryColor.ToString("X6")}};
}
""";
}
}
}
public override async Task SetParametersAsync(ParameterView parameters) {
bool reset = false;
if (parameters.GetValueOrDefault<long>("ChannelId") != ChannelId) reset = true;
await base.SetParametersAsync(parameters);
if (reset) await OnInitializedAsync();
}
}
|