mirror of
https://github.com/Bubuni-Team/telegram-bot.git
synced 2026-07-31 00:29:24 +03:00
Move fun commands to separate module.
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
using Kruzya.TelegramBot.Core;
|
||||
using West.TelegramBot.ChatManagement;
|
||||
|
||||
namespace West.Entertainment
|
||||
{
|
||||
public class Entertainment : Module
|
||||
{
|
||||
public Entertainment(Core core) : base(core)
|
||||
{
|
||||
core.EnsureLoaded<ChatManagement>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net5.0</TargetFramework>
|
||||
<AssemblyName>TelegramBot.Entertainment</AssemblyName>
|
||||
<RootNamespace>West.Entertainment</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\Core\Core.csproj" />
|
||||
<ProjectReference Include="..\ChatManagement\ChatManagement.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="Handler" />
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
||||
<Delete Files="$(OutDir)\TelegramBot.dll" />
|
||||
<Delete Files="$(OutDir)\TelegramBot.ChatManagement.dll" />
|
||||
</Target>
|
||||
</Project>
|
||||
@@ -0,0 +1,55 @@
|
||||
#nullable enable
|
||||
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using BotFramework.Attributes;
|
||||
using BotFramework.Enums;
|
||||
using Castle.Core.Internal;
|
||||
using Kruzya.TelegramBot.Core.Data;
|
||||
using Kruzya.TelegramBot.Core.Extensions;
|
||||
using Telegram.Bot;
|
||||
using West.TelegramBot.ChatManagement.Handler;
|
||||
|
||||
namespace West.Entertainment.Handler.Fun
|
||||
{
|
||||
public abstract class AbstractAnimationReply : ManagementHandler
|
||||
{
|
||||
protected abstract Regex AnimationMatch
|
||||
{
|
||||
get;
|
||||
}
|
||||
|
||||
protected abstract string GetAnimationName();
|
||||
|
||||
protected virtual bool CanHandle() => true;
|
||||
|
||||
protected async Task HandleSetAnimation()
|
||||
{
|
||||
var animation = Message?.ReplyToMessage?.Animation;
|
||||
if (await CanPunish() || animation == null) return;
|
||||
|
||||
var animationFileOption = await GetAnimationFileOption();
|
||||
animationFileOption.SetValue(animation.FileId);
|
||||
Db.MarkAsModified(animationFileOption);
|
||||
}
|
||||
|
||||
[Message(InChat.Public, MessageFlag.HasText)]
|
||||
protected virtual async Task<bool> HandleAnimation(int? replyToMessageId = null)
|
||||
{
|
||||
var animationFileId = (await GetAnimationFileOption()).GetValue(string.Empty);
|
||||
if (animationFileId.IsNullOrEmpty() || !AnimationMatch.IsMatch(Message!.Text!) || !CanHandle()) return false;
|
||||
|
||||
|
||||
await Bot.SendAnimationAsync(Chat.Id, animationFileId,
|
||||
replyToMessageId: replyToMessageId ?? Message?.MessageId);
|
||||
return true;
|
||||
}
|
||||
|
||||
private async Task<BotUserValue> GetAnimationFileOption()
|
||||
{
|
||||
return await Db.UserValues.FindOrCreateOption(Chat.Id, $"{GetAnimationName()}File");
|
||||
}
|
||||
|
||||
protected AbstractAnimationReply(CoreContext db) : base(db) {}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
#nullable enable
|
||||
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using BotFramework.Attributes;
|
||||
using BotFramework.Enums;
|
||||
using Kruzya.TelegramBot.Core.Data;
|
||||
using Telegram.Bot;
|
||||
|
||||
namespace West.Entertainment.Handler.Fun
|
||||
{
|
||||
public class Bayan : AbstractAnimationReply
|
||||
{
|
||||
public Bayan(CoreContext db) : base(db) { }
|
||||
|
||||
protected override Regex AnimationMatch => new("^баян$", RegexOptions.IgnoreCase);
|
||||
|
||||
protected override string GetAnimationName() => "bayan";
|
||||
|
||||
|
||||
[Command(InChat.Public, "setbayan", CommandParseMode.Both)]
|
||||
public async Task HandleSetBayan() => await HandleSetAnimation();
|
||||
|
||||
protected override async Task<bool> HandleAnimation(int? replyToMessageId = null)
|
||||
{
|
||||
if (await base.HandleAnimation(replyToMessageId))
|
||||
{
|
||||
await Bot.DeleteMessageAsync(Chat.Id, Message!.MessageId);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override bool CanHandle() => Message?.ReplyToMessage != null;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
#nullable enable
|
||||
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using BotFramework.Attributes;
|
||||
using BotFramework.Enums;
|
||||
using Kruzya.TelegramBot.Core.Data;
|
||||
|
||||
namespace West.Entertainment.Handler.Fun
|
||||
{
|
||||
public class Python : AbstractAnimationReply
|
||||
{
|
||||
protected override Regex AnimationMatch =>
|
||||
new("питон|пайтон|python|путхон|питухон|петухон", RegexOptions.IgnoreCase);
|
||||
|
||||
protected override string GetAnimationName() => "python";
|
||||
|
||||
protected override bool CanHandle() => !Message!.Text!.Contains("/setpython");
|
||||
|
||||
[Command(InChat.Public, "setpython", CommandParseMode.Both)]
|
||||
public async Task HandleSetPython() => await HandleSetAnimation();
|
||||
|
||||
public Python(CoreContext db) : base(db) { }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user