From 9062298220f1ef65ad16e2be189b26225b2b4518 Mon Sep 17 00:00:00 2001 From: TheSnowfield <17957399+TheSnowfield@users.noreply.github.com> Date: Tue, 17 Oct 2023 12:09:56 +0800 Subject: [PATCH 1/6] Expose qrcode url to user --- Lagrange.Core.Test/Tests/WtLoginTest.cs | 2 +- Lagrange.Core/Common/Interface/Api/BotExt.cs | 10 +++++----- .../Context/Logic/Implementation/WtExchangeLogic.cs | 4 ++-- Lagrange.OneBot/LagrangeApp.cs | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Lagrange.Core.Test/Tests/WtLoginTest.cs b/Lagrange.Core.Test/Tests/WtLoginTest.cs index 95a6aba..08d519c 100644 --- a/Lagrange.Core.Test/Tests/WtLoginTest.cs +++ b/Lagrange.Core.Test/Tests/WtLoginTest.cs @@ -36,7 +36,7 @@ public class WtLoginTest var qrCode = await bot.FetchQrCode(); if (qrCode != null) { - await File.WriteAllBytesAsync("qr.png", qrCode); + await File.WriteAllBytesAsync("qr.png", qrCode.Value.QrCode); await bot.LoginByQrCode(); } } diff --git a/Lagrange.Core/Common/Interface/Api/BotExt.cs b/Lagrange.Core/Common/Interface/Api/BotExt.cs index d1cb145..213b527 100644 --- a/Lagrange.Core/Common/Interface/Api/BotExt.cs +++ b/Lagrange.Core/Common/Interface/Api/BotExt.cs @@ -7,9 +7,9 @@ public static class BotExt /// /// Fetch the qrcode for QRCode Login /// - /// the byte of QRCode, usually in the form of PNG - public static async Task FetchQrCode(this BotContext bot) - => await bot.ContextCollection.Business.WtExchangeLogic.FetchQrCode(); + /// return url and qrcode image in PNG format + public static Task<(string Url, byte[] QrCode)?> FetchQrCode(this BotContext bot) + => bot.ContextCollection.Business.WtExchangeLogic.FetchQrCode(); /// /// Use this method to login by QrCode, you should call first @@ -20,8 +20,8 @@ public static class BotExt /// /// Use this method to login by password, EasyLogin may be preformed if there is sig in /// - public static async Task LoginByPassword(this BotContext bot) - => await bot.ContextCollection.Business.WtExchangeLogic.LoginByPassword(); + public static Task LoginByPassword(this BotContext bot) + => bot.ContextCollection.Business.WtExchangeLogic.LoginByPassword(); /// /// Submit the captcha of the url given by the diff --git a/Lagrange.Core/Internal/Context/Logic/Implementation/WtExchangeLogic.cs b/Lagrange.Core/Internal/Context/Logic/Implementation/WtExchangeLogic.cs index bfc9652..fde5b12 100644 --- a/Lagrange.Core/Internal/Context/Logic/Implementation/WtExchangeLogic.cs +++ b/Lagrange.Core/Internal/Context/Logic/Implementation/WtExchangeLogic.cs @@ -56,7 +56,7 @@ internal class WtExchangeLogic : LogicBase /// 1. resolve wtlogin.trans_emp CMD0x31 packet /// 2. Schedule wtlogin.trans_emp CMD0x12 Task /// - public async Task FetchQrCode() + public async Task<(string, byte[])?> FetchQrCode() { Collection.Log.LogInfo(Tag, "Connecting Servers..."); if (!await Collection.Socket.Connect()) return null; @@ -73,7 +73,7 @@ internal class WtExchangeLogic : LogicBase Collection.Keystore.Session.QrUrl = @event.Url; Collection.Log.LogInfo(Tag, $"QrCode Fetched, Expiration: {@event.Expiration} seconds"); - return @event.QrCode; + return (@event.Url, @event.QrCode); } return null; } diff --git a/Lagrange.OneBot/LagrangeApp.cs b/Lagrange.OneBot/LagrangeApp.cs index 1d723ec..c9e335f 100644 --- a/Lagrange.OneBot/LagrangeApp.cs +++ b/Lagrange.OneBot/LagrangeApp.cs @@ -72,7 +72,7 @@ public class LagrangeApp : IHost var qrCode = await Instance.FetchQrCode(); if (qrCode != null) { - QrCodeHelper.Output(Instance.ContextCollection.Keystore.Session.QrUrl ?? ""); + QrCodeHelper.Output(qrCode.Value.Url ?? ""); await Instance.LoginByQrCode(); } } From 2da9647e13b0c4190aea20927c7fedf73c018055 Mon Sep 17 00:00:00 2001 From: TheSnowfield <17957399+TheSnowfield@users.noreply.github.com> Date: Tue, 17 Oct 2023 12:12:25 +0800 Subject: [PATCH 2/6] Add IMessageEntity to chain directly --- Lagrange.Core/Message/MessageBuilder.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Lagrange.Core/Message/MessageBuilder.cs b/Lagrange.Core/Message/MessageBuilder.cs index 8ccdb8a..6abc152 100644 --- a/Lagrange.Core/Message/MessageBuilder.cs +++ b/Lagrange.Core/Message/MessageBuilder.cs @@ -81,6 +81,12 @@ public sealed class MessageBuilder return this; } + + public MessageBuilder Add(IMessageEntity entity) + { + _chain.Add(entity); + return this; + } public MessageChain Build() => _chain; } \ No newline at end of file From e87772630a35964ffe810516ea2e8fb72f3d4c2a Mon Sep 17 00:00:00 2001 From: TheSnowfield <17957399+TheSnowfield@users.noreply.github.com> Date: Tue, 17 Oct 2023 12:14:14 +0800 Subject: [PATCH 3/6] Update .gitignore --- .gitignore | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index ed5f2c1..3fbf0d3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,12 @@ +# .net build artiifacts bin/ obj/ /packages/ + riderModule.iml /_ReSharper.Caches/ -Lagrange.Core/Utility/Crypto/Provider/Dandelion/*.cs \ No newline at end of file +Lagrange.Core/Utility/Crypto/Provider/Dandelion/*.cs + +# rider files +.idea/ +*.DotSettings.user From c79d908bcb9ec6aacbef1193a6371fe5a975198b Mon Sep 17 00:00:00 2001 From: Zaitonn <103164490+Zaitonn@users.noreply.github.com> Date: Tue, 17 Oct 2023 12:16:17 +0800 Subject: [PATCH 4/6] add `MsgRecvEventArgs` --- .gitignore | 3 +- .../Core/Entity/Action/OneBotResult.cs | 6 +- .../Core/Network/HttpPostService.cs | 2 +- .../Core/Network/ILagrangeWebService.cs | 2 +- .../Core/Network/MsgRecvEventArgs.cs | 10 + .../Core/Network/ReverseWSService.cs | 4 +- .../Core/Operation/OperationService.cs | 2 +- README.md | 228 ++++++++++-------- 8 files changed, 145 insertions(+), 112 deletions(-) create mode 100644 Lagrange.OneBot/Core/Network/MsgRecvEventArgs.cs diff --git a/.gitignore b/.gitignore index ed5f2c1..aac031c 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ obj/ /packages/ riderModule.iml /_ReSharper.Caches/ -Lagrange.Core/Utility/Crypto/Provider/Dandelion/*.cs \ No newline at end of file +Lagrange.Core/Utility/Crypto/Provider/Dandelion/*.cs +.vscode/ diff --git a/Lagrange.OneBot/Core/Entity/Action/OneBotResult.cs b/Lagrange.OneBot/Core/Entity/Action/OneBotResult.cs index a028a77..8755fd2 100644 --- a/Lagrange.OneBot/Core/Entity/Action/OneBotResult.cs +++ b/Lagrange.OneBot/Core/Entity/Action/OneBotResult.cs @@ -10,6 +10,8 @@ public class OneBotResult(object? data, int retCode, string status, string echo) [JsonPropertyName("retcode")] public int RetCode { get; set; } = retCode; [JsonPropertyName("data")] public object? Data { get; set; } = data; - + [JsonPropertyName("echo")] public string Echo { get; set; } = echo; -} \ No newline at end of file + + [JsonIgnore] public string? Identifier { get; internal set; } +} diff --git a/Lagrange.OneBot/Core/Network/HttpPostService.cs b/Lagrange.OneBot/Core/Network/HttpPostService.cs index 4cf5365..a055d22 100644 --- a/Lagrange.OneBot/Core/Network/HttpPostService.cs +++ b/Lagrange.OneBot/Core/Network/HttpPostService.cs @@ -8,7 +8,7 @@ namespace Lagrange.OneBot.Core.Network; public sealed class HttpPostService : ILagrangeWebService { - public event EventHandler? OnMessageReceived = delegate { }; + public event EventHandler? OnMessageReceived = delegate { }; private readonly HttpClient _client; diff --git a/Lagrange.OneBot/Core/Network/ILagrangeWebService.cs b/Lagrange.OneBot/Core/Network/ILagrangeWebService.cs index 15a4781..c4f75b6 100644 --- a/Lagrange.OneBot/Core/Network/ILagrangeWebService.cs +++ b/Lagrange.OneBot/Core/Network/ILagrangeWebService.cs @@ -4,7 +4,7 @@ namespace Lagrange.OneBot.Core.Network; public interface ILagrangeWebService : IHostedService { - public event EventHandler OnMessageReceived; + public event EventHandler OnMessageReceived; public Task SendJsonAsync(T json, CancellationToken cancellationToken = default); } \ No newline at end of file diff --git a/Lagrange.OneBot/Core/Network/MsgRecvEventArgs.cs b/Lagrange.OneBot/Core/Network/MsgRecvEventArgs.cs new file mode 100644 index 0000000..102de14 --- /dev/null +++ b/Lagrange.OneBot/Core/Network/MsgRecvEventArgs.cs @@ -0,0 +1,10 @@ +using Microsoft.Extensions.Hosting; + +namespace Lagrange.OneBot.Core.Network; + +public class MsgRecvEventArgs(string data, string? identifier = null) : EventArgs +{ + public string? Identifier { get; init; } = identifier; + + public string Data { get; init; } = data; +} diff --git a/Lagrange.OneBot/Core/Network/ReverseWSService.cs b/Lagrange.OneBot/Core/Network/ReverseWSService.cs index 9b12392..46e526c 100644 --- a/Lagrange.OneBot/Core/Network/ReverseWSService.cs +++ b/Lagrange.OneBot/Core/Network/ReverseWSService.cs @@ -10,7 +10,7 @@ namespace Lagrange.OneBot.Core.Network; public sealed class ReverseWSService : ILagrangeWebService { - public event EventHandler OnMessageReceived = delegate { }; + public event EventHandler OnMessageReceived = delegate { }; private readonly WebsocketClient _socket; @@ -45,7 +45,7 @@ public sealed class ReverseWSService : ILagrangeWebService }); _timer = new Timer(OnHeartbeat, null, int.MaxValue, config.GetValue("Implementation:ReverseWebSocket:HeartBeatInterval")); - _socket.MessageReceived.Subscribe(resp => OnMessageReceived.Invoke(this, resp.Text ?? "")); + _socket.MessageReceived.Subscribe(resp => OnMessageReceived.Invoke(this, new(resp.Text ?? ""))); } public async Task StartAsync(CancellationToken cancellationToken) diff --git a/Lagrange.OneBot/Core/Operation/OperationService.cs b/Lagrange.OneBot/Core/Operation/OperationService.cs index 0e59fa2..ba3f5c5 100644 --- a/Lagrange.OneBot/Core/Operation/OperationService.cs +++ b/Lagrange.OneBot/Core/Operation/OperationService.cs @@ -25,7 +25,7 @@ public sealed class OperationService if (attribute != null) _operations[attribute.Api] = (IOperation)type.CreateInstance(false); } - service.OnMessageReceived += async (_, s) => await HandleOperation(s); + service.OnMessageReceived += async (_, e) => await HandleOperation(e.Data); } private async Task HandleOperation(string data) diff --git a/README.md b/README.md index f45d0bb..2ac20e2 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ An Implementation of NTQQ Protocol, with Pure C#, Derived from Konata.Core -## Disclaimer: +## Disclaimer The Lagrange.Core project, including its developers, contributors, and affiliated individuals or entities, hereby explicitly disclaim any association with, support for, or endorsement of any form of illegal behavior. This disclaimer extends to any use or application of the Lagrange.Core project that may be contrary to local, national, or international laws, regulations, or ethical guidelines. @@ -26,22 +26,23 @@ By using or accessing Lagrange.Core, the user acknowledges and agrees to release Please use Lagrange.Core responsibly and in accordance with the law. ## Features List -| Protocol | Support | Login | Support | Messages | Support | Operations | Support | Events | Support | -|----------|---------|---------------------------|---------|:-----------------|:-----------|:------------------|:-----------|:-----------------------|:--------| -| Windows | 🟢 | QrCode | 🟢 | Images | 🟢 | ~~Poke~~ | 🔴 | Captcha | 🟢 | -| macOS | 🟢 | Password | 🟢 | Text / At | 🟢 | Recall | 🟡 | BotOnline | 🟢 | -| Linux | 🟢 | EasyLogin | 🟢 | ~~Records~~ | 🔴 | Leave Group | 🟢 | BotOffline | 🟢 | -| | | UnusalDevice
Password | 🔴 | QFace | 🟢 | ~~Special Title~~ | 🔴 | Message | 🟢 | -| | | UnusalDevice
Easy | 🟢 | Json | 🟡 | Kick Member | 🟢 | ~~Poke~~ | 🔴 | -| | | NewDeviceVerify | 🔴 | Xml | 🟢 | Mute Member | 🟢 | MessageRecall | 🔴 | -| | | | | Forward | 🟢 | Set Admin | 🟢 | GroupMemberDecrease | 🟢 | -| | | | | Video | 🔴 | Friend Request | 🔴 | GroupMemberIncrease | 🟢 | -| | | | | ~~Flash Image~~ | 🔴 | Group Request | 🔴 | GroupPromoteAdmin | 🟢 | -| | | | | Reply | 🟢 | ~~Voice Call~~ | 🔴 | GroupInvite | 🟢 | -| | | | | File | 🟡 | Client Key | 🟢 | GroupRequestJoin | 🔴 | -| | | | | | | Cookies | 🟢 | FriendRequest | 🔴 | -| | | | | | | Send Message | 🟢 | ~~FriendTyping~~ | 🔴 | -| | | | | | | | | ~~FriendVoiceCall~~ | 🔴 | + +| Protocol | Support | Login | Support | Messages | Support | Operations | Support | Events | Support | +| -------- | :-----: | ------------------------- | :-----: | :-------------- | :-----: | :---------------- | :-----: | :------------------ | :-----: | +| Windows | 🟢 | QrCode | 🟢 | Images | 🟢 | ~~Poke~~ | 🔴 | Captcha | 🟢 | +| macOS | 🟢 | Password | 🟢 | Text / At | 🟢 | Recall | 🟡 | BotOnline | 🟢 | +| Linux | 🟢 | EasyLogin | 🟢 | ~~Records~~ | 🔴 | Leave Group | 🟢 | BotOffline | 🟢 | +| | | UnusalDevice
Password | 🔴 | QFace | 🟢 | ~~Special Title~~ | 🔴 | Message | 🟢 | +| | | UnusalDevice
Easy | 🟢 | Json | 🟡 | Kick Member | 🟢 | ~~Poke~~ | 🔴 | +| | | NewDeviceVerify | 🔴 | Xml | 🟢 | Mute Member | 🟢 | MessageRecall | 🔴 | +| | | | | Forward | 🟢 | Set Admin | 🟢 | GroupMemberDecrease | 🟢 | +| | | | | Video | 🔴 | Friend Request | 🔴 | GroupMemberIncrease | 🟢 | +| | | | | ~~Flash Image~~ | 🔴 | Group Request | 🔴 | GroupPromoteAdmin | 🟢 | +| | | | | Reply | 🟢 | ~~Voice Call~~ | 🔴 | GroupInvite | 🟢 | +| | | | | File | 🟡 | Client Key | 🟢 | GroupRequestJoin | 🔴 | +| | | | | | | Cookies | 🟢 | FriendRequest | 🔴 | +| | | | | | | Send Message | 🟢 | ~~FriendTyping~~ | 🔴 | +| | | | | | | | | ~~FriendVoiceCall~~ | 🔴 | ## Lagrange.OneBot @@ -50,28 +51,28 @@ Please use Lagrange.Core responsibly and in accordance with the law.
Message Segement -| Message Segement| Support | -| ------------ | ------------| -| [Text] | 🟢 | -| [Face] | 🟢 | -| [Image] | 🟢 | -| [Record] | 🔴 | -| [Video] | 🔴 | -| [At] | 🟢 | -| [Rps] | 🔴 | -| [Dice] | 🔴 | -| [Shake] | 🔴 | -| [Poke] | 🔴 | -| [Anonymous] | 🔴 | -| [Share] | 🔴 | -| [Contact] | 🔴 | -| [Location] | 🔴 | -| [Music] | 🔴 | -| [Reply] | 🔴 | -| [Forward] | 🔴 | -| [Node] | 🔴 | -| [Xml] | 🔴 | -| [Json] | 🔴 | +| Message Segement | Support | +| ---------------- | :-----: | +| [Text] | 🟢 | +| [Face] | 🟢 | +| [Image] | 🟢 | +| [Record] | 🔴 | +| [Video] | 🔴 | +| [At] | 🟢 | +| [Rps] | 🔴 | +| [Dice] | 🔴 | +| [Shake] | 🔴 | +| [Poke] | 🔴 | +| [Anonymous] | 🔴 | +| [Share] | 🔴 | +| [Contact] | 🔴 | +| [Location] | 🔴 | +| [Music] | 🔴 | +| [Reply] | 🔴 | +| [Forward] | 🔴 | +| [Node] | 🔴 | +| [Xml] | 🔴 | +| [Json] | 🔴 | [Text]: https://github.com/botuniverse/onebot-11/blob/master/message/segment.md#qq-%E8%A1%A8%E6%83%85 [Record]: https://github.com/botuniverse/onebot-11/blob/master/message/segment.md#%E8%AF%AD%E9%9F%B3 @@ -99,46 +100,46 @@ Please use Lagrange.Core responsibly and in accordance with the law.
API -| API | Support | -| ------------------------ | -------- | -| [/send_private_msg] | 🔴 | -| [/send_group_msg] | 🔴 | -| [/send_msg] | 🟢 | -| [/delete_msg] | 🔴 | -| [/get_msg] | 🔴 | -| [/get_forward_msg] | 🔴 | -| ~~[/send_like]~~ | 🔴 | -| [/set_group_kick] | 🟢 | -| [/set_group_ban] | 🟢 | -| [/set_group_anonymous_ban] | 🔴 | -| [/set_group_whole_ban] | 🟢 | -| [/set_group_admin] | 🟢 | -| [/set_group_anonymous] | 🔴 | -| [/set_group_card] | 🟢 | -| [/set_group_name] | 🟢 | -| [/set_group_leave] | 🟢 | -| [/set_group_special_title] | 🔴 | -| [/set_friend_add_request] | 🔴 | -| [/set_group_add_request] | 🔴 | -| [/get_login_info] | 🟢 | -| [/get_stranger_info] | 🔴 | -| [/get_friend_list] | 🔴 | -| [/get_group_info] | 🟢 | -| [/get_group_list] | 🟢 | -| [/get_group_member_info] | 🔴 | -| [/get_group_member_list] | 🔴 | -| [/get_group_honor_info] | 🔴 | -| [/get_cookies] | 🔴 | -| [/get_csrf_token] | 🔴 | -| [/get_credentials] | 🔴 | -| [/get_record] | 🔴 | -| [/get_image] | 🔴 | -| [/can_send_image] | 🔴 | -| [/can_send_record] | 🔴 | -| [/get_status] | 🔴 | -| [/get_version_info] | 🟢 | -| [/set_restart] | 🔴 | -| [/clean_cache] | 🔴 | +| API | Support | +| -------------------------- | :-----: | +| [/send_private_msg] | 🔴 | +| [/send_group_msg] | 🔴 | +| [/send_msg] | 🟢 | +| [/delete_msg] | 🔴 | +| [/get_msg] | 🔴 | +| [/get_forward_msg] | 🔴 | +| ~~[/send_like]~~ | 🔴 | +| [/set_group_kick] | 🟢 | +| [/set_group_ban] | 🟢 | +| [/set_group_anonymous_ban] | 🔴 | +| [/set_group_whole_ban] | 🟢 | +| [/set_group_admin] | 🟢 | +| [/set_group_anonymous] | 🔴 | +| [/set_group_card] | 🟢 | +| [/set_group_name] | 🟢 | +| [/set_group_leave] | 🟢 | +| [/set_group_special_title] | 🔴 | +| [/set_friend_add_request] | 🔴 | +| [/set_group_add_request] | 🔴 | +| [/get_login_info] | 🟢 | +| [/get_stranger_info] | 🔴 | +| [/get_friend_list] | 🔴 | +| [/get_group_info] | 🟢 | +| [/get_group_list] | 🟢 | +| [/get_group_member_info] | 🔴 | +| [/get_group_member_list] | 🔴 | +| [/get_group_honor_info] | 🔴 | +| [/get_cookies] | 🔴 | +| [/get_csrf_token] | 🔴 | +| [/get_credentials] | 🔴 | +| [/get_record] | 🔴 | +| [/get_image] | 🔴 | +| [/can_send_image] | 🔴 | +| [/can_send_record] | 🔴 | +| [/get_status] | 🔴 | +| [/get_version_info] | 🟢 | +| [/set_restart] | 🔴 | +| [/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 @@ -184,25 +185,25 @@ Please use Lagrange.Core responsibly and in accordance with the law.
Event -| PostType| EventName | Support | -| --------| -----------------------------|----------| -| Message | [Private Message] | 🔴 | -| Message | [Group Message] | 🟢 | -| Notice | [Group File Upload] | 🔴 | -| Notice | [Group Admin Change] | 🔴 | -| Notice | [Group Member Decrease] | 🔴 | -| Notice | [Group Member Increase] | 🔴 | -| Notice | [Group Mute] | 🔴 | -| Notice | [Friend Add] | 🔴 | -| Notice | [Group Recall Message] | 🔴 | -| Notice | [Friend Recall Message] | 🔴 | -| Notice | [Group Poke] | 🔴 | -| Notice | [Group red envelope luck king]| 🔴 | -| Notice | [Group Member Honor Changed] | 🔴 | -| Request| [Add Friend Request] | 🔴 | -| Request| [Group Request/Invitations] | 🔴 | -| Meta | [LifeCycle] | 🟢 | -| Meta | [Heartbeat] | 🟢 | +| PostType | EventName | Support | +| -------- | ------------------------------ | :-----: | +| Message | [Private Message] | 🔴 | +| Message | [Group Message] | 🟢 | +| Notice | [Group File Upload] | 🔴 | +| Notice | [Group Admin Change] | 🔴 | +| Notice | [Group Member Decrease] | 🔴 | +| Notice | [Group Member Increase] | 🔴 | +| Notice | [Group Mute] | 🔴 | +| Notice | [Friend Add] | 🔴 | +| Notice | [Group Recall Message] | 🔴 | +| Notice | [Friend Recall Message] | 🔴 | +| Notice | [Group Poke] | 🔴 | +| Notice | [Group red envelope luck king] | 🔴 | +| Notice | [Group Member Honor Changed] | 🔴 | +| Request | [Add Friend Request] | 🔴 | +| Request | [Group Request/Invitations] | 🔴 | +| Meta | [LifeCycle] | 🟢 | +| Meta | [Heartbeat] | 🟢 | [Private Message]: https://github.com/botuniverse/onebot-11/blob/master/event/message.md#%E7%A7%81%E8%81%8A%E6%B6%88%E6%81%AF [Group Message]: https://github.com/botuniverse/onebot-11/blob/master/event/message.md#%E7%BE%A4%E6%B6%88%E6%81%AF @@ -224,8 +225,26 @@ Please use Lagrange.Core responsibly and in accordance with the law.
+
+Communication + +| CommunicationType | Support | +| ------------------ | :-----: | +| [Http] | 🔴 | +| [Http-Post] | 🟢 | +| [ForwardWebSocket] | 🟢 | +| [ReverseWebSocket] | 🟢 | + +[Http]: https://github.com/botuniverse/onebot-11/blob/master/communication/http.md +[Http-Post]: https://github.com/botuniverse/onebot-11/blob/master/communication/http-post.md +[ForwardWebSocket]: https://github.com/botuniverse/onebot-11/blob/master/communication/ws.md +[ReverseWebSocket]: https://github.com/botuniverse/onebot-11/blob/master/communication/ws-reverse.md + +
+ #### appsettings.json Example -```C# + +```json { "Logging": { "LogLevel": { @@ -244,15 +263,14 @@ Please use Lagrange.Core responsibly and in accordance with the law. }, "Implementation": { "ForwardWebSocket": { - "Host": "", - "Port": 0, - "HeartBeatIntetval": 0 + "Port": 8081, + "HeartBeatIntetval": 5000 }, "ReverseWebSocket": { "Host": "127.0.0.1", "Port": 8080, "Suffix": "/onebot/v11/ws", - "ReconnectInterval": 0, + "ReconnectInterval": 5000, "HeartBeatInterval": 5000 }, "Http": { @@ -269,11 +287,13 @@ Please use Lagrange.Core responsibly and in accordance with the law. } } ``` -- Create a file named 'appsettings.json' under Lagrange.OneBot executable directory + +- Create a file named 'appsettings.json' under Lagrange.OneBot executable directory - As the Uin is 0 here, this indicates that QRCode login is used - After the QRCode Login, write Uin back to perform EasyLogin ## Known Problem + ~~- [ ] Signature Service is currently not established, so the login tend to be failed and return code may be 45, you can establish your own sign service by rewriting the `Signature` static class.~~ Thanks KonataDev/TheSnowfield for Provision of Signature API From a4fa6fbf34d188384b725383941b99eb54640815 Mon Sep 17 00:00:00 2001 From: Linwenxuan <116782992+Linwenxuan05@users.noreply.github.com> Date: Tue, 17 Oct 2023 12:29:10 +0800 Subject: [PATCH 5/6] [Core] Expose Bot metadata to BotContext --- Lagrange.Core/BotContext.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Lagrange.Core/BotContext.cs b/Lagrange.Core/BotContext.cs index ea6b42b..a7022bf 100644 --- a/Lagrange.Core/BotContext.cs +++ b/Lagrange.Core/BotContext.cs @@ -8,6 +8,10 @@ public class BotContext : IDisposable { public readonly EventInvoker Invoker; + public uint BotUin => ContextCollection.Keystore.Uin; + + public string? BotName => ContextCollection.Keystore.Info?.Name; + internal readonly Utility.TaskScheduler Scheduler; internal readonly ContextCollection ContextCollection; From 188e65ccc19e75a099382a865ecaeb8d930d3f2d Mon Sep 17 00:00:00 2001 From: Linwenxuan <116782992+Linwenxuan05@users.noreply.github.com> Date: Tue, 17 Oct 2023 12:31:27 +0800 Subject: [PATCH 6/6] [OneBot] log the information received and sent --- Lagrange.OneBot/Core/Network/ReverseWSService.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Lagrange.OneBot/Core/Network/ReverseWSService.cs b/Lagrange.OneBot/Core/Network/ReverseWSService.cs index 46e526c..eca4121 100644 --- a/Lagrange.OneBot/Core/Network/ReverseWSService.cs +++ b/Lagrange.OneBot/Core/Network/ReverseWSService.cs @@ -10,6 +10,8 @@ namespace Lagrange.OneBot.Core.Network; public sealed class ReverseWSService : ILagrangeWebService { + private const string Tag = nameof(ReverseWSService); + public event EventHandler OnMessageReceived = delegate { }; private readonly WebsocketClient _socket; @@ -45,7 +47,11 @@ public sealed class ReverseWSService : ILagrangeWebService }); _timer = new Timer(OnHeartbeat, null, int.MaxValue, config.GetValue("Implementation:ReverseWebSocket:HeartBeatInterval")); - _socket.MessageReceived.Subscribe(resp => OnMessageReceived.Invoke(this, new(resp.Text ?? ""))); + _socket.MessageReceived.Subscribe(resp => + { + _logger.LogTrace($"[{Tag}] Receive: {resp.Text}"); + OnMessageReceived.Invoke(this, new MsgRecvEventArgs(resp.Text ?? "")); + }); } public async Task StartAsync(CancellationToken cancellationToken) @@ -66,7 +72,9 @@ public sealed class ReverseWSService : ILagrangeWebService public Task SendJsonAsync(T json, CancellationToken cancellationToken = default) { - var payload = JsonSerializer.SerializeToUtf8Bytes(json); + string payload = JsonSerializer.Serialize(json); + + _logger.LogTrace($"[{Tag}] Send: {payload}"); return _socket.SendInstant(payload); }