@@ -91,13 +91,13 @@ def _change_state(self, data, state=None):
9191 data_context .update ({"error" : False , "error-counter" : 0 })
9292 elif data_context .get ("error" ) is not None :
9393 data_context .pop ("error" )
94- data_context .pop ("error-counter" )
94+ data_context .pop ("error-counter" , 0 )
9595 self ._restore_basic_routes ()
9696 return new_state
9797
9898 def _wrong_message (self , text , data ):
9999 """Handler for wrong message"""
100- self .tData .update .message . delete ( )
100+ self .safe_delete_message ( self . tData .update .message )
101101 state = self .conversation .get_state (self .tData .context .user_data .get ("state" ))
102102 self ._restore_basic_routes ()
103103 # save data
@@ -122,7 +122,7 @@ def _wrong_message(self, text, data):
122122 def _update_dynamic_list (self , state ):
123123 """Update i and routes backup for dynamic list"""
124124 data = self .tData .context .user_data
125- if ( state_l := data .get ("list" )) :
125+ if state_l := data .get ("list" ):
126126 i = int (data .get ("list_i" ))
127127 new_i = i
128128 if state .list_all :
@@ -297,12 +297,20 @@ def _send_message(self, state, send_func, elements=None, save=True, post_func=st
297297 return new_msg
298298
299299 def _do_operations (self , state , data ):
300+ """Apply operations if exists in this state and button"""
300301 if isinstance (data , int ):
301302 data = data - len (self .tData .context .user_data .get ("list" , []))
302303 if state .operations and data in state .operations :
303304 return state .operations .get (data )(self .tData .prepare ())
304305 return False
305306
307+ def safe_delete_message (self , message ):
308+ """Safe delete messages (for group and channel)"""
309+ try :
310+ message .delete ()
311+ except BadRequest :
312+ pass
313+
306314 # -------- Public functions ---------
307315
308316 # ---- async
@@ -338,7 +346,7 @@ def send_message(tdata):
338346 chat_id = tdata .update .effective_chat .id
339347 msg_id = tdata .context .bot .send_message (chat_id , msg , ** kwargs )
340348 sleep (seconds )
341- msg_id . delete ( )
349+ self . safe_delete_message ( msg_id )
342350
343351 self .set_timed_function (0 , function = send_message )
344352
@@ -370,8 +378,8 @@ def force_state(self, state, update):
370378 def restart (self , update , context ):
371379 """Restart handler to initial configuration"""
372380 if self .tData .context :
373- self .tData .context .user_data .get ("data" ).clear ()
374- self .tData .context .user_data .pop ("bot-msg" )
381+ self .tData .context .user_data .get ("data" , {} ).clear ()
382+ self .tData .context .user_data .pop ("bot-msg" , 0 )
375383 self .tData .prepare ()
376384 else :
377385 self .tData .update_telegram_data (update , context )
@@ -386,19 +394,18 @@ def manage_conversation(self, update, context, delete_first=False):
386394 context .user_data .get ("prev_state" )
387395 )
388396 self .tData .update_telegram_data (update , context )
389- telegram_id = self .tData .update .effective_chat .id
390397 # ---- check authorization
391398 if (
392399 self .conversation .users_list is not None
393- and telegram_id not in self .conversation .users_list
400+ and update . effective_user . id not in self .conversation .users_list
394401 ):
395- if ( fbs := self .conversation .no_auth_state ) :
402+ if fbs := self .conversation .no_auth_state :
396403 return self .force_state (fbs , update )
397404 return self .NEXT
398405 # ---- start | first message
399406 if not self .tData .context .user_data :
400407 if delete_first :
401- update .message . delete ( )
408+ self . safe_delete_message ( update .message )
402409 state = self .conversation .start
403410 self ._init_context (state )
404411 self ._send_message (state , self .tData .update .message .reply_text )
@@ -412,7 +419,7 @@ def manage_conversation(self, update, context, delete_first=False):
412419 to_reply = self .tData .update .callback_query .edit_message_text
413420 else :
414421 if not state .regex and not state .handler :
415- self .tData .update .message . delete ( )
422+ self .safe_delete_message ( self . tData .update .message )
416423 return self .NEXT
417424 data = (
418425 state .handler
@@ -422,7 +429,7 @@ def manage_conversation(self, update, context, delete_first=False):
422429 if state .regex and not match (state .regex , str (data )) or not data :
423430 return self ._wrong_message (state .regex , data )
424431 to_reply = self .tData .context .user_data .get ("bot-msg" ).edit_text
425- self .tData .update .message . delete ( )
432+ self .safe_delete_message ( self . tData .update .message )
426433 # ---- next stage
427434 typed_data = state .data_type (data ) if data != "BACK" else "BACK"
428435 if not self ._do_operations (state , typed_data ) == self .EXIT_SIGNAL :
0 commit comments