Skip to main content

A Python library to handle steps in pyrogram framework.

Project description

pyrostep

Downloads

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 use pyrostep.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 with timeout 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyrostep-2.10.19.tar.gz (15.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyrostep-2.10.19-py3-none-any.whl (16.2 kB view details)

Uploaded Python 3

File details

Details for the file pyrostep-2.10.19.tar.gz.

File metadata

  • Download URL: pyrostep-2.10.19.tar.gz
  • Upload date:
  • Size: 15.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for pyrostep-2.10.19.tar.gz
Algorithm Hash digest
SHA256 cd0bcbb158430b1fc0c2a216e0cac309163eb5b73518669f3e66ba0f96ef4a41
MD5 fac7775910314d3869ea4704f31dc19f
BLAKE2b-256 a6b875ca98c1320ec32a12f5593433a771d1218b615b905987b357f0d160216a

See more details on using hashes here.

File details

Details for the file pyrostep-2.10.19-py3-none-any.whl.

File metadata

  • Download URL: pyrostep-2.10.19-py3-none-any.whl
  • Upload date:
  • Size: 16.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for pyrostep-2.10.19-py3-none-any.whl
Algorithm Hash digest
SHA256 3e741c637db6549aec27aa43cf245de1c2424ab6cdb7698c1ac019a9efdaf5b8
MD5 d550c80fc78cfed043fbb0269efcf425
BLAKE2b-256 923c10ca2650aa723cc38e482c0fd3bba5f6c6fac1a37422b6012fcc7cb512c8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page