Skip to content

Commit 9cff1d6

Browse files
committed
[Core] Implemented GroupKickMember
1 parent 4c9b01c commit 9cff1d6

5 files changed

Lines changed: 169 additions & 0 deletions

File tree

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
namespace Lagrange.Core.Internal.Events.System;
2+
3+
internal class GroupKickMemberEventReq(long groupUin, string targetUid, bool rejectAddRequest, string reason) : ProtocolEvent
4+
{
5+
public long GroupUin { get; } = groupUin;
6+
7+
public string TargetUid { get; } = targetUid;
8+
9+
public bool RejectAddRequest { get; } = rejectAddRequest;
10+
11+
public string Reason { get; } = reason;
12+
}
13+
14+
internal class GroupKickMemberEventResp(int resultCode, string? errorMsg) : ProtocolEvent
15+
{
16+
public int ResultCode { get; } = resultCode;
17+
18+
public string? ErrorMsg { get; } = errorMsg;
19+
}

Lagrange.Core/Internal/Logic/OperationLogic.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,21 @@ public async Task GroupMemberRename(long groupUin, long targetUin, string name)
8181
await context.EventContext.SendEvent<GroupMemberRenameEventResp>(new GroupMemberRenameEventReq(groupUin, uid, name));
8282
}
8383

84+
public async Task<bool> KickGroupMember(long groupUin, long targetUin, bool rejectAddRequest, string reason)
85+
{
86+
if (context.CacheContext.ResolveCachedUid(targetUin) is not { } uid)
87+
{
88+
await context.CacheContext.GetMemberList(groupUin, true);
89+
uid = context.CacheContext.ResolveCachedUid(targetUin);
90+
}
91+
92+
if (uid == null) return false;
93+
94+
var response = await context.EventContext.SendEvent<GroupKickMemberEventResp>(new GroupKickMemberEventReq(groupUin, uid, rejectAddRequest, reason));
95+
96+
return response.ResultCode == 0;
97+
}
98+
8499
public async Task GroupQuit(long groupUin)
85100
{
86101
await context.EventContext.SendEvent<GroupQuitEventResp>(new GroupQuitEventReq(groupUin));
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
using Lagrange.Proto;
2+
3+
namespace Lagrange.Core.Internal.Packets.Service;
4+
5+
#pragma warning disable CS8618
6+
7+
[ProtoPackable]
8+
internal partial class D8A0ReqBody
9+
{
10+
[ProtoMember(1)] public ulong OptUint64GroupCode { get; set; }
11+
12+
[ProtoMember(2)] public List<KickMemberInfo> RptMsgKickList { get; set; }
13+
14+
[ProtoMember(3)] public List<ulong> RptKickList { get; set; }
15+
16+
[ProtoMember(4)] public uint Uint32KickFlag { get; set; }
17+
18+
[ProtoMember(5)] public byte[] BytesKickMsg { get; set; }
19+
}
20+
21+
[ProtoPackable]
22+
internal partial class D8A0RspBody
23+
{
24+
[ProtoMember(1)] public ulong OptUint64GroupCode { get; set; }
25+
26+
[ProtoMember(2)] public List<KickResult> RptMsgKickResult { get; set; }
27+
}
28+
29+
[ProtoPackable]
30+
internal partial class KickMemberInfo
31+
{
32+
[ProtoMember(1)] public uint OptUint32Operate { get; set; }
33+
34+
[ProtoMember(2)] public ulong OptUint64MemberUin { get; set; }
35+
36+
[ProtoMember(3)] public uint OptUint32Flag { get; set; }
37+
38+
[ProtoMember(4)] public byte[] OptBytesMsg { get; set; }
39+
}
40+
41+
[ProtoPackable]
42+
internal partial class KickResult
43+
{
44+
[ProtoMember(1)] public uint OptUint32Result { get; set; }
45+
46+
[ProtoMember(2)] public ulong OptUint64MemberUin { get; set; }
47+
}
48+
49+
[ProtoPackable]
50+
internal partial class D8A0_1ReqBody
51+
{
52+
[ProtoMember(1)] public ulong GroupUin { get; set; }
53+
54+
[ProtoMember(3)] public string TargetUid { get; set; }
55+
56+
[ProtoMember(4)] public bool RejectAddRequest { get; set; }
57+
58+
[ProtoMember(5)] public string Reason { get; set; }
59+
}
60+
61+
[ProtoPackable]
62+
internal partial class D8A0_1RspBody
63+
{
64+
[ProtoMember(1)] public ulong GroupUin { get; set; }
65+
66+
[ProtoMember(2)] public string? ErrorMsg { get; set; }
67+
}

Lagrange.Core/Internal/Packets/Service/Oidb_0x8FC.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,22 @@ internal partial class LevelName
3737
[ProtoMember(2)] public string Name { get; set; }
3838
}
3939

