Как вернуться с Aiogram 3.0.0 на более старую версию?
Подскажите как вернуться на более старую версию aiogram? Я попробовал воспользоваться командой pip install aiogram==2.25.1, но это вызвало очень много ошибок в моём коде, и он перестал запускаться. Ошибка:
File "D:\Misc & Apps\Scripts-Code\Coding v2\main.py", line 3, in from aiogram import Bot, Dispatcher, types File "D:\Misc & Apps\Scripts-Code\Coding v2\venv\Lib\site-packages\aiogram\__init__.py", line 9, in from . import bot File "D:\Misc & Apps\Scripts-Code\Coding v2\venv\Lib\site-packages\aiogram\bot\__init__.py", line 1, in from . import api File "D:\Misc & Apps\Scripts-Code\Coding v2\venv\Lib\site-packages\aiogram\bot\api.py", line 8, in from .. import types File "D:\Misc & Apps\Scripts-Code\Coding v2\venv\Lib\site-packages\aiogram\types\__init__.py", line 1, in from . import base File "D:\Misc & Apps\Scripts-Code\Coding v2\venv\Lib\site-packages\aiogram\types\base.py", line 9, in from babel.support import LazyProxy File "D:\Misc & Apps\Scripts-Code\Coding v2\venv\Lib\site-packages\babel\support.py", line 19, in from babel.dates import format_date, format_datetime, format_time, \ File "D:\Misc & Apps\Scripts-Code\Coding v2\venv\Lib\site-packages\babel\dates.py", line 29, in from babel.util import UTC, LOCALTZ File "D:\Misc & Apps\Scripts-Code\Coding v2\venv\Lib\site-packages\babel\util.py", line 20, in from babel import localtime File "D:\Misc & Apps\Scripts-Code\Coding v2\venv\Lib\site-packages\babel\localtime\__init__.py", line 74, in LOCALTZ = get_localzone() ^^^^^^^^^^^^^^^ File "D:\Misc & Apps\Scripts-Code\Coding v2\venv\Lib\site-packages\babel\localtime\__init__.py", line 70, in get_localzone return _get_localzone() ^^^^^^^^^^^^^^^^ File "D:\Misc & Apps\Scripts-Code\Coding v2\venv\Lib\site-packages\babel\localtime\_win32.py", line 96, in _get_localzone return pytz.timezone(get_localzone_name()) ^^^^^^^^^^^^^^^^^^^^ File "D:\Misc & Apps\Scripts-Code\Coding v2\venv\Lib\site-packages\babel\localtime\_win32.py", line 42, in get_localzone_name localtz = winreg.OpenKey(handle, TZLOCALKEYNAME) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FileNotFoundError: [WinError 2] Не удается найти указанный файл
Отслеживать
1,389 1 1 золотой знак 6 6 серебряных знаков 26 26 бронзовых знаков
Почему Перестали после обновления и отката версии aiogram работать inline кнопки, как исправить?

У меня есть большой проект с использованием aiogram, который реализован через глобальные переменные вот такой структурой (возможно это важно)
Случайно обновил модуль aiogram на последнюю версию, после чего понял что там поменялась структура некоторых моментов, но я пока не готов переписывать весь код так как до этого все прекрасно работало, решил откатить версию aiogram, но не помню какая версия была, поэтому начал накатывать все подряд, /start работает, а реакции на кнопки нет от слова совсем.
Подскажите если знаете причину
PS. Скрипт с обработчиками событий подключены, проверил, но не работают кнопки
- Вопрос задан 23 сент. 2023
- 158 просмотров
2 комментария
Средний 2 комментария

Resolut @lxst Автор вопроса
@dp.callback_query_handler(lambda c: c.data == "createPost") async def createPost(call: CallbackQuery): await call.message.answer('Send me: -[link] [start] [end] +([channel] optional)', reply_markup=await inline_key_gen(dict_keyboards.back_button)) await bot.answer_callback_query(call.id) await GetUrlManga.info.set()
Вот пример хэндлера, может быть как-то поможет

