2.0.0-beta.1
Pre-releaseWhat's Changed
Update with pip:
pip3 install -U pywa==2.0.0-beta.1
Caution
- Make sure to read the migration guide before updating to this version!
- This is a beta version, use it with caution!
Important
- Please let us know in the Telegram group or the GitHub discussion if you encountered any problems during the migration
[listeners]: Listeners are a new way to handle incoming user updates (messages, callbacks, etc.). They are more flexible, faster, and easier to use than handlers.
[filters]: Filters are now objects that can be combined using logical operators. They are more powerful and flexible than the previous filter system.
[handlers]: Now you can register handlers with decorators without the need to use the add_handler
method.
[flows]: A new method FlowCompletion.get_media(types.Image, key="img")
allows you to construct a media object and perform actions like .download()
on it.
[flows]: Decrypt media directly from FlowRequest using .decrypt_media(key, index)
.
[client]: The client can run without a token but won’t allow API operations (only webhook listening).
[sent_message]: The SentMessage
object returned by send_message
, send_image
, etc., contains the message ID and allows to act on the sent message with methods like reply_x
, wait_for_x
etc.
# my_handlers.py
from pywa import WhatsApp, filters, types, listeners
# You can register callback without th instance!
@WhatsApp.on_message(filters.text & filters.matches("store")) # combine filters with & operator
def store(_: WhatsApp, m: types.Message):
try:
age = m.reply("How old are you?", buttons=[types.Button("Cancel", "cancel")]).wait_for_reply( # wait for a reply
filters=filters.text & filters.new(lambda _, m: m.text.isdigit()), # create a new filter
cancelers=filters.callback_button & filters.matches("cancel"), # cancel the listener if the user clicks the cancel button
timeout=10, # set a timeout
)
m.reply(f"Your age is {age.text}")
except listeners.ListenerCanceled:
m.reply("You cancelled the store")
except listeners.ListenerTimeout:
m.reply("You took too long to reply")
# main.py
from pywa import WhatsApp
from . import my_handlers
wa = WhatsApp(..., handlers_modules=[my_handlers])
# run the server
Full Changelog: 1.26.0...2.0.0-beta.1