40+
[ProtoPackable]
41+
internal partial class RichCardNameElem
42+
{
43+
[ProtoMember(1)] public byte[] Ctrl { get; set; }
44+
45+
[ProtoMember(2)] public byte[] Text { get; set; }
46+
}
47+
48+
[ProtoPackable]
49+
internal partial class CommCardNameBuf
50+
{
51+
[ProtoMember(1)] public List<RichCardNameElem> RichCardName { get; set; }
52+
53+
[ProtoMember(2)] public uint CoolId { get; set; }
54+
}
55+
4056
[ProtoPackable]
4157
internal partial class MemberInfo
4258
{
@@ -73,6 +89,14 @@ internal partial class MemberInfo
7389
[ProtoMember(16)] public List<CardNameElem> RichCardName { get; set; }
7490

7591
[ProtoMember(17)] public byte[] CommRichCardName { get; set; }
92+
93+
[ProtoMember(18)] public uint? RingtoneId { get; set; }
94+
95+
[ProtoMember(19)] public byte[] GroupHonor { get; set; }
96+
97+
[ProtoMember(20)] public uint? CmduinFlagEx3Grocery { get; set; }
98+
99+
[ProtoMember(21)] public uint? CmduinFlagEx3Mask { get; set; }
76100
}
77101

78102
[ProtoMember(1)] public long? GroupCode { get; set; }
@@ -92,6 +116,8 @@ internal partial class MemberInfo
92116
[ProtoMember(8)] public ClientInfo? Client { get; set; }
93117

94118
[ProtoMember(9)] public byte[]? AuthKey { get; set; }
119+
120+
[ProtoMember(10)] public List<LevelName> LevelNamesNew { get; set; }
95121
}
96122

97123
[ProtoPackable]
@@ -100,4 +126,6 @@ internal partial class D8FCRspBody
100126
[ProtoMember(1)] public long GroupCode { get; set; }
101127

102128
[ProtoMember(2)] public string ErrInfo { get; set; }
129+
130+
[ProtoMember(3)] public byte[] CoolGroupCardRsp { get; set; }
103131
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
using Lagrange.Core.Common;
2+
using Lagrange.Core.Internal.Events;
3+
using Lagrange.Core.Internal.Events.System;
4+
using Lagrange.Core.Internal.Packets.Service;
5+
using Lagrange.Core.Utility;
6+
7+
namespace Lagrange.Core.Internal.Services.System;
8+
9+
[EventSubscribe<GroupKickMemberEventReq>(Protocols.All)]
10+
[Service("OidbSvcTrpcTcp.0x8a0_1")]
11+
internal class GroupKickMemberService : BaseService<GroupKickMemberEventReq, GroupKickMemberEventResp>
12+
{
13+
protected override ValueTask<ReadOnlyMemory<byte>> Build(GroupKickMemberEventReq input, BotContext context)
14+
{
15+
var request = new D8A0_1ReqBody
16+
{
17+
GroupUin = (ulong)input.GroupUin,
18+
TargetUid = input.TargetUid,
19+
RejectAddRequest = input.RejectAddRequest,
20+
Reason = input.Reason
21+
};
22+
23+
return ValueTask.FromResult(ProtoHelper.Serialize(new Oidb
24+
{
25+
Command = 0x8a0,
26+
Service = 1,
27+
Body = ProtoHelper.Serialize(request)
28+
}));
29+
}
30+
31+
protected override ValueTask<GroupKickMemberEventResp> Parse(ReadOnlyMemory<byte> input, BotContext context)
32+
{
33+
var oidb = ProtoHelper.Deserialize<Oidb>(input.Span);
34+
var response = oidb.Body.Length == 0
35+
? new D8A0_1RspBody()
36+
: ProtoHelper.Deserialize<D8A0_1RspBody>(oidb.Body.Span);
37+
38+
return ValueTask.FromResult(new GroupKickMemberEventResp((int)oidb.Result, response.ErrorMsg ?? oidb.Message));
39+
}
40+
}

0 commit comments

Comments
 (0)