Implemented RenameGroupMember

This commit is contained in:
Linwenxuan05 2023-09-01 08:23:44 +08:00
parent 9635f3140d
commit 78dc62dee5
5 changed files with 98 additions and 0 deletions

View file

@ -13,4 +13,7 @@ public static class GroupExt
public static Task<bool> SetGroupAdmin(this BotContext bot, uint groupUin, uint targetUin, bool isAdmin)
=> bot.ContextCollection.Business.OperationLogic.SetGroupAdmin(groupUin, targetUin, isAdmin);
public static Task<bool> RenameGroupMember(this BotContext bot, uint groupUin, uint targetUin, string targetName)
=> bot.ContextCollection.Business.OperationLogic.RenameGroupMember(groupUin, targetUin, targetName);
}

View file

@ -78,6 +78,16 @@ internal class OperationLogic : LogicBase
var events = await Collection.Business.SendEvent(muteGroupMemberEvent);
return events.Count != 0 && ((GroupSetAdminEvent)events[0]).ResultCode == 0;
}
public async Task<bool> RenameGroupMember(uint groupUin, uint targetUin, string targetName)
{
string? uid = await Collection.Business.CachingLogic.ResolveUid(groupUin, targetUin);
if (uid == null) return false;
var renameGroupEvent = RenameMemberEvent.Create(groupUin, uid, targetName);
var events = await Collection.Business.SendEvent(renameGroupEvent);
return events.Count != 0 && ((GroupSetAdminEvent)events[0]).ResultCode == 0;
}
public async Task<bool> GetHighwayAddress()
{

View file

@ -0,0 +1,25 @@
namespace Lagrange.Core.Core.Event.Protocol.Action;
#pragma warning disable CS8618
internal class RenameMemberEvent : ProtocolEvent
{
public uint GroupUin { get; }
public string TargetUid { get; }
public string TargetName { get; }
private RenameMemberEvent(uint groupUin, string targetUid, string targetName) : base(true)
{
GroupUin = groupUin;
TargetUid = targetUid;
TargetName = targetName;
}
private RenameMemberEvent(int resultCode) : base(resultCode) { }
public static RenameMemberEvent Create(uint groupUin, string targetUid, string targetName) => new(groupUin, targetUid, targetName);
public static RenameMemberEvent Result(int resultCode) => new(resultCode);
}

View file

@ -0,0 +1,11 @@
using ProtoBuf;
namespace Lagrange.Core.Core.Packets.Service.Oidb.Response;
// ReSharper disable InconsistentNaming
[ProtoContract]
public class OidbSvcTrpcTcp0x8FC_3Response
{
[ProtoMember(1)] public uint GroupUin { get; set; }
}

View file

@ -0,0 +1,49 @@
using Lagrange.Core.Common;
using Lagrange.Core.Core.Event.Protocol;
using Lagrange.Core.Core.Event.Protocol.Action;
using Lagrange.Core.Core.Packets;
using Lagrange.Core.Core.Packets.Service.Oidb;
using Lagrange.Core.Core.Packets.Service.Oidb.Request;
using Lagrange.Core.Core.Packets.Service.Oidb.Response;
using Lagrange.Core.Core.Service.Abstraction;
using Lagrange.Core.Utility.Binary;
using ProtoBuf;
namespace Lagrange.Core.Core.Service.Action;
[EventSubscribe(typeof(RenameMemberEvent))]
[Service("OidbSvcTrpcTcp.0x8fc_3")]
internal class RenameMemberService : BaseService<RenameMemberEvent>
{
protected override bool Build(RenameMemberEvent input, BotKeystore keystore, BotAppInfo appInfo, BotDeviceInfo device,
out BinaryPacket output, out List<BinaryPacket>? extraPackets)
{
var packet = new OidbSvcTrpcTcpBase<OidbSvcTrpcTcp0x8FC_3>(new OidbSvcTrpcTcp0x8FC_3
{
GroupUin = input.GroupUin,
Body = new OidbSvcTrpcTcp0x8FC_3Body
{
TargetUid = input.TargetUid,
TargetName = input.TargetName
}
});
using var stream = new MemoryStream();
Serializer.Serialize(stream, packet);
output = new BinaryPacket(stream);
extraPackets = null;
return true;
}
protected override bool Parse(SsoPacket input, BotKeystore keystore, BotAppInfo appInfo, BotDeviceInfo device,
out RenameMemberEvent output, out List<ProtocolEvent>? extraEvents)
{
var payload = input.Payload.ReadBytes(BinaryPacket.Prefix.Uint32 | BinaryPacket.Prefix.WithPrefix);
var packet = Serializer.Deserialize<OidbSvcTrpcTcpResponse<OidbSvcTrpcTcp0x8FC_3Response>>(payload.AsSpan());
output = RenameMemberEvent.Result((int)packet.ErrorCode);
extraEvents = null;
return true;
}
}