Кнопки в aiogram?
@dp.message_handler(commands=»start»)
async def intro_function(message: types.Message):
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
buttons = [«Регистрация»,»Проверить базу на дубли»,»Показать базу»,»FAQ»,»Обратная связь»]
keyboard.add(*buttons)
await message.answer(«Добро пожаловать! Выберите действие: «, reply_markup=keyboard)
@dp.message_handler(lambda message: message.text == «Обратная связь»)
async def registration(message: types.Message):
Это меню никуда не денется после отправки сообщения, будет доступно по этой кнопке:
Вот только с таким кодом сообщение увидит только сам юзер, бот его не поймает и проигнорирует.
import logging
from aiogram import Bot, Dispatcher, executor, types
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters import Text
import aiogram.utils.markdown as md
from aiogram.types import ParseMode
from aiogram.contrib.fsm_storage.memory import MemoryStorage
bot = Bot(token=’ЧЧЧ’)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
logging.basicConfig(level=logging.INFO)
class Form(StatesGroup):
feedback = State()
@dp.message_handler(commands=»start»)
async def intro_function(message: types.Message):
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
buttons = [«Регистрация»,»Проверить базу на дубли»,»Показать базу»,»FAQ»,»Обратная связь»]
keyboard.add(*buttons)
await message.answer(«Добро пожаловать! Выберите действие: «, reply_markup=keyboard)
@dp.message_handler(lambda message: message.text == «Обратная связь»)
async def registration(message: types.Message):
rmv_keyboard = types.ReplyKeyboardRemove()
admin_id = 379667659
await Form.feedback.set()
await message.answer(«Напишите ниже свой отзыв.», reply_markup=rmv_keyboard)
@dp.message_handler(state=’*’, commands=’cancel’)
@dp.message_handler(Text(equals=’cancel’, ignore_case=True), state=’*’)
async def cancel_handler(message: types.Message, state: FSMContext):
current_state = await state.get_state()
if current_state is None:
return
logging.info(‘Cancelling state %r’, current_state)
await state.finish()
await message.reply(‘Cancelled.’, reply_markup=types.ReplyKeyboardRemove())
@dp.message_handler(state=Form.feedback)
async def process_feedback(message: types.Message, state:FSMContext):
admin_id = ХХХХХХХ
async with state.proxy() as data:
data[‘feedback’] = message.text
await message.answer(«Отзыв от пользователя:»)
await bot.send_message(admin_id, data[‘feedback’])
Вот код. ПОсле отправки отзыва чтобы кнопка назад вернула на главное меню
Как решить проблему, не запускается бот python с библиотекой aiogram?
Создал для теста простого бота
Но при запуске выдает ошибку
WARNING:aiogram:Goodbye!
Traceback (most recent call last):
File «C:/Users/zahar/Downloads/bot/bot.py», line 21, in
executor.start_polling(dp, skip_updates=True)
File «C:\Users\zahar\Downloads\bot\venv\lib\site-packages\aiogram\utils\executor.py», line 41, in start_polling
executor.start_polling(reset_webhook=reset_webhook, timeout=timeout, relax=relax, fast=fast)
File «C:\Users\zahar\Downloads\bot\venv\lib\site-packages\aiogram\utils\executor.py», line 305, in start_polling
loop.run_until_complete(self._startup_polling())
File «C:\Users\zahar\AppData\Local\Programs\Python\Python38-32\lib\asyncio\base_events.py», line 616, in run_until_complete
return future.result()
File «C:\Users\zahar\Downloads\bot\venv\lib\site-packages\aiogram\utils\executor.py», line 356, in _startup_polling
await self._welcome()
File «C:\Users\zahar\Downloads\bot\venv\lib\site-packages\aiogram\utils\executor.py», line 346, in _welcome
user = await self.dispatcher.bot.me
File «C:\Users\zahar\Downloads\bot\venv\lib\site-packages\aiogram\bot\bot.py», line 27, in me
setattr(self, ‘_me’, await self.get_me())
File «C:\Users\zahar\Downloads\bot\venv\lib\site-packages\aiogram\bot\bot.py», line 176, in get_me
result = await self.request(api.Methods.GET_ME, payload)
File «C:\Users\zahar\Downloads\bot\venv\lib\site-packages\aiogram\bot\base.py», line 201, in request
return await api.make_request(self.session, self.__token, method, data, files,
File «C:\Users\zahar\Downloads\bot\venv\lib\site-packages\aiogram\bot\api.py», line 104, in make_request
return check_result(method, response.content_type, response.status, await response.text())
File «C:\Users\zahar\Downloads\bot\venv\lib\site-packages\aiogram\bot\api.py», line 84, in check_result
exceptions.Unauthorized.detect(description)
File «C:\Users\zahar\Downloads\bot\venv\lib\site-packages\aiogram\utils\exceptions.py», line 137, in detect
raise cls(description)
aiogram.utils.exceptions.Unauthorized: Unauthorized
Уже все что смог в интернете перечитал, не могу понять в чем проблема.
Несколько раз устанавливал библиотеку, все что только смог обновил.
Конечные автоматы (FSM)¶
Теория¶
В этой главе мы поговорим о, пожалуй, самой важной возможности ботов: о системе диалогов. К сожалению, далеко не все действия в боте можно выполнить за одно сообщение или команду. Предположим, есть бот для знакомств, где при регистрации нужно указать имя, возраст и отправить фотографию с лицом. Можно, конечно, попросить пользователя отправить фотографию, а в подписи к ней указать все данные, но это неудобно для обработки и запроса повторного ввода.
Теперь представим пошаговый ввод данных, где в начале бот «включает» режим ожидания определённой информации от конкретного юзера, далее на каждом этапе проверяет вводимые данные, а по команде /cancel прекращает ожидать очередной шаг и возвращается в основной режим. Взгляните на схему ниже:
Зелёной стрелкой обозначен процесс перехода по шагам без ошибок, синие стрелки означают сохранение текущего состояния и ожидание повторного ввода (например, если юзер указал, что ему 250 лет, следует запросить возраст заново), а красные показывают выход из всего процесса из-за команды /cancel или любой другой, означающей отмену.
Процесс со схемы выше в теории алгоритмов называется конечным автоматом (или FSM — Finite State Machine). Подробнее об этом можно прочесть здесь.
Практика¶
В качестве примера мы напишем имитатор заказа еды и напитков в кафе, а заодно научимся хранить логически разные хэндлеры в разных файлах.
Примечание об исходных текстах к главе
В тексте будет рассмотрен не весь код бота, некоторые импорты и обработчики специально пропущены для улучшения читабельности. Полный набор исходников можно найти на GitLab или в зеркале на GitHub.
За основу структуры файлов и каталогов взят репозиторий tgbot_template от пользователя Tishka17. В этой главе будет рассмотрен сильно упрощённый вариант его примера, а далее по мере усложнения бота структура файлов будет расширяться.
Спасибо!
Структура файлов и каталогов¶
О модулях, пакетах и каталогах
Создание шагов¶
Рассмотрим описание шагов для «заказа» еды. Для начала в файле app/handlers/food.py импортируем необходимые объекты и приведём списки блюд и их размеров (в реальной жизни эта информация может динамически подгружаться из какой-либо БД):
Напишем обработчик первого шага, реагирующий на команду /food (регистрировать его будем позднее):
Осталось реализовать последнюю функцию, которая отвечает за получение размера порции (с аналогичной проверкой ввода) и вывод результатов пользователю:
Шаги для выбора напитков делаются совершенно аналогично. Попробуйте сделать самостоятельно или загляните в исходные тексты к этой главе.
Общие команды¶
Раз уж заговорили о сбросе состояний, давайте в файле app/handlers/common.py реализуем обработчики команды /start и действия «отмены». Первая должна показывать некий приветственный/справочный текст, а вторая просто пишет «действие отменено». Обе функции сбрасывают состояние и данные и убирают обычную клавиатуру, если вдруг она есть:
Зарегистрируем эти два обработчика:
Точка входа¶
Теперь, вооружившись знаниями о конечных автоматах, вы можете безбоязненно писать ботов с системой диалогов.
Dispatcher¶
Basics¶
Available handlers¶
Handler class¶
Features¶
Dispatcher class¶
Simple Updates dispatcher
It will process incoming updates: messages, edited messages, channel posts, edited channel posts, inline queries, chosen inline results, callback queries, shipping queries, pre-checkout queries.
You can skip old incoming updates from queue. This method is not recommended to use if you use payments or you bot has high-load.
Process list of updates
updates –
fast –
Process single update object
update –
async reset_webhook ( check = True ) → bool [source] ¶
check – check before deleting
timeout –
relax –
limit –
reset_webhook –
fast –
error_sleep –
allowed_updates –
Break long-polling process.
Wait for the long-polling to close
Check if polling is enabled
Register handler for message
callback –
commands – list of commands
regexp – REGEXP
content_types – List of content types.
custom_filters – list of custom filters
kwargs –
state –
Decorator for message handler
Simple commands handler:
Filter messages by regular expression:
Filter messages by command regular expression:
Filter by content type:
Filter by custom function:
Use multiple filters:
Register multiple filters set for one handler:
This handler will be called if the message starts with ‘/command’ OR is some emoji
By default content_type is ContentType.TEXT
commands – list of commands
regexp – REGEXP
content_types – List of content types.
custom_filters – list of custom filters
kwargs –
state –
run_task – run callback in task (no wait results)
Register handler for edited message
callback –
commands – list of commands
regexp – REGEXP
content_types – List of content types.
state –
custom_filters – list of custom filters
run_task – run callback in task (no wait results)
kwargs –
Decorator for edited message handler
You can use combination of different handlers
commands – list of commands
regexp – REGEXP
content_types – List of content types.
state –
custom_filters – list of custom filters
run_task – run callback in task (no wait results)
kwargs –
Register handler for channel post
callback –
commands – list of commands
regexp – REGEXP
content_types – List of content types.
state –
custom_filters – list of custom filters
run_task – run callback in task (no wait results)
kwargs –
Decorator for channel post handler
commands – list of commands
regexp – REGEXP
content_types – List of content types.
state –
custom_filters – list of custom filters
run_task – run callback in task (no wait results)
kwargs –
Register handler for edited channel post
callback –
commands – list of commands
regexp – REGEXP
content_types – List of content types.
state –
custom_filters – list of custom filters
run_task – run callback in task (no wait results)
kwargs –
Decorator for edited channel post handler
commands – list of commands
regexp – REGEXP
content_types – List of content types.
custom_filters – list of custom filters
state –
run_task – run callback in task (no wait results)
kwargs –
Register handler for inline query
callback –
custom_filters – list of custom filters
state –
run_task – run callback in task (no wait results)
kwargs –
Decorator for inline query handler
state –
custom_filters – list of custom filters
run_task – run callback in task (no wait results)
kwargs –
Register handler for chosen inline query
callback –
state –
custom_filters –
run_task – run callback in task (no wait results)
kwargs –
Decorator for chosen inline query handler
state –
custom_filters –
run_task – run callback in task (no wait results)
kwargs –
Register handler for callback query
callback –
state –
custom_filters –
run_task – run callback in task (no wait results)
kwargs –
Decorator for callback query handler
state –
custom_filters –
run_task – run callback in task (no wait results)
kwargs –
Register handler for shipping query
callback –
state –
custom_filters –
run_task – run callback in task (no wait results)
kwargs –
Decorator for shipping query handler
state –
custom_filters –
run_task – run callback in task (no wait results)
kwargs –
Register handler for pre-checkout query
callback –
state –
custom_filters –
run_task – run callback in task (no wait results)
kwargs –
Decorator for pre-checkout query handler
state –
custom_filters –
run_task – run callback in task (no wait results)
kwargs –
Register handler for poll
callback –
custom_filters –
run_task – run callback in task (no wait results)
kwargs –
Decorator for poll handler
custom_filters –
run_task – run callback in task (no wait results)
kwargs –
Register handler for poll_answer
callback –
custom_filters –
run_task – run callback in task (no wait results)
kwargs –
Decorator for poll_answer handler
custom_filters –
run_task – run callback in task (no wait results)
kwargs –
Register handler for my_chat_member
callback –
custom_filters –
run_task – run callback in task (no wait results)
kwargs –
Decorator for my_chat_member handler
custom_filters –
run_task – run callback in task (no wait results)
kwargs –
Register handler for chat_member
callback –
custom_filters –
run_task – run callback in task (no wait results)
kwargs –
Decorator for chat_member handler
custom_filters –
run_task – run callback in task (no wait results)
kwargs –
Register handler for chat_join_request
callback –
custom_filters –
run_task – run callback in task (no wait results)
kwargs –
Decorator for chat_join_request handler
custom_filters –
run_task – run callback in task (no wait results)
kwargs –
Register handler for errors
callback –
exception – you can make handler for specific errors type
run_task – run callback in task (no wait results)
Decorator for errors handler
exception – you can make handler for specific errors type
run_task – run callback in task (no wait results)
Get current state for user in chat as context
chat –
user –
Execute throttling manager. Returns True if limit has not exceeded otherwise raises ThrottleError or returns False
key – key in storage
rate – limit (by default is equal to default rate limit)
user_id – user id
chat_id – chat id
no_error – return boolean value instead of raising error
Get information about key in bucket
chat_id –
user_id –
Release blocked key
chat_id –
user_id –
Execute handler as task and return None. Use this decorator for slow handlers (with timeouts)
func –
Meta-decorator for throttling. Invokes on_throttled if the handler was throttled.
on_throttled – the callable object that should be either a function or return a coroutine
key – key in storage
rate – limit (by default is equal to default rate limit)
user_id – user id
chat_id – chat id
callback – callable or subclass of AbstractFilter
validator – custom validator.
event_handlers – list of instances of Handler
exclude_event_handlers – list of excluded event handlers ( Handler )
callback – callable of subclass of AbstractFilter
middleware –
Dispatcher aiogram что это
aiogram is a pretty simple and fully asynchronous framework for Telegram Bot API written in Python 3.7 with asyncio and aiohttp. It helps you to make your bots faster and simpler.
Few steps before getting started.
Poll BotAPI for updates and process updates
You can find more examples in examples/ directory
Official aiogram resources:
This project exists thanks to all the people who contribute. [Code of conduct].
Become a financial contributor and help us sustain our community. [Contribute]
Support this project with your organization. Your logo will show up here with a link to your website. [Contribute]
About
Is a pretty simple and fully asynchronous framework for Telegram Bot API written in Python 3.7 with asyncio and aiohttp.





