aiogram/examples/throtling_example.py

44 lines
1.2 KiB
Python
Raw Normal View History

"""
Example for throttling manager.
You can use that for flood controlling.
"""
import asyncio
import logging
from aiogram import Bot, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import Dispatcher
from aiogram.utils.exceptions import Throttled
from aiogram.utils.executor import start_polling
API_TOKEN = 'BOT TOKEN HERE'
logging.basicConfig(level=logging.INFO)
loop = asyncio.get_event_loop()
bot = Bot(token=API_TOKEN, loop=loop)
# Throttling manager does not working without Leaky Bucket.
# Then need to use storage's. For example use simple in-memory storage.
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
@dp.message_handler(commands=['start', 'help'])
async def send_welcome(message: types.Message):
try:
# Execute throttling manager with rate-limit equals to 2 seconds for key "start"
await dp.throttle('start', rate=2)
except Throttled:
# If request is throttled the `Throttled` exception will be raised.
await message.reply('Too many requests!')
else:
# Otherwise do something.
await message.reply("Hi!\nI'm EchoBot!\nPowered by aiogram.")
if __name__ == '__main__':
start_polling(dp, loop=loop, skip_updates=True)