#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; using Telegram.Bot.Types.Enums; using West.TelegramBot.ChatManagement.ParamParser; namespace West.TelegramBot.ChatManagement.Handler; public class Ban : CommonHandler { public Ban(CoreContext db) : base(db) {} [ParametrizedCommand("ban", CommandParseMode.Both)] public async Task HandleBan(BanLength.Param banLengthParam) { if (!await CanPunish()) { return; } var now = DateTime.Now; var banEnd = now.AddDays(banLengthParam.DayCount); var banEndMsg = (banEnd - now).Days > 366 ? "навсегда" : $"до {banEnd.ToUniversalTime()}"; await Bot.SendTextMessageAsync( Chat.Id, $"{From.ToHtml()} заблокировал {RepliedUser!.ToHtml()} {banEndMsg}", disableNotification: true, parseMode: ParseMode.Html); await BanMember(RepliedUser!.Id, banEnd); } [Command("unban", CommandParseMode.Both)] public async Task HandleUnban() { if (!await CanPunish()) { return; } await Bot.RestrictChatMemberAsync(Chat.Id, RepliedUser!.Id, new ChatPermissions { CanSendMessages = true, CanChangeInfo = true, CanInviteUsers = true, CanPinMessages = true, CanSendPolls = true, CanSendMediaMessages = true, CanSendOtherMessages = true, CanAddWebPagePreviews = true }); await Reply($"{From.ToHtml()} разблокировал {RepliedUser!.ToHtml()}"); } }