From f38982a3536916909fea27a526ab43f1c51cfc3b Mon Sep 17 00:00:00 2001 From: Gehongyan Date: Sun, 10 Nov 2024 01:31:01 +0800 Subject: [PATCH] Kick guild members --- .../Entities/Users/IGuildMember.cs | 17 +++++++++++++++++ .../Entities/Users/RestGuildMember.cs | 4 ++++ src/QQBot.Net.Rest/Entities/Users/UserHelper.cs | 17 +++++++++++++++++ .../Entities/Users/SocketGuildMember.cs | 5 +++++ 4 files changed, 43 insertions(+) create mode 100644 src/QQBot.Net.Rest/Entities/Users/UserHelper.cs diff --git a/src/QQBot.Net.Core/Entities/Users/IGuildMember.cs b/src/QQBot.Net.Core/Entities/Users/IGuildMember.cs index 0a8ddbb..f73bd1c 100644 --- a/src/QQBot.Net.Core/Entities/Users/IGuildMember.cs +++ b/src/QQBot.Net.Core/Entities/Users/IGuildMember.cs @@ -29,4 +29,21 @@ public interface IGuildMember : IGuildUser /// 获取此用户加入该子频道的时间。 /// DateTimeOffset? JoinedAt { get; } + + /// + /// 将此用户从此子频道中踢出。 + /// + /// 是否在踢出成员的同时将其加入黑名单。 + /// + /// 撤回指定时间范围内的消息,支持的值有: + /// + /// 释义 + /// 0 不撤回任何消息。 + /// 371530 撤回指定天数之前至当前的所有消息。 + /// -1 撤回全部消息。 + /// + /// + /// 发送请求时要使用的选项。 + /// 一个表示异步踢出操作的任务。 + Task KickAsync(bool addBlacklist = false, int pruneDays = 0, RequestOptions? options = null); } diff --git a/src/QQBot.Net.Rest/Entities/Users/RestGuildMember.cs b/src/QQBot.Net.Rest/Entities/Users/RestGuildMember.cs index 68b64d7..cf57616 100644 --- a/src/QQBot.Net.Rest/Entities/Users/RestGuildMember.cs +++ b/src/QQBot.Net.Rest/Entities/Users/RestGuildMember.cs @@ -45,4 +45,8 @@ internal void Update(User userModel, Member? memberModel) RoleIds = memberModel?.Roles; JoinedAt = memberModel?.JoinedAt; } + + /// + public Task KickAsync(bool addBlacklist = false, int pruneDays = 0, RequestOptions? options = null) => + UserHelper.KickAsync(this, Client, addBlacklist, pruneDays, options); } diff --git a/src/QQBot.Net.Rest/Entities/Users/UserHelper.cs b/src/QQBot.Net.Rest/Entities/Users/UserHelper.cs new file mode 100644 index 0000000..b91edb0 --- /dev/null +++ b/src/QQBot.Net.Rest/Entities/Users/UserHelper.cs @@ -0,0 +1,17 @@ +using QQBot.API.Rest; + +namespace QQBot.Rest; + +internal static class UserHelper +{ + public static async Task KickAsync(IGuildMember member, BaseQQBotClient client, + bool addBlacklist, int pruneDays, RequestOptions? options) + { + DeleteGuildMemberParams args = new() + { + AddBlacklist = addBlacklist, + DeleteHistoryMessageDays = pruneDays + }; + await client.ApiClient.DeleteGuildMemberAsync(member.GuildId, member.Id, args, options).ConfigureAwait(false); + } +} diff --git a/src/QQBot.Net.WebSocket/Entities/Users/SocketGuildMember.cs b/src/QQBot.Net.WebSocket/Entities/Users/SocketGuildMember.cs index 06f74b6..cd868bb 100644 --- a/src/QQBot.Net.WebSocket/Entities/Users/SocketGuildMember.cs +++ b/src/QQBot.Net.WebSocket/Entities/Users/SocketGuildMember.cs @@ -1,4 +1,5 @@ using System.Diagnostics; +using QQBot.Rest; namespace QQBot.WebSocket; @@ -46,6 +47,10 @@ internal void Update(ClientState state, API.User userModel, API.Member? model) JoinedAt = model?.JoinedAt; } + /// + public Task KickAsync(bool addBlacklist = false, int pruneDays = 0, RequestOptions? options = null) => + UserHelper.KickAsync(this, Client, addBlacklist, pruneDays, options); + private string DebuggerDisplay => $"{Nickname ?? Username} ({Id}{(IsBot ?? false ? ", Bot" : "")}, Guild Member)"; }