Skip to content

Commit

Permalink
feat: Improve
Browse files Browse the repository at this point in the history
  • Loading branch information
Yushu2606 committed Jul 21, 2024
1 parent 3f92709 commit 225cc22
Show file tree
Hide file tree
Showing 12 changed files with 113 additions and 28 deletions.
3 changes: 2 additions & 1 deletion src/Bot/BotInstance.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using DXKumaBot.Bot.Lagrange;
using DXKumaBot.Bot.Telegram;
using DXKumaBot.Utils;

namespace DXKumaBot.Bot;

Expand All @@ -8,7 +9,7 @@ public sealed class BotInstance
private readonly QQBot _qqBot = new();
private readonly TgBot _tgBot = new();

public static event EventHandler<MessageReceivedEventArgs> MessageReceived;
public static event AsyncEventHandler<MessageReceivedEventArgs> MessageReceived;

public async Task RunAsync()
{
Expand Down
2 changes: 1 addition & 1 deletion src/Bot/IBot.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@
namespace DXKumaBot.Bot;

public interface IBot
{
{
Task SendMessageAsync(MessageReceivedEventArgs messageToReply, MessagePair messages);
}
39 changes: 39 additions & 0 deletions src/Bot/Lagrange/QqBot.cs → src/Bot/Lagrange/QQBot.cs
Original file line number Diff line number Diff line change
@@ -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;

Expand All @@ -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)
Expand Down Expand Up @@ -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());
}
}
10 changes: 5 additions & 5 deletions src/Bot/Message/IMessage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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; }
}
6 changes: 3 additions & 3 deletions src/Bot/Message/MediaMessage.cs
Original file line number Diff line number Diff line change
@@ -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;
}
13 changes: 11 additions & 2 deletions src/Bot/MessageRecivedEventArgs.cs
Original file line number Diff line number Diff line change
@@ -1,22 +1,31 @@
using DXKumaBot.Bot.Message;
using Lagrange.Core.Event.EventArg;
using TgMessage = Telegram.Bot.Types.Message;

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);
}
}
22 changes: 12 additions & 10 deletions src/Bot/Telegram/TgBot.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -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);
}
}
8 changes: 4 additions & 4 deletions src/DXKumaBot.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Lagrange.Core" Version="0.2.2" />
<PackageReference Include="LiteDB" Version="5.0.21" />
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="2.1.3" />
<PackageReference Include="Telegram.Bot" Version="21.7.0" />
<PackageReference Include="Lagrange.Core" Version="0.2.2"/>
<PackageReference Include="LiteDB" Version="5.0.21"/>
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="2.1.3"/>
<PackageReference Include="Telegram.Bot" Version="21.7.0"/>
</ItemGroup>

</Project>
2 changes: 1 addition & 1 deletion src/Draw/Best50.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ private static async Task<MemoryStream> DrawAsync(CommonB50 b50, CommonUserInfo
pos.X = 0;
++pos.Y;
}

MemoryStream stream = new();
await image.SaveAsJpegAsync(stream);
return stream;
Expand Down
31 changes: 31 additions & 0 deletions src/Functions/LoveYou.cs
Original file line number Diff line number Diff line change
@@ -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();
}
3 changes: 3 additions & 0 deletions src/Utils/AsyncEventHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
namespace DXKumaBot.Utils;

public delegate Task AsyncEventHandler<TEventArgs>(object sender, TEventArgs e) where TEventArgs : EventArgs;
2 changes: 1 addition & 1 deletion src/Utils/Draw.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand Down

0 comments on commit 225cc22

Please sign in to comment.