Перейти к содержимому

Как обновить aiogram python через pip

  • автор:

Как вернуться с 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 кнопки, как исправить?

650ecba77d194652213260.png

У меня есть большой проект с использованием aiogram, который реализован через глобальные переменные вот такой структурой (возможно это важно)

Случайно обновил модуль aiogram на последнюю версию, после чего понял что там поменялась структура некоторых моментов, но я пока не готов переписывать весь код так как до этого все прекрасно работало, решил откатить версию aiogram, но не помню какая версия была, поэтому начал накатывать все подряд, /start работает, а реакции на кнопки нет от слова совсем.
Подскажите если знаете причину

PS. Скрипт с обработчиками событий подключены, проверил, но не работают кнопки

  • Вопрос задан 23 сент. 2023
  • 158 просмотров

2 комментария

Средний 2 комментария

lxst

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

Модератор @TosterModerator

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

Решения вопроса 1

lxst

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") 

Команда /test2 не работает

Давайте запустим с ним бота:

Хэндлер 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('Это ответ с "ответом"') 

Разница между message.answer() и 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 можно читать и писать в разных хэндлерах. А если вам нужно пробрасывать уникальные для каждого апдейта значения (например, объект сессии СУБД), то ознакомьтесь с мидлварями.

Аргумент 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

Добавить комментарий

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