#nullable enable using System; using System.Threading.Tasks; using BotFramework; using Kruzya.TelegramBot.Core.Data; using Kruzya.TelegramBot.Core.Extensions; using Telegram.Bot; using Telegram.Bot.Types; using Telegram.Bot.Types.Enums; namespace West.TelegramBot.ChatManagement.Handler { public abstract class ManagementHandler : BotEventHandler { protected readonly CoreContext Db; protected Message? Message => RawUpdate.Message; protected User? RepliedUser => Message?.ReplyToMessage?.From; protected ManagementHandler(CoreContext db) { Db = db; } protected async Task Reply(string text) { return await Bot.SendTextMessageAsync(Chat.Id, text, replyToMessageId: Message?.MessageId, parseMode: ParseMode.Html); } protected async Task CanPunish() { return RepliedUser != null && await Bot.CanPunishMember(Chat, From, RepliedUser); } #region Bans protected async Task BanMember(User user, DateTime? banEnd = null, bool sendMessage = true) { await BanMember(user.Id, banEnd); if (sendMessage) { await Bot.SendTextMessageAsync( Chat.Id, $"{From.ToHtml()} заблокировал {user.ToHtml()} на 7 дней", disableNotification: true, parseMode: ParseMode.Html); } } protected async Task BanMember(long userId, DateTime? banEnd = null) { await Bot.RestrictChatMemberAsync( Chat.Id, userId, new ChatPermissions { CanSendMessages = false }, banEnd ?? DateTime.Now.AddDays(7) ); } #endregion protected async Task GetWarnOption(User user) { return await Db.UserValues.FindOrCreateOption(Chat.Id, user.Id, "warnCount"); } } }