#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; namespace West.TelegramBot.ChatManagement.Handler; public class Warn : CommonHandler { public Warn(CoreContext db) : base(db) {} [Command("warn", CommandParseMode.Both)] public async Task HandleWarn() { if (!await CanPunish()) return; var warnUser = RepliedUser!; var warnOption = await GetWarnOption(warnUser); var warnCount = warnOption.GetValue() + 1; await Bot.SendTextMessageAsync(Chat.Id, $"{warnUser.ToHtml()}, Вам выдано предупреждение! " + $"Текущее кол-во: {warnCount}/3", 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()} заблокировал {RepliedUser!.ToHtml()} на 7 дней", disableNotification: true, parseMode: ParseMode.Html); } warnOption.SetValue(warnCount); Db.AddOrUpdate(warnOption); } [Command("unwarn", CommandParseMode.Both)] public async Task HandleUnwarn() { if (!await CanPunish()) return; var warnOption = await GetWarnOption(RepliedUser!); var warnCount = warnOption.GetValue(); if (warnCount == 0) return; warnCount = Math.Max(warnCount - 1, 0); warnOption.SetValue(warnCount); Db.AddOrUpdate(warnOption); await Bot.SendTextMessageAsync(Chat.Id, $"{RepliedUser.ToHtml()}, с Вас снято предупреждение! " + $"Текущее кол-во: {warnCount}/3", disableNotification: true, parseMode: ParseMode.Html); } }