From 225cc22c6e29a37f3d641c00027904d9ffeec07c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=88=E7=BA=BE?= <100036558+Yuisyuu@users.noreply.github.com> Date: Sun, 21 Jul 2024 15:26:46 +0800 Subject: [PATCH] feat: Improve --- src/Bot/BotInstance.cs | 3 +- src/Bot/IBot.cs | 2 +- src/Bot/Lagrange/{QqBot.cs => QQBot.cs} | 39 +++++++++++++++++++++++++ src/Bot/Message/IMessage.cs | 10 +++---- src/Bot/Message/MediaMessage.cs | 6 ++-- src/Bot/MessageRecivedEventArgs.cs | 13 +++++++-- src/Bot/Telegram/TgBot.cs | 22 +++++++------- src/DXKumaBot.csproj | 8 ++--- src/Draw/Best50.cs | 2 +- src/Functions/LoveYou.cs | 31 ++++++++++++++++++++ src/Utils/AsyncEventHandler.cs | 3 ++ src/Utils/Draw.cs | 2 +- 12 files changed, 113 insertions(+), 28 deletions(-) rename src/Bot/Lagrange/{QqBot.cs => QQBot.cs} (67%) create mode 100644 src/Functions/LoveYou.cs create mode 100644 src/Utils/AsyncEventHandler.cs diff --git a/src/Bot/BotInstance.cs b/src/Bot/BotInstance.cs index 15e0c68..9aa15cb 100644 --- a/src/Bot/BotInstance.cs +++ b/src/Bot/BotInstance.cs @@ -1,5 +1,6 @@ using DXKumaBot.Bot.Lagrange; using DXKumaBot.Bot.Telegram; +using DXKumaBot.Utils; namespace DXKumaBot.Bot; @@ -8,7 +9,7 @@ public sealed class BotInstance private readonly QQBot _qqBot = new(); private readonly TgBot _tgBot = new(); - public static event EventHandler MessageReceived; + public static event AsyncEventHandler MessageReceived; public async Task RunAsync() { diff --git a/src/Bot/IBot.cs b/src/Bot/IBot.cs index 5d963d3..969c775 100644 --- a/src/Bot/IBot.cs +++ b/src/Bot/IBot.cs @@ -3,6 +3,6 @@ namespace DXKumaBot.Bot; public interface IBot -{ +{ Task SendMessageAsync(MessageReceivedEventArgs messageToReply, MessagePair messages); } \ No newline at end of file diff --git a/src/Bot/Lagrange/QqBot.cs b/src/Bot/Lagrange/QQBot.cs similarity index 67% rename from src/Bot/Lagrange/QqBot.cs rename to src/Bot/Lagrange/QQBot.cs index 7b2b11d..47bb832 100644 --- a/src/Bot/Lagrange/QqBot.cs +++ b/src/Bot/Lagrange/QQBot.cs @@ -1,7 +1,9 @@ +using DXKumaBot.Bot.Message; using Lagrange.Core; using Lagrange.Core.Common; using Lagrange.Core.Common.Interface; using Lagrange.Core.Common.Interface.Api; +using Lagrange.Core.Message; using System.Text.Json; using System.Text.Json.Serialization; @@ -27,6 +29,11 @@ public QQBot() }, deviceInfo, _keyStore ?? new BotKeystore()); } + public async Task SendMessageAsync(MessageReceivedEventArgs messageToReply, MessagePair messages) + { + await SendMessageAsync(messageToReply.QqMessage!.Chain.GroupUin, messages); + } + public async Task RunAsync() { if (_keyStore is null) @@ -87,4 +94,36 @@ private static void SaveKeystore(BotKeystore keystore) ReferenceHandler = ReferenceHandler.Preserve }); } + + public async Task SendMessageAsync(uint? id, MessagePair messages) + { + if (id is null) + { + throw new ArgumentNullException(nameof(id)); + } + + MessageBuilder messageBuilder = MessageBuilder.Group((uint)id); + if (messages.Media is not null) + { + byte[] dataStream = messages.Media.Data.ToArray(); + switch (messages.Media.Type) + { + case MediaType.Audio: + messageBuilder.Record(dataStream); + break; + case MediaType.Photo: + messageBuilder.Image(dataStream); + break; + default: + throw new ArgumentOutOfRangeException(nameof(messages)); + } + } + + if (messages.Text is not null) + { + messageBuilder.Text(messages.Text.Text); + } + + await _bot.SendMessage(messageBuilder.Build()); + } } \ No newline at end of file diff --git a/src/Bot/Message/IMessage.cs b/src/Bot/Message/IMessage.cs index 25af088..f535abf 100644 --- a/src/Bot/Message/IMessage.cs +++ b/src/Bot/Message/IMessage.cs @@ -2,22 +2,22 @@ namespace DXKumaBot.Bot.Message; public class MessagePair { - public TextMessage? Text { get; } - public MediaMessage? Media { get; } - public MessagePair(TextMessage message) { Text = message; } - + public MessagePair(TextMessage message, MediaMessage media) { Text = message; Media = media; } - + public MessagePair(MediaMessage media) { Media = media; } + + public TextMessage? Text { get; } + public MediaMessage? Media { get; } } \ No newline at end of file diff --git a/src/Bot/Message/MediaMessage.cs b/src/Bot/Message/MediaMessage.cs index 275b846..1f4196d 100644 --- a/src/Bot/Message/MediaMessage.cs +++ b/src/Bot/Message/MediaMessage.cs @@ -1,8 +1,8 @@ namespace DXKumaBot.Bot.Message; -public class MediaMessage(MediaType type, Stream stream) +public class MediaMessage(MediaType type, MemoryStream stream) { public MediaType Type { get; } = type; - - public Stream Data { get; } = stream; + + public MemoryStream Data { get; } = stream; } \ No newline at end of file diff --git a/src/Bot/MessageRecivedEventArgs.cs b/src/Bot/MessageRecivedEventArgs.cs index c5601d7..4847673 100644 --- a/src/Bot/MessageRecivedEventArgs.cs +++ b/src/Bot/MessageRecivedEventArgs.cs @@ -1,3 +1,4 @@ +using DXKumaBot.Bot.Message; using Lagrange.Core.Event.EventArg; using TgMessage = Telegram.Bot.Types.Message; @@ -5,18 +6,26 @@ namespace DXKumaBot.Bot; public class MessageReceivedEventArgs : EventArgs { + private readonly IBot _bot; + public MessageReceivedEventArgs(IBot bot, GroupMessageEvent message) { _bot = bot; QqMessage = message; } + public MessageReceivedEventArgs(IBot bot, TgMessage message) { _bot = bot; TgMessage = message; } - - private readonly IBot _bot; + public GroupMessageEvent? QqMessage { get; } public TgMessage? TgMessage { get; } + public string Text => QqMessage?.EventMessage ?? TgMessage?.Text ?? throw new NullReferenceException(); + + public async Task Reply(MessagePair messages) + { + await _bot.SendMessageAsync(this, messages); + } } \ No newline at end of file diff --git a/src/Bot/Telegram/TgBot.cs b/src/Bot/Telegram/TgBot.cs index 12615e7..ea2602b 100644 --- a/src/Bot/Telegram/TgBot.cs +++ b/src/Bot/Telegram/TgBot.cs @@ -8,10 +8,22 @@ namespace DXKumaBot.Bot.Telegram; public class TgBot : IBot { private readonly TelegramBotClient _bot; + public TgBot() { // _bot = new TelegramBotClient(); } + + public async Task SendMessageAsync(MessageReceivedEventArgs messageToReply, MessagePair messages) + { + if (messageToReply.TgMessage is null) + { + throw new ArgumentNullException(nameof(messageToReply)); + } + + await SendMessageAsync(messageToReply.TgMessage.MessageId, messages); + } + public async Task RunAsync() { throw new NotImplementedException(); @@ -38,14 +50,4 @@ public async Task SendMessageAsync(long id, MessagePair messages, int? threadId throw new ArgumentOutOfRangeException(nameof(messages)); } } - - public async Task SendMessageAsync(MessageReceivedEventArgs messageToReply, MessagePair messages) - { - if (messageToReply.TgMessage is null) - { - throw new ArgumentNullException(nameof(messageToReply)); - } - - await SendMessageAsync(messageToReply.TgMessage.MessageId, messages); - } } \ No newline at end of file diff --git a/src/DXKumaBot.csproj b/src/DXKumaBot.csproj index 01c812b..d2b49e4 100644 --- a/src/DXKumaBot.csproj +++ b/src/DXKumaBot.csproj @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/src/Draw/Best50.cs b/src/Draw/Best50.cs index c1a2069..027a016 100644 --- a/src/Draw/Best50.cs +++ b/src/Draw/Best50.cs @@ -36,7 +36,7 @@ private static async Task DrawAsync(CommonB50 b50, CommonUserInfo pos.X = 0; ++pos.Y; } - + MemoryStream stream = new(); await image.SaveAsJpegAsync(stream); return stream; diff --git a/src/Functions/LoveYou.cs b/src/Functions/LoveYou.cs new file mode 100644 index 0000000..7e26496 --- /dev/null +++ b/src/Functions/LoveYou.cs @@ -0,0 +1,31 @@ +using DXKumaBot.Bot; +using DXKumaBot.Bot.Message; +using System.Text.RegularExpressions; + +namespace DXKumaBot.Functions; + +public static partial class LoveYou +{ + public static void Register() + { + BotInstance.MessageReceived += Main; + } + + private static async Task Main(object? sender, MessageReceivedEventArgs args) + { + if (MessageRegex().IsMatch(args.Text)) + { + return; + } + + TextMessage textMessage = new() + { + Text = "迪拉熊也喜欢你❤️" + }; + MessagePair messages = new(textMessage); + await args.Reply(messages); + } + + [GeneratedRegex("^(迪拉熊|dlx)我喜欢你$", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline)] + private static partial Regex MessageRegex(); +} \ No newline at end of file diff --git a/src/Utils/AsyncEventHandler.cs b/src/Utils/AsyncEventHandler.cs new file mode 100644 index 0000000..edaeae5 --- /dev/null +++ b/src/Utils/AsyncEventHandler.cs @@ -0,0 +1,3 @@ +namespace DXKumaBot.Utils; + +public delegate Task AsyncEventHandler(object sender, TEventArgs e) where TEventArgs : EventArgs; \ No newline at end of file diff --git a/src/Utils/Draw.cs b/src/Utils/Draw.cs index 1ac8263..b4c32c2 100644 --- a/src/Utils/Draw.cs +++ b/src/Utils/Draw.cs @@ -14,7 +14,7 @@ public static void Resize(this Image image, double ratio) { image.Mutate(x => x.Resize(Convert.ToInt32(image.Width * ratio), Convert.ToInt32(image.Height * ratio))); } - + public static void Resize(this Image image, int width, int height) { image.Mutate(x => x.Resize(width, height));