-
Notifications
You must be signed in to change notification settings - Fork 2
State
State is the first element you will need to build a conversation. Think about a FSM, this is a state of it.
In every State you can do different thing, like how the user will interact with it (with a keyboard or text) or what under the hood the State must do.
In a State you have a keyboard (will result in a grid of button) and an action (what to do in this State).
You can also define a dynamic keyboard (different keyboard in a single State, based on what you want) or a custom keyboard (for advanced user).
In alternative, you can set a text handler in the State, if you want the user to write (or a custom handler for video, photo, ...)
State(
state_name: str,
state_text: str,
data_type: Callable = int,
back_button: Optional[Union[bool, str]] = None,
**kwargs
)
-
state_name
: state name (and key for data dictionary). -
state_text
: message you want to print in that state. -
data_type
: data type, default or custom. -
back_button
: text for back button. False if you have a default button (defined in the Conversation) and you don't want it in this State. -
kwargs
: kwargs with every parameters you need from Telegram API sendMessage.
Usage example: keyboards.py
# callback handler
State.add_keyboard(
keyboard: Union[Sequence[str],Mapping[int, str]],
size: Optional[Sequence[int]] = None,
max_row: int = 3
)
-
keyboard
: inline keyboard. Can be a dict (with custom value as key) or a list/tuple (default int value as key). -
size
: size for each row of the keyboard. -
max_row
: max number of buttons in a row, ignored if size is specified.
Usage example: actions.py
# text handler
State.add_text(
regex: str = r'^.*$',
error_message: Optional[str] = None
)
-
regex
: regex for input text. -
error_message
: error message when regex fails.
Usage example: actions.py
# function to execute in this state
State.add_action(
function: Callable
)
-
function
: function must take one parameter (TelegramData
object). It can return astr
, repleacing 3@
(@@@
) in the message. Called when its state is reached.
Usage example: keyboards.py
# function to create dynamic keyboard
State.add_dynamic_keyboard(
function: Callable,
max_row: int = 3
)
-
function
: function must take one parameter (TelegramData
object). It must return a keyboard. Called when its state is reached. -
max_row
: max number of buttons in a row.
Usage example: keyboards.py
# function to create custom keyboard
State.add_custom_keyboard(
function: Callable
)
-
function
: function must take one parameter (TelegramData
object). It must return a list of InlineKeyboardButton. Called when its state is reached and it override the dynamic keyboard.
Usage example: keyboards.py
# function to create dynamic routes
State.add_dynamic_routes(
function: Callable
)
-
function
: function must take one parameter (TelegramData
object). It must return a triplet (routes,default,back) [seeConversation.add_routes()
to better understanding]. Suggested to use in combo with dynamic keyboard. Called when its state is reached.
Usage example: dynamic_list.py
# function to create dynamic list
State.add_dynamic_list(
function: Callable,
start: int = 0,
left_button: str = '<',
right_button: str = '>',
all_elements: bool = False,
labels: Optional[Callable] = None,
max_row: int = 4
)
-
function
: function must take one parameter (TelegramData
object). It must return a list of element. Called when its state is reached. -
start
: starting position in the list. -
left_button
,right_button
: button labels to move in the list. -
all_elements
: if you want to have all the elements in the list as buttons. -
max_row
: max number of buttons in a row. -
labels
: function must take one parameter (TelegramData
object). Combined withall_elements = True
, it must return a list of string in order to change buttons labels. Called when its state is reached.
Usage example: handlers.py
# function to create a custom handler
State.add_custom_handler(
handler: Callable,
error_message: Optional[str] = None
)
-
handler
: function must take one parameter (TelegramData
object). It must return an hashable value used to get to next state (by routes) or None if the handler fails. -
error_message
: error message when handler fails.
Usage example: actions.py
# function to set a long task
State.set_long_task(
self, text: str
)
-
text
: text for a message that will be sent before the main one (for long task).
Usage example: authorization.py
# function that return a new list of authorized users
State.add_refresh_auth(
self, func: Callable
)
-
func
: function must take one parameter (TelegramData
object). It must return a list of Telegram ids. Called when its state is reached.