Files
telegram-bot/modules/ChatManagement/Handler/Ban.cs
T

72 lines
2.0 KiB
C#
Raw Normal View History

2021-12-27 22:53:13 +02:00
#nullable enable
using System;
2021-12-27 22:53:13 +02:00
using System.Threading.Tasks;
using BotFramework.Attributes;
using BotFramework.Enums;
2021-12-27 22:53:13 +02:00
using Kruzya.TelegramBot.Core.Data;
using Kruzya.TelegramBot.Core.Extensions;
2023-07-20 21:22:35 +03:00
using Kruzya.TelegramBot.Core.Handler;
using Telegram.Bot;
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums;
using West.TelegramBot.ChatManagement.ParamParser;
2022-02-14 10:35:28 +02:00
namespace West.TelegramBot.ChatManagement.Handler;
public class Ban : CommonHandler
{
2022-02-14 10:35:28 +02:00
public Ban(CoreContext db) : base(db) {}
2021-12-27 22:53:13 +02:00
[ParametrizedCommand("ban", CommandParseMode.Both)]
public async Task HandleBan(BanLength.Param banLengthParam)
2022-02-14 10:35:28 +02:00
{
if (!await CanPunish())
{
return;
}
var now = DateTime.Now;
var banEnd = now.AddDays(banLengthParam.DayCount);
var banEndMsg = (banEnd - now).Days > 366 ? "навсегда" : $"до {banEnd:D}";
/*
TODO: cause this block of code is repeated in warn handler,
TODO: I think we should abstract it somehow
TODO: West, 25.04.2022, 20:10
*/
try
{
await BanMember(RepliedUser!.Id, banEnd);
}
catch
{
await Bot.SendMessage(Chat.Id, "Нет прав на блокировку пользователя.");
return;
}
await Bot.SendMessage(
Chat.Id,
$"{From.ToHtml()} <code>заблокировал</code> {RepliedUser!.ToHtml()} <code>{banEndMsg}</code>",
disableNotification: true, parseMode: ParseMode.Html);
2022-02-14 10:35:28 +02:00
}
2022-02-14 10:35:28 +02:00
[Command("unban", CommandParseMode.Both)]
public async Task HandleUnban()
{
if (!await CanPunish())
{
return;
}
2025-02-09 17:40:03 +02:00
await Bot.RestrictChatMember(Chat.Id, RepliedUser!.Id,
2022-02-14 10:35:28 +02:00
new ChatPermissions
{
CanSendMessages = true,
CanSendOtherMessages = true,
});
await Reply($"{From.ToHtml()} <code>разблокировал</code> {RepliedUser!.ToHtml()}");
}
}