A conversation plugin class for pyrogram using inbuild Update Handlers
Project description
Conversation-Pyrogram
A conversation plugin class for pyrogram using inbuild Update Handlers
Complete list of handlers to be used without Handlers postfix :-
https://docs.pyrogram.org/api/handlers#index
Installation
Use the package manager pip to install or simply copy the class file to your project.
pip install git+https://github.com/Ripeey/Conversation-Pyrogram
Basic Usage
main.py Where the Client is initialized
from pyrogram import Client
from convopyro import Conversation
app = Client('MyApp')
Conversation(app) # That's it!
Then at any update handler
answer = client.listen.CallbackQuery(filters.user(update.from_user.id))
Example
from pyrogram import Client, filters
from pyrogram.types import Message, InlineKeyboardButton, InlineKeyboardMarkup, CallbackQuery
from convopyro import listen_message, stop_listen
@Client.on_message(filters.command(["start"], ["!",".","/"]) & filters.private)
async def start(client:Client, message:Message):
await client.send_message(
chat_id = message.chat.id,
text = "What's your name?",
reply_markup = InlineKeyboardMarkup(
[[InlineKeyboardButton(text="Stop Listen", callback_data="stop_listen")]]
)
)
answer = await listen_message(client, message.chat.id, timeout=None)
if answer:
await answer.reply(f"hello {answer.text}")
else:
await message.reply("Canceled Answer")
@Client.on_callback_query(filters.regex(pattern=r"^stop_listen$"))
async def listen_stopped(client:Client, callback_query:CallbackQuery):
await stop_listen(client, callback_query.from_user.id)
await callback_query.message.delete()
Advanced Usage
The conversation class has 2 primary methods listen.Handler (Handlers like Message, CallbackQuery ...etc) and listen.Cancel for ending an ongoing listener.
listen.Handler()
The conversation listen.Message (or any other Handler) takes 3 parameters, default is None but either filter or id as parameter is required.
-
filters : Single or Combined is required but this is optional if
idis passed with a valid single user or chat filter (which will learn below). -
id : An unique id for each listen, this could be str, a single user filter or chat filter, this is mostly optional and only needed to
Cancel()a conversation listen. If user/chat filter is passed then it combines itself withfiltersso you dont need to repeat again infiltersusing&, where as if str is used it's just used normally asid. -
timeout : Waiting time in seconds int for getting a response optional.
Return
- Update : Based on handlers used could be one of received updates such as Message, CallbackQuery, etc.
- None : When listen gets cancel using
listen.Cancela None is return as response at listen callback. - Exception : An
asyncio.TimeoutErroris raised if provided waiting time get's over.
listen.Cancel()
The conversation listen.Cancel takes 1 required parameter. This method is used to cancel a specific conversation listen.
- id : An unique id provided during listen, this could be str, a single user filter or chat filter.
Return
- Boolean : False if
idprovided already cancelled or invalid.
Example
@app.on_callback_query(filters.regex(r'stop'))
async def _(client, query):
# This will return response None at listen
await client.listen.Cancel(filters.user(query.from_user.id))
@app.on_message(filters.regex(r'hi'))
async def _(client, message):
button = InlineKeyboardMarkup([[InlineKeyboardButton('Cancel Question', callback_data = 'stop')]])
question = await client.send_message(message.chat.id, 'Enter your name in 5s.', reply_markup = button)
# A nice flow of conversation
try:
response = await client.listen.Message(filters.text, id = filters.user(message.from_user.id), timeout = 5)
except asyncio.TimeoutError:
await message.reply('Too late 5s gone.')
else:
if response:
await response.reply(f'Hello {response.text}')
else:
await message.reply('Okay cancelled question!')
finally:
await question.delete()
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file convopyro-0.5.tar.gz.
File metadata
- Download URL: convopyro-0.5.tar.gz
- Upload date:
- Size: 5.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
26bbebc90d48b8f96da371df9246cd63545273c2f9af0bd835b1e1119d4e5f90
|
|
| MD5 |
cbf384ce9682f5c4a3b36604c3fbc39f
|
|
| BLAKE2b-256 |
7652f7bded3158d6f2a912ccb636e95b45dd653f2360398f35cb5e0662bf07c0
|
File details
Details for the file convopyro-0.5-py3-none-any.whl.
File metadata
- Download URL: convopyro-0.5-py3-none-any.whl
- Upload date:
- Size: 5.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2db5c99e460c47779241a9a876cbc5254fa838e32d47770abafc086fe8835383
|
|
| MD5 |
1096d4d3d26ad21feab1a0cabe561111
|
|
| BLAKE2b-256 |
14e0f8d2c09dd5810c48cf3dafb0bad03779da5039cf0beaa5c19ca06b414a6e
|