@@ -129,22 +129,38 @@ def interval(self, new_value: int) -> None:
129
129
self ._interval = new_value
130
130
self ._reschedule_notifier_timer ()
131
131
132
+ def get_status_keyboard (self , finish : bool = False ) -> Optional [InlineKeyboardMarkup ]:
133
+ inline_keyboard = None
134
+ if self ._use_status_update_button and not finish :
135
+ inline_keyboard = InlineKeyboardMarkup (
136
+ [
137
+ [
138
+ InlineKeyboardButton (
139
+ text = "Update" ,
140
+ callback_data = "updstatus" ,
141
+ )
142
+ ]
143
+ ]
144
+ )
145
+ return inline_keyboard
146
+
147
+ async def _send_bzz_message (self , message : TelegramMessageRepr ) -> None :
148
+ if self ._progress_update_message :
149
+ if self ._bzz_mess_id != 0 :
150
+ try :
151
+ await self ._bot .delete_message (self ._chat_id , self ._bzz_mess_id )
152
+ except BadRequest as badreq :
153
+ logger .warning ("Failed deleting bzz message \n %s" , badreq )
154
+ self ._bzz_mess_id = 0
155
+ mes = await self ._bot .send_message (self ._chat_id , text = "Status has been updated\n This message will be deleted" , disable_notification = message .is_silent ())
156
+ self ._bzz_mess_id = mes .message_id
157
+
132
158
async def _send_message (self , message : TelegramMessageRepr , group_only : bool = False , manual : bool = False ) -> None :
133
159
if not group_only :
134
160
if self ._status_message and not manual :
135
- if self ._bzz_mess_id != 0 :
136
- try :
137
- await self ._bot .delete_message (self ._chat_id , self ._bzz_mess_id )
138
- except BadRequest as badreq :
139
- logger .warning ("Failed deleting bzz message \n %s" , badreq )
140
- self ._bzz_mess_id = 0
141
161
await message .update_existing (self ._status_message )
142
-
143
- if self ._progress_update_message :
144
- mes = await self ._bot .send_message (self ._chat_id , text = "Status has been updated\n This message will be deleted" , disable_notification = message .is_silent ())
145
- self ._bzz_mess_id = mes .message_id
162
+ await self ._send_bzz_message (message )
146
163
else :
147
-
148
164
sent_message = await message .send (self ._bot , self ._chat_id )
149
165
if not self ._status_message and not manual :
150
166
self ._status_message = sent_message
@@ -165,18 +181,8 @@ async def _send_photo(self, message: TelegramMessageRepr, group_only: bool = Fal
165
181
with await loop .run_in_executor (self ._executors_pool , self ._cam_wrap .take_photo ) as photo :
166
182
if not group_only :
167
183
if self ._status_message and not manual :
168
- if self ._bzz_mess_id != 0 :
169
- try :
170
- await self ._bot .delete_message (self ._chat_id , self ._bzz_mess_id )
171
- except BadRequest as badreq :
172
- logger .warning ("Failed deleting bzz message \n %s" , badreq )
173
- self ._bzz_mess_id = 0
174
184
await message .update_existing (self ._status_message , photo = photo )
175
-
176
- if self ._progress_update_message :
177
- mes = await self ._bot .send_message (self ._chat_id , text = "Status has been updated\n This message will be deleted" , disable_notification = message .is_silent ())
178
- self ._bzz_mess_id = mes .message_id
179
-
185
+ await self ._send_bzz_message (message )
180
186
else :
181
187
sent_message = await message .send (self ._bot , self ._chat_id , photo = photo )
182
188
if not self ._status_message and not manual :
@@ -198,12 +204,12 @@ async def _send_photo(self, message: TelegramMessageRepr, group_only: bool = Fal
198
204
199
205
async def _notify (self , message : TelegramMessageRepr , group_only : bool = False , manual : bool = False , finish : bool = False ) -> None :
200
206
try :
201
- if not self ._cam_wrap .enabled :
202
- await self ._send_message (message , manual )
207
+ if self ._cam_wrap .enabled :
208
+ await self ._send_photo (message , group_only = group_only , manual = manual )
203
209
else :
204
- await self ._send_photo (message , group_only , manual )
210
+ await self ._send_message (message , group_only = group_only , manual = manual )
205
211
except Exception as ex :
206
- logger .error (ex )
212
+ logger .error (ex , exc_info = True , stack_info = True )
207
213
finally :
208
214
if finish :
209
215
await self .reset_notifications ()
@@ -326,23 +332,11 @@ def _schedule_notification(self, message: str = "", schedule: bool = False, fini
326
332
if "last_update_time" in self ._message_parts :
327
333
mess += f"_Last update at { datetime .now ():%H:%M:%S} _"
328
334
329
- inline_keyboard = None
330
- if self ._use_status_update_button and not finish :
331
- inline_keyboard = InlineKeyboardMarkup (
332
- [
333
- [
334
- InlineKeyboardButton (
335
- text = "Update" ,
336
- callback_data = "updstatus" ,
337
- )
338
- ]
339
- ]
340
- )
341
335
tg_message = TelegramMessageRepr (
342
336
text = mess ,
343
337
silent = self ._silent_progress ,
344
338
suppress_escaping = True ,
345
- reply_markup = inline_keyboard ,
339
+ reply_markup = self . get_status_keyboard ( finish = finish ) ,
346
340
)
347
341
348
342
self ._sched .add_job (
@@ -425,34 +419,45 @@ async def stop_all(self) -> None:
425
419
await self .reset_notifications ()
426
420
self .remove_notifier_timer ()
427
421
422
+ # Todo: refactor with TelegramMessageRepr class
428
423
async def _send_print_start_info (self ) -> None :
429
424
message , bio = await self ._klippy .get_file_info ("Printer started printing" )
425
+
430
426
if bio is not None :
431
- status_message = await self ._bot .send_photo (
432
- self ._chat_id ,
433
- photo = bio ,
434
- caption = message ,
435
- disable_notification = self .silent_status ,
436
- )
427
+ if not self ._group_only :
428
+ status_message = await self ._bot .send_photo (
429
+ self ._chat_id ,
430
+ photo = bio ,
431
+ caption = message ,
432
+ reply_markup = self .get_status_keyboard (),
433
+ disable_notification = self .silent_status ,
434
+ )
435
+ self ._status_message = status_message
436
+
437
437
for group_ , message_thread_id in self ._notify_groups :
438
438
bio .seek (0 )
439
439
self ._groups_status_messages [group_ ] = await self ._bot .send_photo (
440
440
chat_id = group_ ,
441
441
message_thread_id = message_thread_id ,
442
442
photo = bio ,
443
443
caption = message ,
444
+ reply_markup = self .get_status_keyboard (),
444
445
disable_notification = self .silent_status ,
445
446
)
446
447
bio .close ()
447
448
else :
448
- status_message = await self ._bot .send_message (chat_id = self ._chat_id , text = message , disable_notification = self .silent_status )
449
+ if not self ._group_only :
450
+ status_message = await self ._bot .send_message (chat_id = self ._chat_id , text = message , reply_markup = self .get_status_keyboard (), disable_notification = self .silent_status )
451
+ self ._status_message = status_message
452
+
449
453
for group_ , message_thread_id in self ._notify_groups :
450
- self ._groups_status_messages [group_ ] = await self ._bot .send_message (chat_id = group_ , message_thread_id = message_thread_id , text = message , disable_notification = self .silent_status )
451
- self ._status_message = status_message
454
+ self ._groups_status_messages [group_ ] = await self ._bot .send_message (
455
+ chat_id = group_ , message_thread_id = message_thread_id , text = message , reply_markup = self .get_status_keyboard (), disable_notification = self .silent_status
456
+ )
452
457
453
- if self ._pin_status_single_message :
458
+ if self ._pin_status_single_message and self . _status_message is not None :
454
459
await self ._bot .unpin_all_chat_messages (self ._chat_id )
455
- await self ._bot .pin_chat_message (self ._chat_id , status_message .message_id , disable_notification = self .silent_status )
460
+ await self ._bot .pin_chat_message (self ._chat_id , self . _status_message .message_id , disable_notification = self .silent_status )
456
461
457
462
def send_print_start_info (self ) -> None :
458
463
if self ._enabled :
0 commit comments