Как выдать пользователю мут на минуту, если он спамит боту в telegram?
Я сделал своего бота в telegram с довольно простыми функциями. Проблема в том, что буквально один человек может его положить простым спамом одной или несколькими командами, причем ошибку выдает именно TelegramAPI.
Вот ошибка:
ERROR - TeleBot: "A request to the Telegram API was unsuccessful. Error code: 429 Description: Too Many Requests: retry after 13"
Я бы хотел, чтобы пользователь, который, допустим, отправил 10 сообщений за короткий промежуток получал мут на минуту и сообщение вроде "ха-ха попался спамер".
Бот написан на python с использованием telebot (или же pyTelegramBotAPI), а запускается все это дело на heroku.
Ответы (1 шт):
Можешь добавить подключение к API к телеграмму в функцию, если ошибка в подключении - опять вызываешь эту функцию
def api():
try:
m = 'Здесь оставшийся бота'
except:
api()
api()
Если не хочешь сделать так, то придётся использовать базу данных - хранить переменные.
В этом поможет или import json или import sqlite3. Если не хочешь хранить переменные в базе, то храни их в самом питоне используя словарь питона (dict).
p.s В любом случае, тебе нужно import time. При обработке сообщения пользователя сначала проверяешь нет ли его в листе, если есть, то пиши pass.
mut = {"ID_user_1": {"msg": 0, "min": 0},"ID_user_2":{"msg": 9, "min": 0}}
Так как id - особый ключ пользователя, то повторятся он не может, для обращения к пользователю делай mut[f"{ID}"] он постарается найти его в списке.
try:
mut[f"{ID}"]#Выполниться без ошибки, если пользователь есть в словаре
except:
mut[f"{ID}"] = {"msg": 0, "min": time.time()}#При ошибке зарегистрирует пользователя
msg = количество сообщений обработанных от пользователя min = когда пришло первое сообщение от этого пользователя
Думаю объяснил понятно, проверку на количество сообщений и времени сам сделаешь.