Files
telegram-bot/modules/CodeWatcher/Handler.cs
2022-06-14 11:23:02 +03:00

57 lines
1.8 KiB
C#

using BotFramework;
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
{
[Message(InChat.Public, MessageFlag.HasText)]
public async Task HandleMessage()
{
var message = RawUpdate.Message!;
if (message.Entities == null)
{
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 >= 20 || entityLines.Any(line => line.Length > 160))
{
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 и отправьте в виде ссылки.",
ParseMode.Html);
await Task.Delay(TimeSpan.FromMinutes(1));
await Bot.DeleteMessageAsync(Chat.Id, notifyMsg.MessageId);
}
}