Как сделать ограничение запроса в pyrogram?

Ссылка скопирована
1 ответ

У меня в юзер боте есть реакция на сообщение "мяу", он сохраняет в бд количество мяуканий и отправляет стикер. Но как сделать ограничение на запрос по этому мяу? То есть человек в некоторых чатах может просто начать спамить и какой-нибудь бот это расценивает как флуд. В 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 ограничивает только пользователя самого пирограма

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Павел Админов Ответ

Для установки ограничения запроса в 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 и обрабатывать ситуации, когда сервер не отвечает в установленные сроки.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно