Skip to content

Commit

Permalink
feat: add repeater and poke function impl
Browse files Browse the repository at this point in the history
  • Loading branch information
Yuisyuu committed Jul 22, 2024
1 parent 75b5a7e commit 2f33cf4
Show file tree
Hide file tree
Showing 43 changed files with 254 additions and 306 deletions.
9 changes: 7 additions & 2 deletions src/Bot/BotInstance.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using DXKumaBot.Bot.Lagrange;
using DXKumaBot.Bot.Telegram;
using DXKumaBot.Bot.EventArg;
using DXKumaBot.Functions;
using DXKumaBot.Utils;

Expand All @@ -11,6 +10,7 @@ public sealed class BotInstance(Config config)
private readonly TgBot _tgBot = new(config.Telegram);

public static event AsyncEventHandler<MessageReceivedEventArgs>? MessageReceived;
public static event AsyncEventHandler<PokedEventArgs>? Poked;

private static void RegisterFunctions()
{
Expand All @@ -19,17 +19,22 @@ private static void RegisterFunctions()
Cum cum = new();
Roll roll = new();
EatBreak eatBreak = new();
Repeater repeater = new();
Poke poke = new();

loveYou.Register();
wannaCao.Register();
cum.Register();
roll.Register();
eatBreak.Register();
repeater.Register();
poke.Register();
}

private void RegisterEvents()
{
_qqBot.MessageReceived += MessageReceived;
_qqBot.Poked += Poked;
_tgBot.MessageReceived += MessageReceived;
}

Expand Down
8 changes: 8 additions & 0 deletions src/Bot/EventArg/BotEventArgsBase.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
using DXKumaBot.Bot.Message;

namespace DXKumaBot.Bot.EventArg;

public abstract class BotEventArgsBase : EventArgs
{
public abstract BotMessage Message { get; }
}
20 changes: 20 additions & 0 deletions src/Bot/EventArg/MessageRecivedEventArgs.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using DXKumaBot.Bot.Message;
using Lagrange.Core.Event.EventArg;
using TgMessage = Telegram.Bot.Types.Message;

namespace DXKumaBot.Bot.EventArg;

public sealed class MessageReceivedEventArgs : BotEventArgsBase
{
public MessageReceivedEventArgs(IBot bot, GroupMessageEvent message)
{
Message = new(bot, message.Chain);
}

public MessageReceivedEventArgs(IBot bot, TgMessage message)
{
Message = new(bot, message);
}

public override BotMessage Message { get; }
}
9 changes: 9 additions & 0 deletions src/Bot/EventArg/PokedEventArgs.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using DXKumaBot.Bot.Message;
using Lagrange.Core.Event.EventArg;

namespace DXKumaBot.Bot.EventArg;

public sealed class PokedEventArgs(QqBot bot, GroupPokeEvent message) : BotEventArgsBase
{
public override BotMessage Message { get; } = new(bot, message.GroupUin);
}
5 changes: 1 addition & 4 deletions src/Bot/IBot.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
using DXKumaBot.Bot.Message;
using DXKumaBot.Utils;
using Lagrange.Core.Event.EventArg;
using TgMessage = Telegram.Bot.Types.Message;

namespace DXKumaBot.Bot;

public interface IBot
{
Task SendMessageAsync(MessageReceivedEventArgs messageToReply, MessagePair messages,
Possible<GroupMessageEvent, TgMessage>? source);
Task SendMessageAsync(MessagePair messages, BotMessage source, bool noReply);
}
93 changes: 0 additions & 93 deletions src/Bot/Lagrange/CustomSignProvider.cs

This file was deleted.

54 changes: 54 additions & 0 deletions src/Bot/Message/BotMessage.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
using Lagrange.Core.Message;
using TgMessage = Telegram.Bot.Types.Message;

namespace DXKumaBot.Bot.Message;

