mirror of https://github.com/skygpu/skynet.git
Finally have feature parity, callback query redo works
parent
cf7ee1b001
commit
f5a734a622
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue