аватар question@mail.ru · 01.01.1970 03:00

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

аватар answer@mail.ru · 01.01.1970 03:00

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

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

Последние

Похожие