- Notifications
You must be signed in to change notification settings - Fork5.9k
Builder Pattern
In this library, there are roughly four important components that make up everything:
- The
Updateris responsible for fetching updates that Telegram sent to your bot - The
Botprovides high-level access to the methods of the Bot API - The
BaseRequestis responsible to handle the actual networking stuff, i.e. sending the requests to the Bot API - The
Applicationbinds everything together and is responsible for handling the updates fetched by theUpdater.
In addition to those four, there are several other components, which are not as significant for the structure of apython-telegram-bot program.
All of those components have different parameters. Some of them are optional. Some are required. Some are mutually exclusive.That's a lot to take in and when coding your bot and setting this all up by yourself would be tiresome.
That's whypython-telegram-bot makes an effort to make the setup easy with reasonable defaults.For example, after running
fromtelegram.extimportApplicationapplication=Application.builder().token('TOKEN').build()
you will automatically have
- the
Updateravailable asapplication.updater - the
Botavailable asapplication.botorapplication.updater.bot(both are the same object) - a
BaseRequestobject initialized and ready to be used by theapplication.bot - several other components & sane default values set up.
But what if you want to customize some arguments thatApplication,Updater,Bot,BaseRequest or other components accept? Do you have to build all those objects yourself and glue them together? No! (Well, you can, but you don't have to.)
This is where thebuilder pattern comes into play. The idea is roughly as follows: You went shopping and have all the ingredients for a nice stew, but you don't want to cook yourself. So you hand everything to a chef. The chef will tell you that some of your ingredients don't match and will discard them. Afterwards, he'll cook a nice stew for you and you never need to worry about how exactly that's done.
Let's get a bit more technical. First, we need the cook:
fromtelegram.extimportApplicationbuilder=Application.builder()
Now, we hand over the ingredients:
builder.token(token)# the bot token is the main ingredientbuilder.context_types(context_types)# In case you want to use custom context types for your `Application`builder.read_timeout(read_timeout)# In case you want to fine tune the networking backend...
Finally, we have the chef cook the stew:
application=builder.build()
All this can also be chained into a single line:
fromtelegram.extimportApplicationapplication=Application.builder().token(token).context_types(context_types).read_timeout(read_timeout).build()
And that's already it!
The docs ofApplicationBuilder have all the info about which "ingredients" it can handle, i.e. which methods it has. Each method will tell you
- how the parameters will be used (e.g. the token passed to
ApplicationBuilder.tokenwill be used for theBotavailable asApplication.bot) - What happens if you don't call this method. For most things, PTB will use reasonable defaults.
Wiki ofpython-telegram-bot © Copyright 2015-2025 – Licensed byCreative Commons
- Architecture Overview
- Builder Pattern for
Application - Types of Handlers
- Working with Files and Media
- Exceptions, Warnings and Logging
- Concurrency in PTB
- Advanced Filters
- Storing data
- Making your bot persistent
- Adding Defaults
- Job Queue
- Arbitrary
callback_data - Avoiding flood limits
- Webhooks
- Bot API Forward Compatiblity
- Frequently requested design patterns
- Code snippets
- Performance Optimizations
- Telegram Passport
- Bots built with PTB
- Automated Bot Tests