Комментарии 12
Жду искренне в 3 части разбор мидлварей aiogram и их настройки
К сожалению или к счатью, но в третьей части у меня разбор CallBack (если время будет сегодня напишу и завтра утром выложу). А после фильтры, так как это более "попсовая" штука в разработке ботов, но до всего дойдем) Скажу честно, примерно в половине своих проектов я не использую мидлвари, но, конечно, в будущих статьях и это обсудим)
Спасибо за статью. Подписался.
вопрос не ради разжигания холивара на национальной почве, а скорее из соображений безопасности. Aiogram создан украинцем и им же модерируется. документация доступна только на двух языках - украинском и английском, при том, что, очевидно, у библиотеки есть огромное количество русскоязычных пользователей.
нет ли тут потенциальной угрозы отключения всего и вся или неочевидного поведения для русскоязычных пользователей?
Никто не мешает клонировать-проверить, а также пользоваться англ. документацией. Тем более, что автор оперативно и адекватно отвечает на вопросы.
Думаю, что в современном мире заблокировать доступ к чему-либо по территориальному признаку невозможно. Яркий тому пример ВК в Украине, Instagram, FB, Openai, RuTracker в РФ и так далее. Кроме установки библиотеки и копирования (клонирования) - всегда можно воспользоваться ВПН (писал недавно как свой ВПН за 5 минут развернуть на ВПС). Так что причин для беспокойств тут не вижу)
"Асинхронная функция используется, потому что взаимодействие с API Telegram требует выполнения асинхронных запросов" - режет глаз )
Добрый день. Я чего-то никак не пойму....
Ведь await dp.start_polling(bot) запускает бесконечный цикл обработки апдейтов. Каким образом (в какой момент) выполнится следующий за этой строчкой код, а именно await set_commands()?
async def main():
dp.include_router(start_router)
await bot.delete_webhook(drop_pending_updates=True)
await dp.start_polling(bot) # Запуск бесконечного цикла
await set_commands() # Никогда не выполнится.
Да, вы абсолютно правы. В данном месте кода косяк. Установил и забыл корректный код прописать. Данный момент должен закрываться следующим образом.
# Функция, которая настроит командное меню (дефолтное для всех пользователей)
async def set_commands():
commands = [BotCommand(command='start', description='Старт'),
BotCommand(command='profile', description='Мой профиль')]
await bot.set_my_commands(commands, BotCommandScopeDefault())
# Функция, которая выполнится когда бот запустится
async def start_bot():
await set_commands()
async def main():
# регистрация роутеров
dp.include_router(start_router)
dp.startup.register(start_bot)
# запуск бота в режиме long polling при запуске бот очищает все обновления, которые были за его моменты бездействия
try:
await bot.delete_webhook(drop_pending_updates=True)
await dp.start_polling(bot, allowed_updates=dp.resolve_used_update_types())
finally:
await bot.session.close()
if __name__ == "__main__":
asyncio.run(main())
Telegram Боты на Aiogram 3.x: Текстовая клавиатура и Командное меню