A Python library to handle steps in pyrogram framework.
Project description
pyrostep
You can implement conversation in your project based on pyrogram very easy with pyrostep.
Features:
- Full type hint
- Support step handling
- Support asking
- Change core settings of pyrogram
Installing
pip3 install -U pyrostep
Content
Tutorial
Use pyrostep.listen()
to start listening on your client:
from pyrogram import Client
import pyrostep
# ...
client = Client("myaccount")
pyrostep.listen(client)
[!NOTE]
Always usepyrostep.listen()
before adding your handlers.
After that, we have two ways to make conversation: wait_for method or step handling
Wait for method
In this way we can use pyrostep.wait_for
function, that waits for an update (e.g message) from your target.
client = Client("myaccount")
pyrostep.listen(client)
# ...
@client.on_message()
async def get_name(_, message):
await message.reply("Send your name?")
answer = await pyrostep.wait_for(message.from_user.id)
await message.reply(f"Your name is {answer.text}")
[!TIP]
You can specify how long it will wait withtimeout
parameter. see this example:
client = Client("myaccount")
pyrostep.listen(client)
# ...
@client.on_message()
async def get_name(_, message):
await message.reply("Send your name?")
try:
answer = await pyrostep.wait_for(message.from_user.id, timeout=10)
except TimeoutError:
await message.reply("Timed out")
else:
await message.reply(f"Your name is {answer.text}")
Step handling
In this way we will use this functions:
pyrostep.register_next_step()
We will specify a function that should process the next update from the target with pyrostep.register_next_step()
.
[!IMPORTANT]
In this way we cannot specify a timeout.
client = Client("myaccount")
pyrostep.listen(client)
# ...
@client.on_message()
async def get_name(_, message):
await message.reply("Send your name?")
await pyrostep.register_next_step(
message.from_user.id, get_age
)
async def get_age(_, message):
await message.reply("OK, Send your age?")
await pyrostep.register_next_step(
message.from_user.id,
say_info,
kwargs={"name": message.text}
)
async def say_info(_, message, name: str = None):
await message.reply(f"Name: {name} - Age: {message.text}")
Plugins
If you're using plugins in pyrogram, maybe you cannot use pyrostep.listen()
, so you can use pyrostep.listening_handler
function.
How? there's a example:
# plugin file
from pyrogram import Client
import pyrostep
Client.on_message()
async def stephandler(client, message):
await pyrostep.listening_handler(client, message)
# your other handlers
[!WARNING]
We didn't test it completely.
shortcuts
pyrostep have some shortcuts and shorthands for you.
pyrostep.shortcuts.split_list()
split_list splites your list.
example:
>>> from pyrostep import shortcuts
>>> split_list([1, 2, 3, 4, 5, 6], 2)
[[1, 2], [3, 4], [5, 6]]
>>> split_list([1, 2, 3], 2)
[[1, 2], [3]]
pyrostep.shortcuts.keyboard()
keyboard creates ReplyKeyboardMarkup from your list.
example:
>>> from pyrostep import shortcuts
>>> buttons = [
... [["Top Left"], ["Top Right"]],
... [["Bottom | Request Contact", True, "request_contact"]]
... ]
>>> shortcuts.keyboard(buttons)
ReplyKeyboardMarkup(keyboard=[[KeyboardButton(text='Top Left'), KeyboardButton(text='Top Right')], [KeyboardButton(text='Bottom | Request Contact', request_contact=True)]])
pyrostep.shortcuts.inlinekeyboard()
inlinekeyboard creates InlineKeyboardMarkup from your list.
example:
>>> from pyrostep import shortcuts
>>> buttons = [
... [["Top Left", "data_1"], ["Top Right", "data_2"]],
... [["Bottom", "Your URL", "url"]]
... ]
>>> shortcuts.inlinekeyboard(buttons)
InlineKeyboardMarkup(inline_keyboard=[[InlineKeyboardButton(text='Top Left', callback_data='data_1'), InlineKeyboardButton(text='Top Right', callback_data='data_2')], [InlineKeyboardButton(text='Bottom', url='Your URL')]])
pyrostep.shortcuts.validation_channels()
validation_channels checks user is already in channels or not.
returns True
if user is already in channels, returns False
otherwise.
example:
>>> from pyrostep import shortcuts
>>> user_id = 56392019
>>> channels = [-10279279837, -10823827873, 'channel_username']
>>> await validation_channels(app, user_id, channels)
True
connection package
This package helps you to change pyrogram connection settings.
pyrostep.connection.connection_max_retries()
How many times does it try to connect (to proxy or telegram)?
pyrostep.connection.invoke_max_retries()
How many times does it try to invoke a method?
pyrostep.connection.session_start_timeout()
How many seconds to wait for connection?
pyrostep.connection.session_max_retries()
How many times does it try to authenticate?
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
Hashes for pyrostep-2.10.19-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3e741c637db6549aec27aa43cf245de1c2424ab6cdb7698c1ac019a9efdaf5b8 |
|
MD5 | d550c80fc78cfed043fbb0269efcf425 |
|
BLAKE2b-256 | 923c10ca2650aa723cc38e482c0fd3bba5f6c6fac1a37422b6012fcc7cb512c8 |