Как сделать ограничение запроса в pyrogram?
У меня в юзер боте есть реакция на сообщение "мяу", он сохраняет в бд количество мяуканий и отправляет стикер. Но как сделать ограничение на запрос по этому мяу? То есть человек в некоторых чатах может просто начать спамить и какой-нибудь бот это расценивает как флуд. В aiogram есть rate_limit который хорошо с этим справляется. В pyrogram я нашел только except FloodWait который ограничивает, но не так как мне нужно. Условно говоря хочется чтобы после того как человек написал 4 раза мяу под ряд бот ставился на паузу в секунд 5-10.
@app.on_message(filters.command("мяу", prefixes='') & filters.all) async def type(client_object, message: Message): randomsticker = ('CAACAgIAAxkBAAELvZll-Miwf1efzjpzeDzU35gFDL9ZqQACJzkAAvO2SUpkIculSuJieDQE', 'CAACAgIAAxkBAAELvZtl-MjNX0igmnjqIWM1OftV7kCeGQAChBMAAjluyUtmVU5UsGspDzQE', 'CAACAgIAAxkBAAELvZ1l-MjYwbbN_xy34SsD5H0Ls0oLjgACjRoAArBMyUse0rmJB-7RcTQE','CAACAgIAAxkBAAELvZ9l-MkHQAaCSzXp8zSXRZR4C2yAPgACuxcAAnZd0Ek3pVO4H1JC3jQE','CAACAgIAAxkBAAELvaFl-MkWig9h9vtn2ijqPjbcc80Y1AACaxUAAnqH8Ej5yWCSGa7YpzQE','CAACAgIAAxkBAAELvaNl-Mkr4d1O-pdcv5PY5gvl-fElxQACaR4AAhyaEEvbZLJoHqzj3DQE','CAACAgIAAxkBAAELvaVl-MlMfe0Hm8tJR5HiAAFrNi6ohlIAAjokAAJ-jCFLxxVhCk6yNuA0BA','CAACAgIAAxkBAAELvadl-Mlt3utX6szJplpZ1Qu4ZpGL7wAChEAAAnAT-Ug7pKo_VbHcBjQE','CAACAgIAAxkBAAELvall-MmANk-mhT-GLLR6Xroz587JEgAC7ycAAtHHWUhngGsBmQ9DcjQE','CAACAgIAAxkBAAELvatl-MmYzwKEwhMeBvMdCeL8FrencAACWCkAAmHbcUv0-MJqdq3kNjQE','CAACAgIAAxkBAAELva1l-Mm0i89JL0iaJrOrPZl1K_8DLwAC4hwAAkp78EsAAaA2OREhAAGpNAQ','CAACAgIAAxkBAAELyp1mAWRT90tkLFIh-W4bEeKnb-SPEgAC7jQAAj4HcUnbvNQ639MiJjQE','CAACAgIAAxkBAAELyp9mAWRqpZ92HwkOxNlyP_YE3vJVSAACWT0AAk5gCUpeL8oMZ7JNaTQE') random_meow = random.choice(randomsticker) row = db.cur.execute(f"SELECT user_id FROM animals WHERE user_id == '{message.from_user.id}'").fetchone() if row is None: await app.send_sticker(message.chat.id, random_meow) db.db_table_val(user_id=message.from_user.id, username=message.from_user.username, first_name=message.from_user.first_name, meow = 1, gav = 0, krya=0) elif row is not None: msg = await app.send_sticker(message.chat.id, random_meow) db.cur.execute(f"UPDATE animals SET meow = meow + 1 WHERE user_id == '{message.from_user.id}'") db.db.commit() await sleep(20) await msg.delete() |
@app.on_message(filters.command("мяу", prefixes='') & filters.all) async def type(client_object, message: Message): randomsticker = ('CAACAgIAAxkBAAELvZll-Miwf1efzjpzeDzU35gFDL9ZqQACJzkAAvO2SUpkIculSuJieDQE', 'CAACAgIAAxkBAAELvZtl-MjNX0igmnjqIWM1OftV7kCeGQAChBMAAjluyUtmVU5UsGspDzQE', 'CAACAgIAAxkBAAELvZ1l-MjYwbbN_xy34SsD5H0Ls0oLjgACjRoAArBMyUse0rmJB-7RcTQE','CAACAgIAAxkBAAELvZ9l-MkHQAaCSzXp8zSXRZR4C2yAPgACuxcAAnZd0Ek3pVO4H1JC3jQE','CAACAgIAAxkBAAELvaFl-MkWig9h9vtn2ijqPjbcc80Y1AACaxUAAnqH8Ej5yWCSGa7YpzQE','CAACAgIAAxkBAAELvaNl-Mkr4d1O-pdcv5PY5gvl-fElxQACaR4AAhyaEEvbZLJoHqzj3DQE','CAACAgIAAxkBAAELvaVl-MlMfe0Hm8tJR5HiAAFrNi6ohlIAAjokAAJ-jCFLxxVhCk6yNuA0BA','CAACAgIAAxkBAAELvadl-Mlt3utX6szJplpZ1Qu4ZpGL7wAChEAAAnAT-Ug7pKo_VbHcBjQE','CAACAgIAAxkBAAELvall-MmANk-mhT-GLLR6Xroz587JEgAC7ycAAtHHWUhngGsBmQ9DcjQE','CAACAgIAAxkBAAELvatl-MmYzwKEwhMeBvMdCeL8FrencAACWCkAAmHbcUv0-MJqdq3kNjQE','CAACAgIAAxkBAAELva1l-Mm0i89JL0iaJrOrPZl1K_8DLwAC4hwAAkp78EsAAaA2OREhAAGpNAQ','CAACAgIAAxkBAAELyp1mAWRT90tkLFIh-W4bEeKnb-SPEgAC7jQAAj4HcUnbvNQ639MiJjQE','CAACAgIAAxkBAAELyp9mAWRqpZ92HwkOxNlyP_YE3vJVSAACWT0AAk5gCUpeL8oMZ7JNaTQE') random_meow = random.choice(randomsticker) row = db.cur.execute(f"SELECT user_id FROM animals WHERE user_id == '{message.from_user.id}'").fetchone() if row is None: await app.send_sticker(message.chat.id, random_meow) db.db_table_val(user_id=message.from_user.id, username=message.from_user.username, first_name=message.from_user.first_name, meow = 1, gav = 0, krya=0) elif row is not None: msg = await app.send_sticker(message.chat.id, random_meow) db.cur.execute(f"UPDATE animals SET meow = meow + 1 WHERE user_id == '{message.from_user.id}'") db.db.commit() await sleep(20) await msg.delete()
Дополнительно:
Ответы:
хранить базу сообщений мяю и читать её каждый запрос.
просто id сохранять или id+username, но юзернейм есть не у всех.
если послдние 4 айди == id текущему, то не отвечать.
а FloodWait ограничивает только пользователя самого пирограма
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для установки ограничения запроса в pyrogram, вы можете использовать параметр `timeout` при вызове методов API. Данный параметр позволяет указать максимальное время ожидания ответа от сервера в секундах. Если ответ не будет получен в указанное время, будет вызвано исключение `Timeout`.
Пример использования ограничения запроса в pyrogram:
```php
from pyrogram import Client
# Создание объекта Client
app = Client("my_account")
# Установка ограничения запроса на 10 секунд
app.set_timeout(10)
# Вызов метода API с ограничением запроса
try:
result = app.get_messages("chat_id", message_ids=[1, 2, 3])
print(result)
except Timeout:
print("Превышено время ожидания ответа от сервера")
# Запуск клиента
app.run()
```
В данном примере мы создаем объект `Client`, устанавливаем ограничение запроса на 10 секунд с помощью метода `set_timeout`, а затем вызываем метод API `get_messages` с указанием чата и идентификаторов сообщений. Если ответ не будет получен в течение 10 секунд, будет выведено сообщение о превышении времени ожидания.
Таким образом, вы можете легко установить ограничение запроса в pyrogram и обрабатывать ситуации, когда сервер не отвечает в установленные сроки.