Skip to content

Commit 5808b87

Browse files
committed
Add dynamic routes
1 parent 44c5c70 commit 5808b87

File tree

9 files changed

+18
-7
lines changed

9 files changed

+18
-7
lines changed

LICENSE

100644100755
File mode changed.

README.md

100644100755
File mode changed.

__init__.py

100644100755
File mode changed.

autoconv/__init__.py

100644100755
File mode changed.

autoconv/autoconv_handler.py

100644100755
Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ def __init__(self,conversation,telegram_state_name,back_button='Back'):
1111
self.back_button = back_button
1212
self.prev_state = None
1313
self.curr_state = conversation.start
14+
self.update, self.context = None, None
1415

1516
def _build_keyboard(self,state):
1617
'''Build Keyboard for callback state'''
@@ -54,12 +55,13 @@ def _going_back(self):
5455
return self.NEXT
5556

5657
def restart(self):
57-
telegram_id = self.update.effective_chat.id
58-
if (c := self.context.user_data.get(telegram_id)):
59-
if (m := c.get('bot-msg')): m.delete()
60-
self.context.user_data.pop(telegram_id)
61-
self.prev_state = None
62-
self.curr_state = self.conversation.start
58+
if self.update:
59+
telegram_id = self.update.effective_chat.id
60+
if (c := self.context.user_data.get(telegram_id)):
61+
if (m := c.get('bot-msg')): m.delete()
62+
self.context.user_data.pop(telegram_id)
63+
self.prev_state = None
64+
self.curr_state = self.conversation.start
6365
return self
6466

6567
def manage_conversation(self,update,context,delete_first=True):
@@ -96,6 +98,9 @@ def manage_conversation(self,update,context,delete_first=True):
9698
if state.build: state.add_keyboard(state.build(self.update,self.context),max_row=state.max_row)
9799
keyboard = self._build_keyboard(state)
98100
ret = state.action(self.update,self.context) if state.action else None
101+
if state.routes:
102+
ro,de,ba = state.routes(self.update,self.context)
103+
self.conversation.add_routes(state,ro,de,ba)
99104
msg = state.msg if ret == None else state.msg.replace('@@@',ret)
100105
to_reply(f'{msg}',reply_markup=keyboard,parse_mode=state.mode,disable_web_page_preview=not state.webpage_preview)
101106
if state == self.conversation.end: context.user_data.update({telegram_id:None}); return ConversationHandler.END

autoconv/conversation.py

100644100755
File mode changed.

autoconv/state.py

100644100755
Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ def __init__(self,name,msg,type=int,parse_mode=None,back=False,webpage_preview=F
1818
self.build = None
1919
self.back = back
2020
self.webpage_preview = webpage_preview
21+
self.routes = None
2122

2223
def __str__(self):
2324
return f'State <{self.name}>'
@@ -49,4 +50,9 @@ def add_dynamic_keyboard(self,function,max_row=3):
4950
raise_type_error(function,'function',(Callable))
5051
raise_type_error(max_row,'max_row',(int))
5152
self.build = function
52-
self.max_row = max_row
53+
self.max_row = max_row
54+
55+
def add_dynamic_routes(self,function):
56+
'''Add function to create dynamic routes | must return 3 value (routes,default,back)'''
57+
raise_type_error(function,'function',(Callable))
58+
self.routes = function

examples/simple.py

100644100755
File mode changed.

setup.py

100644100755
File mode changed.

0 commit comments

Comments
 (0)