Skip to content

Commit 5898c7b

Browse files
authored
✨ 支持消息表态 (#51)
1 parent 98b2d0d commit 5898c7b

File tree

1 file changed

+25
-1
lines changed

1 file changed

+25
-1
lines changed

nonebot_plugin_deepseek/utils.py

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@
88
from nonebot.adapters import Event
99
from nonebot.permission import User, Permission
1010
from nonebot_plugin_waiter import Waiter, prompt
11+
from nonebot_plugin_alconna import SupportAdapter
1112
from nonebot.matcher import Matcher, current_event, current_matcher
12-
from nonebot_plugin_alconna.uniseg import UniMsg, UniMessage, get_message_id
13+
from nonebot_plugin_alconna.uniseg import UniMsg, UniMessage, get_target, get_message_id, message_reaction
1314

1415
from .apis import API
1516
from .log import tts_logger
@@ -46,6 +47,8 @@ async def handle(self, content: Optional[str]) -> None:
4647
if content:
4748
self.context.append({"role": "user", "content": content})
4849

50+
await self._message_reaction("thinking")
51+
4952
if not self.is_contextual:
5053
await self._handle_single_conversion()
5154
else:
@@ -99,6 +102,20 @@ def _prompt_handler(self, msg: UniMsg) -> UniMsg:
99102
self.message_id = get_message_id()
100103
return msg
101104

105+
async def _message_reaction(self, status: Literal["fail", "thinking", "done"]) -> None:
106+
emoji_map = {
107+
"fail": ["10060", "❌"],
108+
"thinking": ["424", "👀"],
109+
"done": ["144", "🎉"],
110+
}
111+
target = get_target(self.event)
112+
if target.adapter == SupportAdapter.onebot11:
113+
emoji = emoji_map[status][0]
114+
else:
115+
emoji = emoji_map[status][1]
116+
117+
await message_reaction(emoji, message_id=self.message_id)
118+
102119
async def _process_waiter_response(self, resp: Union[bool, str]) -> None:
103120
timeout = ds_config.timeout if isinstance(ds_config.timeout, int) else ds_config.timeout.user_input
104121

@@ -112,6 +129,8 @@ async def _process_waiter_response(self, resp: Union[bool, str]) -> None:
112129
await UniMessage.text("等待超时").finish(reply_to=self.message_id)
113130
resp = self._waiter_handler(_resp, skip=True)
114131

132+
await self._message_reaction("thinking")
133+
115134
if resp is False:
116135
await UniMessage.text("已结束对话").finish(reply_to=self.message_id)
117136
elif resp == "rollback":
@@ -138,6 +157,7 @@ async def _handle_rollback(self, steps: int = 1, by_error: bool = False) -> None
138157
)
139158
elif by_error and len(self.context) > 0:
140159
self.context.clear()
160+
await self._message_reaction("fail")
141161
await UniMessage.text("Oops! 连接异常,请重新输入").send(reply_to=self.message_id)
142162
else:
143163
await UniMessage.text("无法回滚,当前对话记录为空").send(reply_to=self.message_id)
@@ -167,6 +187,7 @@ async def _get_response_message(self) -> Optional[Message]:
167187
return completion.choices[0].message
168188
except (httpx.ReadTimeout, httpx.RequestError):
169189
if not self.is_contextual:
190+
await self._message_reaction("fail")
170191
await UniMessage.text("Oops! 网络超时,请稍后重试").finish(reply_to=self.message_id)
171192
await self._handle_rollback(by_error=True)
172193
except RequestException as e:
@@ -199,6 +220,9 @@ def _format_output(self, message: Message, with_thinking: bool) -> str:
199220
async def _send_response(self, message: Message) -> None:
200221
output = self._format_output(message, ds_config.enable_send_thinking)
201222
message.reasoning_content = None
223+
224+
await self._message_reaction("done")
225+
202226
if self.tts_model:
203227
try:
204228
output = self._format_output(message, False)

0 commit comments

Comments
 (0)