Files
telegram-bot/modules/CodeWatcher/Handler.cs
T

75 lines
2.3 KiB
C#
Raw Normal View History

using System.Collections.Concurrent;
using BotFramework;
2022-04-20 00:38:47 +03:00
using BotFramework.Attributes;
using BotFramework.Enums;
using Kruzya.TelegramBot.Core.Extensions;
using Telegram.Bot;
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums;
namespace West.TelegramBot.CodeWatcher;
public class Handler : BotEventHandler
{
private readonly ConcurrentBag<DeleteRequest> _requests;
public Handler(ConcurrentBag<DeleteRequest> requests)
{
_requests = requests;
}
[Update(InChat.Public, UpdateFlag.Message | UpdateFlag.EditedMessage)]
2022-04-20 00:38:47 +03:00
public async Task HandleMessage()
{
var message = RawUpdate.Message ?? RawUpdate.EditedMessage;
2022-04-20 00:38:47 +03:00
if (message?.Entities == null)
2022-04-20 00:38:47 +03:00
{
return;
}
if (!await Bot.CanDeleteMessagesAsync(Chat))
{
return;
}
foreach (var entity in message.Entities)
{
if (entity.Type is MessageEntityType.Code or MessageEntityType.Pre)
{
var entityLines = message.Text!
.Substring(entity.Offset, entity.Length)
.SplitToLines()
.ToList();
if (entityLines.Count < 2)
{
continue;
}
2022-06-14 11:23:02 +03:00
if (entityLines.Count >= 20 || entityLines.Any(line => line.Length > 160))
2022-04-20 00:38:47 +03:00
{
await DeleteAndNotifyAsync(message);
return;
}
}
}
}
public async Task DeleteAndNotifyAsync(Message message)
{
await Bot.DeleteMessageAsync(Chat.Id, message.MessageId);
var notifyMsg = await Bot.SendTextMessageAsync(Chat.Id,
(message.From?.ToHtml() ?? "") + ", не стоит публиковать столь большой код прямо в чат. " +
"Вместо этого загрузите его на https://pastebin.com и отправьте в виде ссылки.",
2022-04-20 00:38:47 +03:00
ParseMode.Html);
// TODO: maybe write a wrapper-service around collection to avoid direct interactions with the collection, West, 07.07.2022, 16:53
_requests.Add(new DeleteRequest
{
ChatId = notifyMsg.Chat.Id,
MessageId = notifyMsg.MessageId,
DeleteAt = DateTime.Now.AddSeconds(30)
});
2022-04-20 00:38:47 +03:00
}
}