public sealed class BotMessage
{
private readonly IBot _bot;
private readonly uint? _groupId;

public BotMessage(IBot bot, MessageChain message)
{
_bot = bot;
QqMessage = message;
SourceType = MessageSource.Qq;
}

public BotMessage(IBot bot, uint groupId)
{
_bot = bot;
_groupId = groupId;
SourceType = MessageSource.Qq;
}

public BotMessage(IBot bot, TgMessage message)
{
_bot = bot;
TgMessage = message;
SourceType = MessageSource.Telegram;
}

public MessageChain? QqMessage { get; }
public TgMessage? TgMessage { get; }
public MessageSource SourceType { get; }

public string Text => SourceType switch
{
MessageSource.Qq => QqMessage?.ToPreviewText(),
MessageSource.Telegram => TgMessage?.Text,
_ => throw new ArgumentOutOfRangeException(nameof(SourceType), SourceType, null)
} ?? throw new NullReferenceException();

public long ChatId => _groupId ?? SourceType switch
{
MessageSource.Qq => QqMessage?.GroupUin,
MessageSource.Telegram => TgMessage?.Chat.Id,
_ => throw new ArgumentOutOfRangeException(nameof(SourceType), SourceType, null)
} ?? throw new NullReferenceException();

public async Task Reply(MessagePair messages, bool noReply = false)
{
await _bot.SendMessageAsync(messages, this, noReply);
}
}
2 changes: 1 addition & 1 deletion src/Bot/Message/MediaMessage.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace DXKumaBot.Bot.Message;

public class MediaMessage(MediaType type, string path)
public sealed class MediaMessage(MediaType type, string path)
{
public MediaType Type { get; } = type;

Expand Down
2 changes: 1 addition & 1 deletion src/Bot/Message/MessagePair.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace DXKumaBot.Bot.Message;

public class MessagePair
public sealed class MessagePair
{
public MessagePair(TextMessage message)
{
Expand Down
7 changes: 7 additions & 0 deletions src/Bot/Message/MessageSource.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace DXKumaBot.Bot.Message;

public enum MessageSource
{
Qq,
Telegram
}
2 changes: 1 addition & 1 deletion src/Bot/Message/TextMessage.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace DXKumaBot.Bot.Message;

public class TextMessage
public sealed class TextMessage
{
public required string Text { get; set; }

Expand Down
32 changes: 0 additions & 32 deletions src/Bot/MessageRecivedEventArgs.cs

This file was deleted.

34 changes: 18 additions & 16 deletions src/Bot/Lagrange/QQBot.cs → src/Bot/QQBot.cs
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
using DXKumaBot.Bot.EventArg;
using DXKumaBot.Bot.Message;
using DXKumaBot.Utils;
using Lagrange.Core;
using Lagrange.Core.Common;
using Lagrange.Core.Common.Interface;
using Lagrange.Core.Common.Interface.Api;
using Lagrange.Core.Event.EventArg;
using Lagrange.Core.Message;
using System.Text.Json;
using System.Text.Json.Serialization;
using TgMessage = Telegram.Bot.Types.Message;

namespace DXKumaBot.Bot.Lagrange;
namespace DXKumaBot.Bot;

public class QqBot : IBot
public sealed class QqBot : IBot
{
private readonly BotContext _bot;
private readonly BotKeystore? _keyStore;
Expand All @@ -21,25 +20,19 @@ public QqBot()
{
BotDeviceInfo deviceInfo = GetDeviceInfo();
_keyStore = LoadKeystore();
_bot = BotFactory.Create(new()
{
UseIPv6Network = false,
GetOptimumServer = true,
AutoReconnect = true,
Protocol = Protocols.Linux,
CustomSignProvider = new CustomSignProvider()
}, deviceInfo, _keyStore ?? new BotKeystore());
_bot = BotFactory.Create(new(), deviceInfo, _keyStore ?? new BotKeystore());
}

public async Task SendMessageAsync(MessageReceivedEventArgs messageToReply, MessagePair messages,
Possible<GroupMessageEvent, TgMessage>? source = null)
public async Task SendMessageAsync(MessagePair messages, BotMessage source, bool noReply)
{
await SendMessageAsync(messageToReply.QqMessage!.Chain.GroupUin, messages.Text!, messages.Media,
source is null ? default : ((GroupMessageEvent?)source)?.Chain);
await SendMessageAsync(Convert.ToUInt32(source.ChatId), messages.Text!, messages.Media,
noReply ? default : source.QqMessage);
}

public event AsyncEventHandler<MessageReceivedEventArgs>? MessageReceived;

public event AsyncEventHandler<PokedEventArgs>? Poked;

private void RegisterEvents()
{
#if DEBUG
Expand All @@ -57,6 +50,15 @@ private void RegisterEvents()
await MessageReceived.Invoke(sender, new(this, args));
};
_bot.Invoker.OnGroupPokeEvent += async (sender, args) =>
{
if (Poked is null)
{
return;
}
await Poked.Invoke(sender, new(this, args));
};
}

public async Task RunAsync()
Expand Down
Loading

0 comments on commit 2f33cf4

Please sign in to comment.