Начиная с версии 12.4, пакет python-telegram-bot поддерживает передачу значений по умолчанию для таких аргументов, как parse_mode, чтобы уменьшить количество повторного кода. Для этого был введен класс Defaults, что позволяет установить значения по умолчанию для часто используемых аргументов. Они устанавливаются при создании бота и в последствии неизменяемы.
parse_mode (Markdown/HTML). Устанавливает режим парсинг сообщении бота;disable_notification - (bool). Отправляет сообщение молча. Пользователи получат уведомление без звука;disable_web_page_preview (bool). Отключает предварительный просмотр ссылок в этом сообщении;allow_sending_without_reply (bool). True, если сообщение должно быть отправлено, даже если указанное ответное сообщение не найдено;timeout (float). *Для версии 13.x*. Если это значение указано, то оно используется в качестве тайм-аута чтения с сервера (вместо указанного при создании пула соединений);quote (bool). Если установлено значение True, то ответ отправляется как фактический ответ на сообщение. Если reply_to_message_id передается в kwargs, этот параметр будет проигнорирован. По умолчанию: True в групповых чатах и False в приватных чатах;tzinfo (объект pytz). Часовой пояс, который будет использоваться для всех входных данных даты (времени). Должен быть часовой пояс, предоставленный модулем pytz. По умолчанию UTC;run_async (bool). *Для версии 13.x*. Настройка по умолчанию для параметра run_async обработчиков и обработчиков ошибок. По умолчанию False.block (bool, необязательный). *Добавлено для версии 20.x*. Настройка по умолчанию для параметра BaseHandler.block обработчиков обратных вызовов и обработчиков ошибок, зарегистрированных с помощью Application.add_handler() и Application.add_error_handler(). По умолчанию True.protect_content (bool, необязательный). *Добавлено для версии 20.x*. Защищает содержимое отправленного сообщения от пересылки и сохранения.В примере устанавливается значение parse_mode на ParseMode.HTML и tzinfo на pytz.timezone('Europe/Berlin') по умолчанию:
Для *для версии пакета 13.x*:
import pytz import datetime as dtm from telegram import ParseMode from telegram.ext import Updater, MessageHandler, Filters, Defaults def job(context): chat_id = context.job.context local_now = dtm.datetime.now(context.bot.defaults.tzinfo) utc_now = dtm.datetime.utcnow() text = 'Running job at {} in timezone {}, which equals {} UTC.'.format( local_now, context.bot.defaults.tzinfo, utc_now ) context.bot.send_message(chat_id=chat_id, text=text) def echo(update, context): # Отправление сообщений с парсингом по умолчанию update.message.reply_text('<b>{}</b>'.format(update.message.text)) # Переопределение режима парсинга сообщений по умолчанию update.message.reply_text('*{}*'.format(update.message.text), parse_mode=ParseMode.MARKDOWN) update.message.reply_text('*{}*'.format(update.message.text), parse_mode=None) # Задание по расписанию context.job_queue.run_once(job, dtm.datetime.now() + dtm.timedelta(seconds=1), context=update.effective_chat.id) def main(): """Создание экземпляра объекта Defaults""" defaults = Defaults(parse_mode=ParseMode.HTML, tzinfo=pytz.timezone('Europe/Berlin')) """Создаем слушатель""" updater = Updater("TOKEN", use_context=True, defaults=defaults) # диспетчер для регистрации обработчиков dp = updater.dispatcher # Если сообщение не команда то отвечаем репликой # смотрите функцию обработчик `echo()` dp.add_handler(MessageHandler(Filters.text & ~Filters.command, echo)) # Запуск Telegram бота updater.start_polling() updater.idle() if __name__ == '__main__': main()
То же самое для *для асинхронной версии пакета 20.x*:
Изменения кода для асинхронного python-telegram-bot версии 20.x смотрите в обзорном материале в подразделе "Асинхронный модуль расширения telegram.ext (версия 20.x)"
import logging import pytz import datetime as dtm from telegram.constants import ParseMode from telegram.ext import MessageHandler, filters, Defaults, Application logging.basicConfig( format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO ) async def job(context): chat_id = context.job.chat_id timezone = context.bot.defaults.tzinfo local_now = dtm.datetime.now(timezone) utc_now = dtm.datetime.utcnow() text = f'Running job at {local_now} in timezone {timezone}, which equals {utc_now} UTC.' await context.bot.send_message(chat_id=chat_id, text=text) async def echo(update, context): text = update.message.text # Отправление сообщений с парсингом по умолчанию await update.message.reply_text(f'<b>{text}</b>') # Переопределение режима парсинга сообщений по умолчанию await update.message.reply_text(f'*{text}*', parse_mode=ParseMode.MARKDOWN) # Отправка без режима синтаксического анализа await update.message.reply_text(f'*{text}*', parse_mode=None) # Schedule job context.job_queue.run_once( job, dtm.datetime.now() + dtm.timedelta(seconds=1), chat_id=update.effective_chat.id ) def main(): """Создание экземпляра объекта по умолчанию""" defaults = Defaults(parse_mode=ParseMode.HTML, tzinfo=pytz.timezone('Europe/Berlin')) application = ( Application.builder() .token("TOKEN") .defaults(defaults) .build() ) # Если сообщение не команда то отвечаем репликой (функция `echo()`) application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo)) # Запуск бота application.run_polling() if __name__ == '__main__': main()