diff --git a/Lagrange.OneBot/Core/Entity/Action/OneBotResult.cs b/Lagrange.OneBot/Core/Entity/Action/OneBotResult.cs index 77ac8cf..a028a77 100644 --- a/Lagrange.OneBot/Core/Entity/Action/OneBotResult.cs +++ b/Lagrange.OneBot/Core/Entity/Action/OneBotResult.cs @@ -3,13 +3,13 @@ using System.Text.Json.Serialization; namespace Lagrange.OneBot.Core.Entity.Action; [Serializable] -public class OneBotResult(object data, int retCode, string status, string echo) +public class OneBotResult(object? data, int retCode, string status, string echo) { [JsonPropertyName("status")] public string Status { get; set; } = status; [JsonPropertyName("retcode")] public int RetCode { get; set; } = retCode; - [JsonPropertyName("data")] public object Data { get; set; } = data; + [JsonPropertyName("data")] public object? Data { get; set; } = data; [JsonPropertyName("echo")] public string Echo { get; set; } = echo; } \ No newline at end of file diff --git a/Lagrange.OneBot/Core/Entity/Action/OneBotSetGroupAdmin.cs b/Lagrange.OneBot/Core/Entity/Action/OneBotSetGroupAdmin.cs new file mode 100644 index 0000000..a5778d8 --- /dev/null +++ b/Lagrange.OneBot/Core/Entity/Action/OneBotSetGroupAdmin.cs @@ -0,0 +1,13 @@ +using System.Text.Json.Serialization; + +namespace Lagrange.OneBot.Core.Entity.Action; + +[Serializable] +public class OneBotSetGroupAdmin +{ + [JsonPropertyName("group_id")] public uint GroupId { get; set; } + + [JsonPropertyName("user_id")] public uint UserId { get; set; } + + [JsonPropertyName("enable")] public bool Enable { get; set; } +} \ No newline at end of file diff --git a/Lagrange.OneBot/Core/Entity/Action/OneBotSetGroupBan.cs b/Lagrange.OneBot/Core/Entity/Action/OneBotSetGroupBan.cs new file mode 100644 index 0000000..1266631 --- /dev/null +++ b/Lagrange.OneBot/Core/Entity/Action/OneBotSetGroupBan.cs @@ -0,0 +1,13 @@ +using System.Text.Json.Serialization; + +namespace Lagrange.OneBot.Core.Entity.Action; + +[Serializable] +public class OneBotSetGroupBan +{ + [JsonPropertyName("user_id")] public uint UserId { get; set; } + + [JsonPropertyName("group_id")] public uint GroupId { get; set; } + + [JsonPropertyName("duration")] public uint Duration { get; set; } +} \ No newline at end of file diff --git a/Lagrange.OneBot/Core/Entity/Action/OneBotSetGroupKick.cs b/Lagrange.OneBot/Core/Entity/Action/OneBotSetGroupKick.cs new file mode 100644 index 0000000..2e646fc --- /dev/null +++ b/Lagrange.OneBot/Core/Entity/Action/OneBotSetGroupKick.cs @@ -0,0 +1,13 @@ +using System.Text.Json.Serialization; + +namespace Lagrange.OneBot.Core.Entity.Action; + +[Serializable] +public class OneBotSetGroupKick +{ + [JsonPropertyName("user_id")] public uint UserId { get; set; } + + [JsonPropertyName("group_id")] public uint GroupId { get; set; } + + [JsonPropertyName("reject_add_request")] public bool RejectAddRequest { get; set; } +} \ No newline at end of file diff --git a/Lagrange.OneBot/Core/Entity/Action/OneBotSetGroupWholeBan.cs b/Lagrange.OneBot/Core/Entity/Action/OneBotSetGroupWholeBan.cs new file mode 100644 index 0000000..dc02e46 --- /dev/null +++ b/Lagrange.OneBot/Core/Entity/Action/OneBotSetGroupWholeBan.cs @@ -0,0 +1,11 @@ +using System.Text.Json.Serialization; + +namespace Lagrange.OneBot.Core.Entity.Action; + +[Serializable] +public class OneBotSetGroupWholeBan +{ + [JsonPropertyName("group_id")] public uint GroupId { get; set; } + + [JsonPropertyName("enable")] public bool Enable { get; set; } +} \ No newline at end of file diff --git a/Lagrange.OneBot/Core/Entity/Action/Response/OneBotLoginInfoResponse.cs b/Lagrange.OneBot/Core/Entity/Action/Response/OneBotLoginInfoResponse.cs new file mode 100644 index 0000000..8b92640 --- /dev/null +++ b/Lagrange.OneBot/Core/Entity/Action/Response/OneBotLoginInfoResponse.cs @@ -0,0 +1,11 @@ +using System.Text.Json.Serialization; + +namespace Lagrange.OneBot.Core.Entity.Action.Response; + +[Serializable] +public class OneBotLoginInfoResponse(uint userId, string nickName) +{ + [JsonPropertyName("user_id")] public uint UserId { get; set; } = userId; + + [JsonPropertyName("nickname")] public string NickName { get; set; } = nickName; +} \ No newline at end of file diff --git a/Lagrange.OneBot/Core/Entity/Action/Response/OneBotVersionInfoResponse.cs b/Lagrange.OneBot/Core/Entity/Action/Response/OneBotVersionInfoResponse.cs new file mode 100644 index 0000000..8d2e85a --- /dev/null +++ b/Lagrange.OneBot/Core/Entity/Action/Response/OneBotVersionInfoResponse.cs @@ -0,0 +1,15 @@ +using System.Text.Json.Serialization; + +namespace Lagrange.OneBot.Core.Entity.Action.Response; + +[Serializable] +public class OneBotVersionInfoResponse(string ntProtocol) +{ + [JsonPropertyName("app_name")] public string AppName => Constant.OneBotImpl; + + [JsonPropertyName("app_version")] public string AppVersion => Constant.OneBotImplVersion; + + [JsonPropertyName("protocol_version")] public string ProtocolVersion => $"v{Constant.OneBotProtocolVersion}"; + + [JsonPropertyName("nt_protocol")] public string NTProtocol { get; } = ntProtocol; +} \ No newline at end of file diff --git a/Lagrange.OneBot/Core/Operation/IOperation.cs b/Lagrange.OneBot/Core/Operation/IOperation.cs index 5903a07..3a503c7 100644 --- a/Lagrange.OneBot/Core/Operation/IOperation.cs +++ b/Lagrange.OneBot/Core/Operation/IOperation.cs @@ -6,5 +6,5 @@ namespace Lagrange.OneBot.Core.Operation; public interface IOperation { - public OneBotResult HandleOperation(string echo, BotContext context, JsonObject? payload); + public Task HandleOperation(string echo, BotContext context, JsonObject? payload); } \ No newline at end of file diff --git a/Lagrange.OneBot/Core/Operation/Message/GetLoginInfoOperation.cs b/Lagrange.OneBot/Core/Operation/Message/GetLoginInfoOperation.cs new file mode 100644 index 0000000..8fca8ad --- /dev/null +++ b/Lagrange.OneBot/Core/Operation/Message/GetLoginInfoOperation.cs @@ -0,0 +1,17 @@ +using System.Text.Json.Nodes; +using Lagrange.Core; +using Lagrange.OneBot.Core.Entity.Action; +using Lagrange.OneBot.Core.Entity.Action.Response; + +namespace Lagrange.OneBot.Core.Operation.Message; + +[Operation("get_login_info")] +public class GetLoginInfoOperation : IOperation +{ + public Task HandleOperation(string echo, BotContext context, JsonObject? payload) + { + var keystore = context.ContextCollection.Keystore; + var result = new OneBotLoginInfoResponse(keystore.Uin, keystore.Info?.Name ?? ""); + return Task.FromResult(new OneBotResult(result, 0, "ok", echo)); + } +} \ No newline at end of file diff --git a/Lagrange.OneBot/Core/Operation/Message/GetVersionInfoOperation.cs b/Lagrange.OneBot/Core/Operation/Message/GetVersionInfoOperation.cs new file mode 100644 index 0000000..033b927 --- /dev/null +++ b/Lagrange.OneBot/Core/Operation/Message/GetVersionInfoOperation.cs @@ -0,0 +1,18 @@ +using System.Text.Json.Nodes; +using Lagrange.Core; +using Lagrange.OneBot.Core.Entity.Action; +using Lagrange.OneBot.Core.Entity.Action.Response; + +namespace Lagrange.OneBot.Core.Operation.Message; + +[Operation("get_version_info")] +public class GetVersionInfoOperation : IOperation +{ + public Task HandleOperation(string echo, BotContext context, JsonObject? payload) + { + var appInfo = context.ContextCollection.AppInfo; + string version = $"{appInfo.Os} | {appInfo.CurrentVersion}"; + + return Task.FromResult(new OneBotResult(new OneBotVersionInfoResponse(version), 0, "ok", echo)); + } +} \ No newline at end of file diff --git a/Lagrange.OneBot/Core/Operation/Message/SendMessageOperation.cs b/Lagrange.OneBot/Core/Operation/Message/SendMessageOperation.cs index 8c17282..8a9bbca 100644 --- a/Lagrange.OneBot/Core/Operation/Message/SendMessageOperation.cs +++ b/Lagrange.OneBot/Core/Operation/Message/SendMessageOperation.cs @@ -27,12 +27,12 @@ public sealed class SendMessageOperation : IOperation } } - public OneBotResult HandleOperation(string echo, BotContext context, JsonObject? payload) + public async Task HandleOperation(string echo, BotContext context, JsonObject? payload) { var message = payload.Deserialize(); if (message != null) { - context.SendMessage(ParseChain(message).Build()); + await context.SendMessage(ParseChain(message).Build()); return new OneBotResult(new OneBotMessageResponse(0), 0, "ok", echo); } diff --git a/Lagrange.OneBot/Core/Operation/Message/SetGroupAdminOperation.cs b/Lagrange.OneBot/Core/Operation/Message/SetGroupAdminOperation.cs new file mode 100644 index 0000000..e22bac0 --- /dev/null +++ b/Lagrange.OneBot/Core/Operation/Message/SetGroupAdminOperation.cs @@ -0,0 +1,24 @@ +using System.Text.Json; +using System.Text.Json.Nodes; +using Lagrange.Core; +using Lagrange.Core.Common.Interface.Api; +using Lagrange.OneBot.Core.Entity.Action; + +namespace Lagrange.OneBot.Core.Operation.Message; + +[Operation("set_group_admin")] +public class SetGroupAdminOperation : IOperation +{ + public async Task HandleOperation(string echo, BotContext context, JsonObject? payload) + { + var message = payload.Deserialize(); + + if (message != null) + { + bool _ = await context.SetGroupAdmin(message.GroupId, message.UserId, message.Enable); + return new OneBotResult(null, 0, "ok", echo); + } + + throw new Exception(); + } +} \ No newline at end of file diff --git a/Lagrange.OneBot/Core/Operation/Message/SetGroupBanOperation.cs b/Lagrange.OneBot/Core/Operation/Message/SetGroupBanOperation.cs new file mode 100644 index 0000000..6f748ef --- /dev/null +++ b/Lagrange.OneBot/Core/Operation/Message/SetGroupBanOperation.cs @@ -0,0 +1,24 @@ +using System.Text.Json; +using System.Text.Json.Nodes; +using Lagrange.Core; +using Lagrange.Core.Common.Interface.Api; +using Lagrange.OneBot.Core.Entity.Action; + +namespace Lagrange.OneBot.Core.Operation.Message; + +[Operation("set_group_ban")] +public class SetGroupBanOperation : IOperation +{ + public async Task HandleOperation(string echo, BotContext context, JsonObject? payload) + { + var message = payload.Deserialize(); + + if (message != null) + { + bool _ = await context.MuteGroupMember(message.GroupId, message.UserId, message.Duration); + return new OneBotResult(null, 0, "ok", echo); + } + + throw new Exception(); + } +} \ No newline at end of file diff --git a/Lagrange.OneBot/Core/Operation/Message/SetGroupKickOperation.cs b/Lagrange.OneBot/Core/Operation/Message/SetGroupKickOperation.cs new file mode 100644 index 0000000..e149641 --- /dev/null +++ b/Lagrange.OneBot/Core/Operation/Message/SetGroupKickOperation.cs @@ -0,0 +1,24 @@ +using System.Text.Json; +using System.Text.Json.Nodes; +using Lagrange.Core; +using Lagrange.Core.Common.Interface.Api; +using Lagrange.OneBot.Core.Entity.Action; + +namespace Lagrange.OneBot.Core.Operation.Message; + +[Operation("set_group_kick")] +public class SetGroupKickOperation : IOperation +{ + public async Task HandleOperation(string echo, BotContext context, JsonObject? payload) + { + var message = payload.Deserialize(); + + if (message != null) + { + bool _ = await context.KickGroupMember(message.GroupId, message.UserId, message.RejectAddRequest); + return new OneBotResult(null, 0, "ok", echo); + } + + throw new Exception(); + } +} \ No newline at end of file diff --git a/Lagrange.OneBot/Core/Operation/Message/SetGroupWholeBanOperation.cs b/Lagrange.OneBot/Core/Operation/Message/SetGroupWholeBanOperation.cs new file mode 100644 index 0000000..816bdd3 --- /dev/null +++ b/Lagrange.OneBot/Core/Operation/Message/SetGroupWholeBanOperation.cs @@ -0,0 +1,24 @@ +using System.Text.Json; +using System.Text.Json.Nodes; +using Lagrange.Core; +using Lagrange.Core.Common.Interface.Api; +using Lagrange.OneBot.Core.Entity.Action; + +namespace Lagrange.OneBot.Core.Operation.Message; + +[Operation("set_group_whole_ban")] +public class SetGroupWholeBanOperation : IOperation +{ + public async Task HandleOperation(string echo, BotContext context, JsonObject? payload) + { + var message = payload.Deserialize(); + + if (message != null) + { + bool _ = await context.MuteGroupGlobal(message.GroupId, message.Enable); + return new OneBotResult(null, 0, "ok", echo); + } + + throw new Exception(); + } +} \ No newline at end of file diff --git a/Lagrange.OneBot/Lagrange.OneBot.csproj b/Lagrange.OneBot/Lagrange.OneBot.csproj index cb51183..c37d105 100644 --- a/Lagrange.OneBot/Lagrange.OneBot.csproj +++ b/Lagrange.OneBot/Lagrange.OneBot.csproj @@ -9,7 +9,6 @@ - diff --git a/README.md b/README.md index fd2983f..e99360e 100644 --- a/README.md +++ b/README.md @@ -103,16 +103,16 @@ Please use Lagrange.Core responsibly and in accordance with the law. | ------------------------ | -------- | | [/send_private_msg] | 🔴 | | [/send_group_msg] | 🔴 | -| [/send_msg] | 🔴 | +| [/send_msg] | 🟢 | | [/delete_msg] | 🔴 | | [/get_msg] | 🔴 | | [/get_forward_msg] | 🔴 | -| [/send_like] | 🔴 | -| [/set_group_kick] | 🔴 | -| [/set_group_ban] | 🔴 | +| ~~[/send_like]~~ | 🔴 | +| [/set_group_kick] | 🟢 | +| [/set_group_ban] | 🟢 | | [/set_group_anonymous_ban] | 🔴 | -| [/set_group_whole_ban] | 🔴 | -| [/set_group_admin] | 🔴 | +| [/set_group_whole_ban] | 🟢 | +| [/set_group_admin] | 🟢 | | [/set_group_anonymous] | 🔴 | | [/set_group_card] | 🔴 | | [/set_group_name] | 🔴 | @@ -120,7 +120,7 @@ Please use Lagrange.Core responsibly and in accordance with the law. | [/set_group_special_title] | 🔴 | | [/set_friend_add_request] | 🔴 | | [/set_group_add_request] | 🔴 | -| [/get_login_info] | 🔴 | +| [/get_login_info] | 🟢 | | [/get_stranger_info] | 🔴 | | [/get_friend_list] | 🔴 | | [/get_group_info] | 🔴 | @@ -136,9 +136,9 @@ Please use Lagrange.Core responsibly and in accordance with the law. | [/can_send_image] | 🔴 | | [/can_send_record] | 🔴 | | [/get_status] | 🔴 | -| [/get_version_info] | 🔴 | +| [/get_version_info] | 🟢 | | [/set_restart] | 🔴 | -| [/clean_cache] | 🔴 | +| [/clean_cache] | 🔴 | [/send_private_msg]: https://github.com/botuniverse/onebot-11/blob/master/api/public.md#send_private_msg-%E5%8F%91%E9%80%81%E7%A7%81%E8%81%8A%E6%B6%88%E6%81%AF [/send_group_msg]: https://github.com/botuniverse/onebot-11/blob/master/api/public.md#send_group_msg-%E5%8F%91%E9%80%81%E7%BE%A4%E6%B6%88%E6%81%AF @@ -187,7 +187,7 @@ Please use Lagrange.Core responsibly and in accordance with the law. | PostType| EventName | Support | | --------| -----------------------------|----------| | Message | [Private Message] | 🔴 | -| Message | [Group Message] | 🔴 | +| Message | [Group Message] | 🟢 | | Notice | [Group File Upload] | 🔴 | | Notice | [Group Admin Change] | 🔴 | | Notice | [Group Member Decrease] | 🔴 |