Как выдать пользователю мут на минуту, если он спамит боту в 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 шт):

Автор решения: PirraT oZ

Можешь добавить подключение к 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 = когда пришло первое сообщение от этого пользователя

Думаю объяснил понятно, проверку на количество сообщений и времени сам сделаешь.

→ Ссылка