[cm] warn decomposition

This commit is contained in:
West14
2022-05-05 13:26:17 +03:00
parent d90556d445
commit df43c45f02
4 changed files with 119 additions and 48 deletions
+8 -48
View File
@@ -1,56 +1,28 @@
#nullable enable
using System;
using System.Threading.Tasks;
using BotFramework.Attributes;
using BotFramework.Enums;
using Kruzya.TelegramBot.Core;
using Kruzya.TelegramBot.Core.Data;
using Kruzya.TelegramBot.Core.Extensions;
using Telegram.Bot;
using Telegram.Bot.Types.Enums;
using West.TelegramBot.ChatManagement.Service;
namespace West.TelegramBot.ChatManagement.Handler;
public class Warn : CommonHandler
{
public Warn(CoreContext db) : base(db) {}
private readonly WarnService _warnService;
public Warn(CoreContext db, WarnService warnService) : base(db)
{
_warnService = warnService;
}
[Command("warn", CommandParseMode.Both)]
public async Task HandleWarn()
{
if (!await CanPunish()) return;
var warnUser = RepliedUser!;
var warnOption = await GetWarnOption(warnUser);
var warnCount = warnOption.GetValue<int>() + 1;
await Bot.SendTextMessageAsync(Chat.Id, $"{warnUser.ToHtml()}<code>, Вам выдано предупреждение! " +
$"Текущее кол-во: {warnCount}/3</code>",
disableNotification: true,
parseMode: ParseMode.Html);
if (warnCount >= 3)
{
try
{
await BanMember(warnUser.Id, DateTime.Now.AddDays(7));
warnCount = 0;
}
catch
{
await Bot.SendTextMessageAsync(Chat.Id, "Нет прав на блокировку пользователя.");
return;
}
await Bot.SendTextMessageAsync(
Chat.Id,
$"{From.ToHtml()} <code>заблокировал</code> {RepliedUser!.ToHtml()} <code>на 7 дней</code>",
disableNotification: true, parseMode: ParseMode.Html);
}
warnOption.SetValue(warnCount);
Db.AddOrUpdate(warnOption);
await _warnService.WarnChatUserAsync(Chat, From, RepliedUser!);
}
[Command("unwarn", CommandParseMode.Both)]
@@ -58,18 +30,6 @@ public class Warn : CommonHandler
{
if (!await CanPunish()) return;
var warnOption = await GetWarnOption(RepliedUser!);
var warnCount = warnOption.GetValue<int>();
if (warnCount == 0) return;
warnCount = Math.Max(warnCount - 1, 0);
warnOption.SetValue(warnCount);
Db.AddOrUpdate(warnOption);
await Bot.SendTextMessageAsync(Chat.Id,
$"{RepliedUser.ToHtml()}<code>, с Вас снято предупреждение! " +
$"Текущее кол-во: {warnCount}/3</code>",
disableNotification: true,
parseMode: ParseMode.Html);
await _warnService.UnWarnChatUserAsync(Chat, From, RepliedUser!);
}
}