From fe3b8e869b9dcbf07973cb195fc5c02b15d56434 Mon Sep 17 00:00:00 2001 From: Bibo-Joshi Date: Wed, 7 Oct 2020 21:38:22 +0200 Subject: [PATCH] Updated Adding defaults to your bot (markdown) --- Adding-defaults-to-your-bot.md | 42 ++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/Adding-defaults-to-your-bot.md b/Adding-defaults-to-your-bot.md index 22096a7..1391bc0 100644 --- a/Adding-defaults-to-your-bot.md +++ b/Adding-defaults-to-your-bot.md @@ -2,19 +2,34 @@ As of version 12.4, PTB supports passing default values for arguments such as `parse_mode` to reduce the need for repetition. For this purpose, the [Defaults](https://python-telegram-bot.readthedocs.io/en/stable/telegram.ext.defaults.html) class was introduced. This makes it possible to set defaults for often used arguments. These are set at the creation of the bot and are _immutable_. ## What can be set to a default -* parse_mode -* disable_notification -* disable_web_page_preview -* timeout -* quote +* `parse_mode` +* `disable_notification` +* `disable_web_page_preview` +* `timeout` +* `quote` +* `tzinfo` ## Example -Here is a show case for setting `parse_mode` to `ParseMode.HTML` by default: +Here is a show case for setting `parse_mode` to `ParseMode.HTML` and `tzinfo` to `pytz.timezone('Europe/Berlin')` by default: ```python +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): # Send with default parse mode update.message.reply_text('{}'.format(update.message.text)) @@ -22,9 +37,14 @@ def echo(update, context): update.message.reply_text('*{}*'.format(update.message.text), parse_mode=ParseMode.MARKDOWN) update.message.reply_text('*{}*'.format(update.message.text), parse_mode=None) + # Schedule job + context.job_queue.run_once(job, dtm.datetime.now() + dtm.timedelta(seconds=1), + context=update.effective_chat.id) + + def main(): - """Instanciate a Defaults object""" - defaults = Defaults(parse_mode=ParseMode.HTML) + """Instantiate a Defaults object""" + defaults = Defaults(parse_mode=ParseMode.HTML, tzinfo=pytz.timezone('Europe/Berlin')) """Start the bot.""" updater = Updater("TOKEN", use_context=True, defaults=defaults) @@ -32,13 +52,15 @@ def main(): # Get the dispatcher to register handlers dp = updater.dispatcher - # on noncommand i.e message - echo the message on Telegram - dp.add_handler(MessageHandler(Filters.text & ~Filters.command(only_start=true), echo)) + # on non command text message - echo the message on Telegram + dp.add_handler(MessageHandler(Filters.text & ~Filters.command, echo)) # Start the Bot updater.start_polling() updater.idle() + if __name__ == '__main__': main() + ``` \ No newline at end of file