-
Notifications
You must be signed in to change notification settings - Fork 51
Expand file tree
/
Copy pathFetchGroupMembersService.cs
More file actions
62 lines (56 loc) · 2.33 KB
/
FetchGroupMembersService.cs
File metadata and controls
62 lines (56 loc) · 2.33 KB
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
using Lagrange.Core.Common;
using Lagrange.Core.Common.Entity;
using Lagrange.Core.Exceptions;
using Lagrange.Core.Internal.Events;
using Lagrange.Core.Internal.Events.System;
using Lagrange.Core.Internal.Packets.Service;
namespace Lagrange.Core.Internal.Services.System;
[EventSubscribe<FetchGroupMembersEventReq>(Protocols.All)]
[Service("OidbSvcTrpcTcp.0xfe7_4")]
internal class FetchGroupMembersService : OidbService<FetchGroupMembersEventReq, FetchGroupMembersEventResp, FetchGroupMembersRequest, FetchGroupMembersResponse>
{
private protected override uint Command => 0xfe7;
private protected override uint Service => 3;
private protected override Task<FetchGroupMembersRequest> ProcessRequest(FetchGroupMembersEventReq request, BotContext context)
{
return Task.FromResult(new FetchGroupMembersRequest
{
GroupUin = request.GroupUin,
Field2 = 5,
Field3 = 2,
Body = new FetchGroupMembersRequestBody
{
MemberName = true,
MemberCard = true,
SpecialTitle = true,
Level = true,
JoinTimestamp = true,
LastMsgTimestamp = true,
ShutUpTimestamp = true,
Permission = true,
},
Cookie = request.Cookie
});
}
private protected override async Task<FetchGroupMembersEventResp> ProcessResponse(FetchGroupMembersResponse response, BotContext context)
{
var group = await context.CacheContext.ResolveGroup(response.GroupUin);
if (group == null) throw new InvalidTargetException(null, response.GroupUin);
return new FetchGroupMembersEventResp(
[.. response.Members.Select(raw => new BotGroupMember(
group,
raw.Id.Uin,
raw.Id.Uid,
raw.MemberName,
(GroupMemberPermission)raw.Permission,
(int)(raw.Level?.Level ?? 0),
raw.MemberCard.MemberCard,
raw.SpecialTitle,
DateTimeOffset.FromUnixTimeSeconds(raw.JoinTimestamp).DateTime,
DateTimeOffset.FromUnixTimeSeconds(raw.LastMsgTimestamp).DateTime,
DateTimeOffset.FromUnixTimeSeconds(raw.ShutUpTimestamp).DateTime
))],
response.Cookie
);
}
}