mirror of
https://github.com/Bubuni-Team/telegram-bot.git
synced 2026-07-31 00:29:24 +03:00
[cm] ability to ban stickerset
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using BotFramework.Attributes;
|
||||
using BotFramework.Enums;
|
||||
using BotFramework.Utils;
|
||||
using Kruzya.TelegramBot.Core.Extensions;
|
||||
using Telegram.Bot;
|
||||
using West.TelegramBot.ChatManagement.ParamParser;
|
||||
|
||||
namespace West.TelegramBot.ChatManagement.Handler;
|
||||
|
||||
public partial class BanStickerSet
|
||||
{
|
||||
[ParametrizedCommand(InChat.Public, "stick_ban", CommandParseMode.Both)]
|
||||
public async Task HandleBanSticker(StickerSet.Param stickerSet)
|
||||
{
|
||||
if (!await PreCommand(stickerSet))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var option = await GetBannedStickerSetOption();
|
||||
var stickerSetList = option.GetValue(new List<string>());
|
||||
|
||||
var setName = stickerSet.Set.Name;
|
||||
if (stickerSetList.Contains(setName))
|
||||
{
|
||||
await Reply("Этот набор стикеров уже заблокирован.");
|
||||
return;
|
||||
}
|
||||
|
||||
stickerSetList.Add(setName);
|
||||
option.SetValue(stickerSetList);
|
||||
Db.AddOrUpdate(option);
|
||||
|
||||
var replyToMsgId = Message?.ReplyToMessage?.MessageId;
|
||||
if (replyToMsgId != null)
|
||||
{
|
||||
await Bot.DeleteMessageAsync(Chat.Id, (int) replyToMsgId);
|
||||
}
|
||||
|
||||
await Reply(FormatStickerSetAction(stickerSet.Set, "заблокирован"));
|
||||
}
|
||||
|
||||
[ParametrizedCommand(InChat.Public, "stick_unban", CommandParseMode.Both)]
|
||||
public async Task HandleUnBanSticker(StickerSet.Param stickerSet)
|
||||
{
|
||||
if (!await PreCommand(stickerSet))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var option = await GetBannedStickerSetOption();
|
||||
var list = option.GetValue<List<string>>();
|
||||
if (list == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var setName = stickerSet.Set.Name;
|
||||
|
||||
list.Remove(setName);
|
||||
option.SetValue(list);
|
||||
Db.AddOrUpdate(option);
|
||||
|
||||
await Reply(FormatStickerSetAction(stickerSet.Set, "разблокирован"));
|
||||
}
|
||||
|
||||
[Command(InChat.Public, "stick_banlist", CommandParseMode.Both)]
|
||||
public async Task HandleSBanList()
|
||||
{
|
||||
var option = await GetBannedStickerSetOption();
|
||||
var list = option.GetValue<List<string>>();
|
||||
if (list == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
string msg;
|
||||
if (list.Count > 0)
|
||||
{
|
||||
var htmlString = new HtmlString().Bold("Заблокированные наборы стикеров:").Br();
|
||||
for (var i = 0; i < list.Count; i++)
|
||||
{
|
||||
var stickerSet = await Bot.GetStickerSetAsync(list[i]);
|
||||
htmlString.Text($"{i + 1}. ")
|
||||
.Url("https://t.me/addstickers/" + stickerSet.Name, stickerSet.Title)
|
||||
.Br();
|
||||
}
|
||||
|
||||
msg = htmlString.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
msg = "Нет заблокированных наборов стикеров.";
|
||||
}
|
||||
|
||||
await Reply(msg);
|
||||
}
|
||||
|
||||
[Message(InChat.Public, MessageFlag.HasSticker)]
|
||||
public async Task HandleMessage()
|
||||
{
|
||||
if (!await CanBotDeleteMessages())
|
||||
{
|
||||
await Reply(
|
||||
"Этот набор стикеров заблокирован. Чтобы я мог его удалить, выдайте мне право на удаление сообщений.");
|
||||
}
|
||||
|
||||
var message = Message!;
|
||||
if (await IsStickerBanned(message.Sticker!))
|
||||
{
|
||||
await Bot.DeleteMessageAsync(Chat.Id, message.MessageId);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using BotFramework.Utils;
|
||||
using Kruzya.TelegramBot.Core.Data;
|
||||
using Kruzya.TelegramBot.Core.Extensions;
|
||||
using Telegram.Bot;
|
||||
using Telegram.Bot.Types;
|
||||
|
||||
namespace West.TelegramBot.ChatManagement.Handler;
|
||||
|
||||
public partial class BanStickerSet
|
||||
{
|
||||
private async Task<bool> CanBotDeleteMessages()
|
||||
{
|
||||
return await Bot.GetChatMemberAsync(
|
||||
Chat.Id,
|
||||
(await Bot.GetMeAsync()).Id
|
||||
) is ChatMemberAdministrator {CanDeleteMessages: true};
|
||||
}
|
||||
|
||||
private async Task<bool> IsStickerBanned(Sticker sticker)
|
||||
{
|
||||
var bannedList = (await GetBannedStickerSetOption()).GetValue<List<string>>();
|
||||
|
||||
return bannedList != null && sticker.SetName != null && bannedList.Contains(sticker.SetName);
|
||||
}
|
||||
|
||||
private async Task<BotUserValue> GetBannedStickerSetOption()
|
||||
{
|
||||
return await Db.UserValues.FindOrCreateOption(Chat.Id, "cmBannedStickers");
|
||||
}
|
||||
|
||||
public async Task<bool> PreCommand(ParamParser.StickerSet.Param stickerSetParam)
|
||||
{
|
||||
if (!stickerSetParam.IsValid)
|
||||
{
|
||||
await Reply("Неверный набор стикеров.");
|
||||
return false;
|
||||
}
|
||||
|
||||
return await CanUseCommands();
|
||||
}
|
||||
|
||||
public string FormatStickerSetAction(StickerSet stickerSet, string action)
|
||||
{
|
||||
return new HtmlString()
|
||||
.Text("Набор стикеров ")
|
||||
.Url($"https://t.me/addstickers/{stickerSet.Name}", stickerSet.Title)
|
||||
.Text($" {action}.")
|
||||
.ToString();
|
||||
}
|
||||
|
||||
private async Task<bool> CanUseCommands()
|
||||
{
|
||||
return await Bot.GetChatMemberAsync(Chat.Id, From.Id) is ChatMemberAdministrator {CanDeleteMessages: true}
|
||||
or ChatMemberOwner;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
using Kruzya.TelegramBot.Core;
|
||||
using Kruzya.TelegramBot.Core.Data;
|
||||
|
||||
namespace West.TelegramBot.ChatManagement.Handler;
|
||||
|
||||
public partial class BanStickerSet : CommonHandler
|
||||
{
|
||||
public BanStickerSet(CoreContext db) : base(db) { }
|
||||
}
|
||||
Reference in New Issue
Block a user