#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()}");
}
}