Защита от спама Telegram.Bot
Пишу бота на C# (использую Long Polling) возникла задача защиты от спама сообщениями. Я пытаюсь решить это так:
Dictionary<long, GuardModel> UserBanCounter = new Dictionary<long, GuardModel>();
TimeSpan blockLimit = new TimeSpan(0,0,2);
public async Task HandleUpdateAsync(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken)
{
try
{
if (update.Type != UpdateType.Message)
{
return;
}
if (UserBanCounter.ContainsKey(update.Message.From.Id))
{
if (UserBanCounter[update.Message.From.Id].Amount > 10)
{
return;
}
if (UserBanCounter[update.Message.From.Id].Amount == 10)
{
await botClient.SendTextMessageAsync(new(AdminID), $"Пользователь {update.Message.From.Username} заблокирован за спам");
UserBanCounter[update.Message.From.Id].Amount++;
return;
}
if (update.Message.Date - UserBanCounter[update.Message.From.Id].LastMessageTime < blockLimit)
{
UserBanCounter[update.Message.From.Id].Amount++;
}
else
{
UserBanCounter[update.Message.From.Id].Amount = 0;
}
UserBanCounter[update.Message.From.Id].LastMessageTime = update.Message.Date;
}
else
{
UserBanCounter.Add(update.Message.From.Id, new GuardModel(update.Message.Date));
}
.
.
.
Дело в том, что я не нашёл нигде поднятия данного вопроса и возможных способов его решения, но прохождение несколькольких логических конструкций прежде чем сделать return кажется крайне ресурсоёмким процессом, если речи идёт о спаме наскольких сотен сообщений в секунду. Подскажите, есть ли знаете более элегантное решение. Заранее благодарю.
Источник: Stack Overflow на русском