Finally have feature parity, callback query redo works

frontend_abc
Guillermo Rodriguez 2025-02-19 01:34:52 -03:00
parent cf7ee1b001
commit f5a734a622
No known key found for this signature in database
GPG Key ID: 002CC5F1E6BDA53E
2 changed files with 25 additions and 3 deletions

View File

@ -123,9 +123,12 @@ class BaseChatbot(ABC):
'''
...
async def create_status_msg(self, msg: BaseMessage, init_text: str) -> tuple[BaseUser, BaseMessage, dict]:
async def create_status_msg(self, msg: BaseMessage, init_text: str, force_user: BaseUser | None = None) -> tuple[BaseUser, BaseMessage, dict]:
# maybe init user
user = msg.author
if force_user:
user = force_user
user_row = await self.db.get_or_create_user(user.id)
# create status msg
@ -202,7 +205,8 @@ class BaseChatbot(ABC):
async def handle_request(
self,
msg: BaseMessage
msg: BaseMessage,
force_user: BaseUser | None = None
):
if msg.chat.is_private:
return
@ -218,7 +222,7 @@ class BaseChatbot(ABC):
# maybe initialize user db row and send a new msg thats gonna
# be updated throughout the request lifecycle
user, status_msg, user_row = await self.create_status_msg(
msg, f'started processing a {msg.command} request...')
msg, f'started processing a {msg.command} request...', force_user=force_user)
# if this is a redo msg, we attempt to get the input params from db
# else use msg properties

View File

@ -1,3 +1,4 @@
import json
import logging
import traceback
@ -9,6 +10,7 @@ from telebot.types import (
Chat as TGChat,
PhotoSize as TGPhotoSize,
Message as TGMessage,
CallbackQuery,
InputMediaPhoto,
InlineKeyboardButton,
InlineKeyboardMarkup
@ -118,6 +120,8 @@ class TelegramMessage(BaseMessage):
self._chat = TelegramChatRoom(msg.chat)
self._inputs: list[TelegramFileInput] | None = None
self._author = None
@property
def id(self) -> int:
return self._msg.message_id
@ -136,6 +140,9 @@ class TelegramMessage(BaseMessage):
@property
def author(self) -> TelegramUser:
if self._author:
return self._author
return TelegramUser(self._msg.from_user)
@property
@ -270,6 +277,17 @@ class TelegramChatbot(BaseChatbot):
msg = TelegramMessage(cmd='unknown', msg=tg_msg)
await self.echo_unknown(msg)
@bot.callback_query_handler(func=lambda _: True)
async def callback_query(call: CallbackQuery):
call_json = json.loads(call.data)
method = call_json.get('method')
match method:
case 'redo':
msg = await self.new_msg(self.main_group, 'processing a redo request...')
msg._cmd = 'redo'
await self.handle_request(msg, force_user=TelegramUser(user=call.from_user))
await bot.delete_message(chat_id=self.main_group.id, message_id=msg.id)
self.bot = bot
self._main_room: TelegramChatRoom | None = None