Сообщить об ошибке.

Объект CallbackContext модуля python-telegram-bot

Объект контекста context модуля расширения telegram.ext

Внимание! Пакеты python-telegram-bot версии 13.x будут придерживаться многопоточной парадигмы программирования (*на данный момент актуальна версия 13.15). Пакеты версий 20.x и новее предоставляют чистый асинхронный Python интерфейс для Telegram Bot API. Дополнительно смотрите основные изменения в пакете python-telegram-bot версии 20.x.

Объект контекста CallbackContext принимает объект Dispatcher, который содержит контекст принятого сообщения. Далее, через экземпляр Dispatcher контекст передается в зарегистрированный обработчик сообщений, который в свою очередь передает его в свою функцию обратного вызова. В функции обратного вызова объект контекста доступен как параметр context.

telegram.ext.CallbackContext(dispatcher):

Класс telegram.ext.Dispatcher создаст единый контекст для всего обновления. Это означает, что если есть 2 обработчика в разных группах и они оба вызываются, то им будет передан один и тот же объект CallbackContext (атрибуты .matches будут отличаться). Это позволяет добавлять пользовательские атрибуты в обратный вызов более низкой группы обработчиков, а затем впоследствии получать доступ к этим атрибутам в обратном вызове более высокой группы обработчиков.

Обратите внимание, что атрибуты в CallbackContext могут измениться в будущем, поэтому обязательно используйте для них довольно уникальное имя.

Внимание!!! Не объединяйте пользовательские атрибуты и @run_async/telegram.ext.Disptacher.run_async(). Из-за того, как работает run_async, он почти наверняка выполнит обратные вызовы для сообщения не по порядку, и атрибуты, которые были добавлены, не будут присутствовать.

Атрибуты и методы определяемые объектом CallbackContext.

context.bot_data:

Атрибут context.bot_data представляет собой словарь dict, который можно использовать для хранения любых дополнительных данных.

Для каждого обновления это будет один и тот же словарь.

context.chat_data:

Атрибут context.chat_data представляет собой словарь dict, который можно использовать для хранения любых дополнительных данных.

Для каждого обновления с одного и того же идентификатора чата это будет один и тот же словарь.

Внимание! Когда групповой чат переходит в супергруппу, то его идентификатор чата изменится, в этом случае context.chat_data должен быть передан в супергруппу. Подробности смотрите в материале "Хранение данных модулем python-telegram-bot".

context.user_data:

Атрибут context.chat_data представляет собой словарь dict, который можно использовать для хранения любых дополнительных данных.

Для каждого обновления от одного и того же пользователя это будет один и тот же словарь.

context.matches:

Атрибут context.matches представляет собой список объектов соответствия для каждого шаблона, по которому задействованная функция re.search() вернула совпадение.

Атрибут context.matches доступен, если связанное обновление исходило от обработчика, поддерживающего регулярные выражения, или имело Filters.regex. Обратите внимание, что фильтры имеют замыкание подобно операторам and, or или not, поэтому комбинированные фильтры регулярных выражений не всегда будут оцениваться.

context.args:

Атрибут context.args представляет собой список слов в тексте, разделенных по пробелам, которые следуют за какой либо командой, если связанное сообщение обрабатывается обработчиком CommandHandler, PrefixHandler или StringCommandHandler.

context.error:

Атрибут context.error представляет собой поднятое исключение. Присутствует только при передаче обработчику ошибок, который должен быть зарегистрирован Dispatcher.add_error_handler().

context.async_args:

Атрибут context.async_args представляет собой список позиционных аргументов функции, которая подняла ошибку. Присутствует только тогда, когда эта функция была запущена асинхронно с Dispatcher.run_async().

context.async_kwargs:

Атрибут context.async_kwargs представляет собой словарь ключевые аргументы функции, вызвавшей ошибку. Присутствует только при асинхронном запуске этой функции с помощью Dispatcher.run_async().

context.job:

Атрибут context.job представляет собой задание Job, вызвавшее этот обратный вызов. Присутствует только при передаче в обратный вызов telegram.ext.Job.

context.bot:

Атрибут context.bot представляет собой экземпляр telegram.Bot (API Telegram), связанный с этим контекстом.

context.dispatcher:

Атрибут context.dispatcher представляет собой экземпляр диспетчера Dispatcher, связанный с этим контекстом.

context.job_queue:

Атрибут context.job_queue представляет собой объект JobQueue, используемый экземпляром диспетчера Dispatcher и (обычно) экземпляром Updater, связанным с этим контекстом.

context.match:

Атрибут context.match объект первого совпадения match из всех совпадений context.matches. Полезно, если для фильтрации сообщений использовался только один фильтр Filters.regex. Возвращает Нет, если спички пусты.

context.update_queue:

Атрибут context.update_queue представляет собой экземпляр очереди Queue, используемый диспетчером Dispatcher и (обычно) экземпляром Updater, связанным с этим контекстом.

Пример использования объекта CallbackContext.

В основном CallbackContext используется в функции обратного вызова обработчика сообщений:

from telegram.ext import Updater, CommandHandler

updater = Updater(token='TOKEN')
dispatcher = updater.dispatcher

# функция обратного вызова для команды '/caps'
# объект `CallbackContext` передается в качестве аргумента `context`
def caps(update, context):
    # `context` содержит аргументы команды '/caps' в виде списка 
    if context.args:
        # здесь список `context.args` объединяется 
        # в строку и переводится в верхний регистр
        text_caps = ' '.join(context.args).upper()
        context.bot.send_message(chat_id=update.effective_chat.id, 
                                text=text_caps)
    else:
        context.bot.send_message(chat_id=update.effective_chat.id, 
                                text='No command argument')
        context.bot.send_message(chat_id=update.effective_chat.id, 
                                text='send: /caps argument')

# обработчик команды '/caps'
caps_handler = CommandHandler('caps', caps)
# регистрируем обработчик в диспетчере
dispatcher.add_handler(caps_handler)

updater.start_polling()
updater.idle()