Модератор @TosterModerator
Не надо ставить как можно больше тэгов. Лучше оставить один, но конкретный, с которым проблема.
См.п.3.1 Регламента. Также обратите внимание на п.3.6
Решения вопроса 1

Resolut @lxst Автор вопроса
Студент программист
Оказалось просто телега перестала давать апдейты, тут либо создавать нового бота в BotFather либо добавлять скрипт
from aiogram import Dispatcher def get_handled_updates_list(dp: Dispatcher) -> list: """ Here we collect only the needed updates for bot based on already registered handlers types. This way Telegram doesn't send unwanted updates and bot doesn't have to proceed them. :param dp: Dispatcher :return: a list of registered handlers types """ available_updates = ( "callback_query_handlers", "channel_post_handlers", "chat_member_handlers", "chosen_inline_result_handlers", "edited_channel_post_handlers", "edited_message_handlers", "inline_query_handlers", "message_handlers", "my_chat_member_handlers", "poll_answer_handlers", "poll_handlers", "pre_checkout_query_handlers", "shipping_query_handlers" ) return [item.replace("_handlers", "") for item in available_updates if len(dp.__getattribute__(item).handlers) > 0]
executor.start_polling(dp,allowed_updates=get_handled_updates_list(dp), on_startup=on_startup)
Знакомство с aiogram¶
Автор этой книги убеждён, что помимо теории должна быть и практика. Чтобы максимально упростить повторение приведённого далее кода, пришлось пойти на использование подходов, пригодных только для локальной разработки и обучения.
Так, например, во всех или почти во всех главах токен бота будет указываться прямо в исходных текстах. Это плохой подход, поскольку может привести к раскрытию токена, если вы забудете его удалить перед заливкой кода в публичный репозиторий (например, GitHub).
Или иногда в качестве хранилищ данных будут использоваться структуры, расположенные исключительно в оперативной памяти (словари, списки. ). В действительности такие объекты нежелательны, поскольку остановка бота приведёт безвозвратной потере данных.
Также механизмом получения апдейтов от Telegram выбран поллинг, поскольку он гарантированно работает в подавляющем большинстве окружений и подходит практически всем разработчикам.
Важно помнить, что автор ставит перед собой цель объяснить именно работу с Telegram Bot API при помощи aiogram, а не вообще весь Computer Science во всём его многообразии.
Терминология¶
Чтобы разговаривать в одних и тех же понятиях, введём некоторые термины, дабы в дальнейшем не путаться:
- ЛС — личные сообщения, в контексте бота это диалог один-на-один с пользователем, а не группа/канал.
- Чат — общее название для ЛС, групп, супергрупп и каналов.
- Апдейт — любое событие из этого списка: сообщение, редактирование сообщения, колбэк, инлайн-запрос, платёж, добавление бота в группу и т.д.
- Хэндлер — асинхронная функция, которая получает от диспетчера/роутера очередной апдейт и обрабатывает его.
- Диспетчер — объект, занимающийся получением апдейтов от Telegram с последующим выбором хэндлера для обработки принятого апдейта.
- Роутер — аналогично диспетчеру, но отвечает за подмножество множества хэндлеров. Можно сказать, что диспетчер — это корневой роутер.
- Фильтр — выражение, которое обычно возвращает True или False и влияет на то, будет вызван хэндлер или нет.
- Мидлварь — прослойка, которая вклинивается в обработку апдейтов.
Установка¶
Для начала давайте создадим каталог для бота, организуем там virtual environment (далее venv) и установим библиотеку aiogram.
Проверим, что установлен Python версии 3.9 (если вы знаете, что установлен 3.9 и выше, можете пропустить этот раздел):
[groosha@main lesson_01]$ python3.9 Python 3.9.9 (main, Jan 11 2022, 16:35:07) [GCC 11.1.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> exit() [groosha@main lesson_01]$
Теперь создадим файл requirements.txt , в котором укажем используемую нами версию aiogram. Также нам понадобится библиотека python-dotenv для файлов конфигурации.
О версиях aiogram
В этой главе используется aiogram 3.x, перед началом работы рекомендую заглянуть в канал релизов библиотеки и проверить наличие более новой версии. Подойдёт любая более новая, начинающаяся с цифры 3, поскольку aiogram 2.x более рассматриваться не будет и считается устаревшим.
[groosha@main 01_quickstart]$ python3.9 -m venv venv [groosha@main 01_quickstart]$ echo "aiogram requirements.txt [groosha@main 01_quickstart]$ echo "python-dotenv==1.0.0" >> requirements.txt [groosha@main 01_quickstart]$ source venv/bin/activate (venv) [groosha@main 01_quickstart]$ pip install -r requirements.txt # . здесь куча строк про установку. Successfully installed . тут длинный список. [groosha@main 01_quickstart]$
Обратите внимание на префикс «venv» в терминале. Он указывает, что мы находимся в виртуальном окружении с именем «venv». Проверим, что внутри venv вызов команды python указывает на всё тот же Python 3.9:
(venv) [groosha@main 01_quickstart]$ python Python 3.9.9 (main, Jan 11 2022, 16:35:07) [GCC 11.1.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> exit() (venv) [groosha@main 01_quickstart]$ deactivate [groosha@main 01_quickstart]$
Последней командой deactivate мы вышли из venv, чтобы он нам не мешал.
Если для написания ботов вы используете PyCharm, рекомендую также установить сторонний плагин Pydantic для поддержки автодополнения кода в телеграмных объектах.
Первый бот¶
Давайте создадим файл bot.py с базовым шаблоном бота на aiogram:
import asyncio import logging from aiogram import Bot, Dispatcher, types from aiogram.filters.command import Command # Включаем логирование, чтобы не пропустить важные сообщения logging.basicConfig(level=logging.INFO) # Объект бота bot = Bot(token="12345678:AaBbCcDdEeFfGgHh") # Диспетчер dp = Dispatcher() # Хэндлер на команду /start @dp.message(Command("start")) async def cmd_start(message: types.Message): await message.answer("Hello!") # Запуск процесса поллинга новых апдейтов async def main(): await dp.start_polling(bot) if __name__ == "__main__": asyncio.run(main())
Первое, на что нужно обратить внимание: aiogram — асинхронная библиотека, поэтому ваши хэндлеры тоже должны быть асинхронными, а перед вызовами методов API нужно ставить ключевое слово await, т.к. эти вызовы возвращают корутины.
Асинхронное программирование в Python
Не стоит пренебрегать официальной документацией!
Прекрасный туториал по asyncio доступен на сайте Python.
Если вы в прошлом работали с какой-то другой библиотекой для Telegram, например, pyTelegramBotAPI, то концепция хэндлеров (обработчиков событий) вам сразу станет понятна, разница лишь в том, что в aiogram хэндлерами управляет диспетчер.
Диспетчер регистрирует функции-обработчики, дополнительно ограничивая перечень вызывающих их событий через фильтры. После получения очередного апдейта (события от Telegram), диспетчер выберет нужную функцию обработки, подходящую по всем фильтрам, например, «обработка сообщений, являющихся изображениями, в чате с ID икс и с длиной подписи игрек». Если две функции имеют одинаковые по логике фильтры, то будет вызвана та, что зарегистрирована раньше.
Чтобы зарегистрировать функцию как обработчик сообщений, нужно сделать одно из двух действий:
1. Навесить на неё декоратор, как в примере выше. С различными типами декораторов мы познакомимся позднее.
2. Напрямую вызвать метод регистрации у диспетчера или роутера.
Рассмотрим следующий код:
# Хэндлер на команду /test1 @dp.message(Command("test1")) async def cmd_test1(message: types.Message): await message.reply("Test 1") # Хэндлер на команду /test2 async def cmd_test2(message: types.Message): await message.reply("Test 2")

Давайте запустим с ним бота:
Хэндлер cmd_test2 не сработает, т.к. диспетчер о нём не знает. Исправим эту ошибку и отдельно зарегистрируем функцию:
# Хэндлер на команду /test2 async def cmd_test2(message: types.Message): await message.reply("Test 2") # Где-то в другом месте, например, в функции main(): dp.message.register(cmd_test2, Command("test2"))

Снова запустим бота:
Синтаксический сахар¶
Для того чтобы сделать код чище и читабельнее, aiogram расширяет возможности стандартных объектов Telegram. Например, вместо bot.send_message(. ) можно написать message.answer(. ) или message.reply(. ) . В последних двух случаях не нужно подставлять chat_id , подразумевается, что он такой же, как и в исходном сообщении.
Разница между answer и reply простая: первый метод просто отправляет сообщение в тот же чат, второй делает «ответ» на сообщение из message :
@dp.message(Command("answer")) async def cmd_answer(message: types.Message): await message.answer("Это простой ответ") @dp.message(Command("reply")) async def cmd_reply(message: types.Message): await message.reply('Это ответ с "ответом"')

Более того, для большинства типов сообщений есть вспомогательные методы вида «answer_» или «reply_», например:
@dp.message(Command("dice")) async def cmd_dice(message: types.Message): await message.answer_dice(emoji="")
что значит ‘message: types.Message’ ?
Python является интерпретируемым языком с сильной, но динамической типизацией, поэтому встроенная проверка типов, как, например, в C++ или Java, отсутствует. Однако начиная с версии 3.5 в языке появилась поддержка подсказок типов, благодаря которой различные чекеры и IDE вроде PyCharm анализируют типы используемых значений и подсказывают программисту, если он передаёт что-то не то. В данном случае подсказка types.Message соообщает PyCharm-у, что переменная message имеет тип Message , описанный в модуле types библиотеки aiogram (см. импорты в начале кода). Благодаря этому IDE может на лету подсказывать атрибуты и функции.
При вызове команды /dice бот отправит в тот же чат игральный кубик. Разумеется, если его надо отправить в какой-то другой чат, то придётся по-старинке вызывать await bot.send_dice(. ) . Но объект bot (экземпляр класса Bot) может быть недоступен в области видимости конкретной функции. В aiogram 3.x объект бота, которому пришёл апдейт, неявно прокидывается в хэндлер и его можно достать как аргумент bot . Предположим, вы хотите по команде /dice отправлять кубик не в тот же чат, а в канал с ID -100123456789. Перепишем предыдущую функцию:
# не забудьте про импорт from aiogram.enums.dice_emoji import DiceEmoji @dp.message(Command("dice")) async def cmd_dice(message: types.Message, bot: Bot): await bot.send_dice(-100123456789, emoji=DiceEmoji.DICE)
Передача доп. параметров¶
Иногда при запуске бота может потребоваться передать одно или несколько дополнительных значений. Это может быть какая-нибудь переменная, объект конфигурации, список чего-то, отметка времени и что угодно ещё. Для этого достаточно передать эти данные как именованные (kwargs) аргументы в диспетчер, либо присвоить значения, как если бы вы работали со словарём.
Такая возможность лучше всего подходит для передачи объектов, которые должны жить в единственном экземпляре и не меняться в ходе работы бота (т.е. быть только для чтения). Если предполагается, что значение должно изменяться со временем, то помните, что это сработает только с мутабельными объектами. Чтобы получить значения в хэндлерах, просто укажите их как аргументы. Рассмотрим на примере:
# Где-то в другом месте # Например, в точке входа в приложение from datetime import datetime # bot = . dp = Dispatcher() dp["started_at"] = datetime.now().strftime("%Y-%m-%d %H:%M") await dp.start_polling(bot, mylist=[1, 2, 3]) @dp.message(Command("add_to_list")) async def cmd_add_to_list(message: types.Message, mylist: list[int]): mylist.append(7) await message.answer("Добавлено число 7") @dp.message(Command("show_list")) async def cmd_show_list(message: types.Message, mylist: list[int]): await message.answer(f"Ваш список: mylist>") @dp.message(Command("info")) async def cmd_info(message: types.Message, started_at: str): await message.answer(f"Бот запущен started_at>")
Теперь переменную started_at и список mylist можно читать и писать в разных хэндлерах. А если вам нужно пробрасывать уникальные для каждого апдейта значения (например, объект сессии СУБД), то ознакомьтесь с мидлварями.

Файлы конфигурации¶
Чтобы не хранить токен прямо в коде (вдруг вы захотите залить своего бота в публичный репозиторий?) можно вынести подобные данные в отдельный конфигурационный файл. Существует хорошее и адекватное мнение, что для прода достаточно переменных окружения, однако в рамках этой книги мы будем пользоваться отдельными файлами .env , чтобы немного упростить себе жизнь и сэкономить читателям время на разворачивание демонстрационного проекта.
Итак, создадим рядом с bot.py отдельный файл config_reader.py со следующим содержимым
config_reader.py
from pydantic_settings import BaseSettings, SettingsConfigDict from pydantic import SecretStr class Settings(BaseSettings): # Желательно вместо str использовать SecretStr # для конфиденциальных данных, например, токена бота bot_token: SecretStr # Начиная со второй версии pydantic, настройки класса настроек задаются # через model_config # В данном случае будет использоваться файла .env, который будет прочитан # с кодировкой UTF-8 model_config = SettingsConfigDict(env_file='.env', env_file_encoding='utf-8') # При импорте файла сразу создастся # и провалидируется объект конфига, # который можно далее импортировать из разных мест config = Settings()
Теперь немного отредактируем наш bot.py :
# импорты from config_reader import config # Для записей с типом Secret* необходимо # вызывать метод get_secret_value(), # чтобы получить настоящее содержимое вместо '*******' bot = Bot(token=config.bot_token.get_secret_value())
Наконец, создадим файл .env (с точкой в начале), где опишем токен бота:
BOT_TOKEN = 0000000000:AaBbCcDdEeFfGgHhIiJjKkLlMmNn
Если всё сделано правильно, то при запуске python-dotenv подгрузит переменные из файла .env , pydantic их провалидирует и объект бота успешно создастся с нужным токеном.
На этом мы закончим знакомство с библиотекой, а в следующих главах рассмотрим другие «фишки» aiogram и Telegram Bot API.
Как обновить aiogram python через pip
Hide navigation sidebar
Hide table of contents sidebar
Toggle site navigation sidebar
aiogram 3.3.0 documentation
Toggle Light / Dark / Auto color theme
Toggle table of contents sidebar
- Installation
- Migration FAQ (2.x -> 3.0)
- Bot API
Toggle navigation of Bot API
Toggle navigation of Client session
- Use Custom API server
- Base
- aiohttp
- Client session middlewares
Toggle navigation of Types
- Animation
- Audio
- BotCommand
- BotCommandScope
- BotCommandScopeAllChatAdministrators
- BotCommandScopeAllGroupChats
- BotCommandScopeAllPrivateChats
- BotCommandScopeChat
- BotCommandScopeChatAdministrators
- BotCommandScopeChatMember
- BotCommandScopeDefault
- BotDescription
- BotName
- BotShortDescription
- CallbackQuery
- Chat
- ChatAdministratorRights
- ChatBoost
- ChatBoostRemoved
- ChatBoostSource
- ChatBoostSourceGiftCode
- ChatBoostSourceGiveaway
- ChatBoostSourcePremium
- ChatBoostUpdated
- ChatInviteLink
- ChatJoinRequest
- ChatLocation
- ChatMember
- ChatMemberAdministrator
- ChatMemberBanned
- ChatMemberLeft
- ChatMemberMember
- ChatMemberOwner
- ChatMemberRestricted
- ChatMemberUpdated
- ChatPermissions
- ChatPhoto
- ChatShared
- Contact
- Dice
- Document
- ExternalReplyInfo
- File
- ForceReply
- ForumTopic
- ForumTopicClosed
- ForumTopicCreated
- ForumTopicEdited
- ForumTopicReopened
- GeneralForumTopicHidden
- GeneralForumTopicUnhidden
- Giveaway
- GiveawayCompleted
- GiveawayCreated
- GiveawayWinners
- InaccessibleMessage
- InlineKeyboardButton
- InlineKeyboardMarkup
- InputFile
- InputMedia
- InputMediaAnimation
- InputMediaAudio
- InputMediaDocument
- InputMediaPhoto
- InputMediaVideo
- KeyboardButton
- KeyboardButtonPollType
- KeyboardButtonRequestChat
- KeyboardButtonRequestUser
- KeyboardButtonRequestUsers
- LinkPreviewOptions
- Location
- LoginUrl
- MaybeInaccessibleMessage
- MenuButton
- MenuButtonCommands
- MenuButtonDefault
- MenuButtonWebApp
- Message
- MessageAutoDeleteTimerChanged
- MessageEntity
- MessageId
- MessageOrigin
- MessageOriginChannel
- MessageOriginChat
- MessageOriginHiddenUser
- MessageOriginUser
- MessageReactionCountUpdated
- MessageReactionUpdated
- PhotoSize
- Poll
- PollAnswer
- PollOption
- ProximityAlertTriggered
- ReactionCount
- ReactionType
- ReactionTypeCustomEmoji
- ReactionTypeEmoji
- ReplyKeyboardMarkup
- ReplyKeyboardRemove
- ReplyParameters
- ResponseParameters
- Story
- SwitchInlineQueryChosenChat
- TextQuote
- User
- UserChatBoosts
- UserProfilePhotos
- UserShared
- UsersShared
- Venue
- Video
- VideoChatEnded
- VideoChatParticipantsInvited
- VideoChatScheduled
- VideoChatStarted
- VideoNote
- Voice
- WebAppData
- WebAppInfo
- WriteAccessAllowed
- ChosenInlineResult
- InlineQuery
- InlineQueryResult
- InlineQueryResultArticle
- InlineQueryResultAudio
- InlineQueryResultCachedAudio
- InlineQueryResultCachedDocument
- InlineQueryResultCachedGif
- InlineQueryResultCachedMpeg4Gif
- InlineQueryResultCachedPhoto
- InlineQueryResultCachedSticker
- InlineQueryResultCachedVideo
- InlineQueryResultCachedVoice
- InlineQueryResultContact
- InlineQueryResultDocument
- InlineQueryResultGame
- InlineQueryResultGif
- InlineQueryResultLocation
- InlineQueryResultMpeg4Gif
- InlineQueryResultPhoto
- InlineQueryResultVenue
- InlineQueryResultVideo
- InlineQueryResultVoice
- InlineQueryResultsButton
- InputContactMessageContent
- InputInvoiceMessageContent
- InputLocationMessageContent
- InputMessageContent
- InputTextMessageContent
- InputVenueMessageContent
- SentWebAppMessage
- InputSticker
- MaskPosition
- Sticker
- StickerSet
- EncryptedCredentials
- EncryptedPassportElement
- PassportData
- PassportElementError
- PassportElementErrorDataField
- PassportElementErrorFile
- PassportElementErrorFiles
- PassportElementErrorFrontSide
- PassportElementErrorReverseSide
- PassportElementErrorSelfie
- PassportElementErrorTranslationFile
- PassportElementErrorTranslationFiles
- PassportElementErrorUnspecified
- PassportFile
- Invoice
- LabeledPrice
- OrderInfo
- PreCheckoutQuery
- ShippingAddress
- ShippingOption
- ShippingQuery
- SuccessfulPayment
- Update
- WebhookInfo
- CallbackGame
- Game
- GameHighScore
Toggle navigation of Methods
- addStickerToSet
- createNewStickerSet
- deleteStickerFromSet
- deleteStickerSet
- getCustomEmojiStickers
- getStickerSet
- sendSticker
- setCustomEmojiStickerSetThumbnail
- setStickerEmojiList
- setStickerKeywords
- setStickerMaskPosition
- setStickerPositionInSet
- setStickerSetThumbnail
- setStickerSetTitle
- uploadStickerFile
- answerCallbackQuery
- approveChatJoinRequest
- banChatMember
- banChatSenderChat
- close
- closeForumTopic
- closeGeneralForumTopic
- copyMessage
- copyMessages
- createChatInviteLink
- createForumTopic
- declineChatJoinRequest
- deleteChatPhoto
- deleteChatStickerSet
- deleteForumTopic
- deleteMyCommands
- editChatInviteLink
- editForumTopic
- editGeneralForumTopic
- exportChatInviteLink
- forwardMessage
- forwardMessages
- getChat
- getChatAdministrators
- getChatMember
- getChatMemberCount
- getChatMenuButton
- getFile
- getForumTopicIconStickers
- getMe
- getMyCommands
- getMyDefaultAdministratorRights
- getMyDescription
- getMyName
- getMyShortDescription
- getUserChatBoosts
- getUserProfilePhotos
- hideGeneralForumTopic
- leaveChat
- logOut
- pinChatMessage
- promoteChatMember
- reopenForumTopic
- reopenGeneralForumTopic
- restrictChatMember
- revokeChatInviteLink
- sendAnimation
- sendAudio
- sendChatAction
- sendContact
- sendDice
- sendDocument
- sendLocation
- sendMediaGroup
- sendMessage
- sendPhoto
- sendPoll
- sendVenue
- sendVideo
- sendVideoNote
- sendVoice
- setChatAdministratorCustomTitle
- setChatDescription
- setChatMenuButton
- setChatPermissions
- setChatPhoto
- setChatStickerSet
- setChatTitle
- setMessageReaction
- setMyCommands
- setMyDefaultAdministratorRights
- setMyDescription
- setMyName
- setMyShortDescription
- unbanChatMember
- unbanChatSenderChat
- unhideGeneralForumTopic
- unpinAllChatMessages
- unpinAllForumTopicMessages
- unpinAllGeneralForumTopicMessages
- unpinChatMessage
- deleteMessage
- deleteMessages
- editMessageCaption
- editMessageLiveLocation
- editMessageMedia
- editMessageReplyMarkup
- editMessageText
- stopMessageLiveLocation
- stopPoll
- answerInlineQuery
- answerWebAppQuery
- getGameHighScores
- sendGame
- setGameScore
- answerPreCheckoutQuery
- answerShippingQuery
- createInvoiceLink
- sendInvoice
- deleteWebhook
- getUpdates
- getWebhookInfo
- setWebhook
- setPassportDataErrors
Toggle navigation of Enums
- BotCommandScopeType
- ChatAction
- ChatBoostSourceType
- ChatMemberStatus
- ChatType
- ContentType
- Currency
- DiceEmoji
- EncryptedPassportElement
- InlineQueryResultType
- InputMediaType
- MaskPositionPoint
- MenuButtonType
- MessageEntityType
- MessageOriginType
- ParseMode
- PassportElementErrorType
- PollType
- ReactionTypeType
- StickerFormat
- StickerType
- TopicIconColor
- UpdateType
Toggle navigation of Handling events
- Router
- Dispatcher
- Dependency injection
- Filtering events
Toggle navigation of Filtering events
- Command
- ChatMemberUpdated
- Magic filters
- MagicData
- Callback Data Factory & Filter
- Exceptions
Toggle navigation of Finite State Machine
Toggle navigation of Class based handlers
- BaseHandler
- CallbackQueryHandler
- ChosenInlineResultHandler
- ErrorHandler
- InlineQueryHandler
- MessageHandler
- PollHandler
- PreCheckoutQueryHandler
- ShippingQueryHandler
- ChatMemberHandler
Toggle navigation of Utils