Skip to content

Commit bdd2e20

Browse files
🚧 优化 QQ频道 的异常处理 (#11)
* 🚧 添加发送消息时的异常处理 * 🚧 跳过不支持的事件 * 🚨 auto fix by pre-commit hooks --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent 8a5d856 commit bdd2e20

File tree

1 file changed

+27
-18
lines changed

1 file changed

+27
-18
lines changed

nonebot_plugin_all4one/middlewares/qqguild.py

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from datetime import datetime
33
from typing import Any, Dict, List, Tuple, Union, Literal, Optional
44

5+
from nonebot import logger
56
from anyio import open_file
67
from pydantic import parse_obj_as
78
from nonebot.adapters.qqguild.api.model import Member
@@ -21,6 +22,7 @@
2122
ChannelEvent,
2223
MessageEvent,
2324
MessageSegment,
25+
GuildCreateEvent,
2426
GuildMemberEvent,
2527
ChannelCreateEvent,
2628
ChannelDeleteEvent,
@@ -140,6 +142,9 @@ async def to_onebot_event(self, event: Event) -> List[OneBotEvent]:
140142
event_dict["detail_type"] = "channel_delete"
141143
elif isinstance(event, ChannelUpdateEvent):
142144
event_dict["detail_type"] = "channel_update"
145+
else:
146+
logger.warning(f"未转换事件: {event}")
147+
return []
143148

144149
if event_out := OneBotAdapter.json_to_event(
145150
event_dict, "nonebot-plugin-all4one"
@@ -227,24 +232,28 @@ async def send_message(
227232
message_id, _, _ = self._from_ob_message_id(message_id)
228233
message_reference = MessageReference(message_id=message_id)
229234

230-
if detail_type == "private":
231-
result = await self.bot.post_dms_messages(
232-
guild_id=int(guild_id), # type: ignore
233-
content=content,
234-
msg_id=kwargs.get("event_id"),
235-
file_image=file_image, # type: ignore
236-
message_reference=message_reference, # type: ignore
237-
)
238-
else:
239-
result = await self.bot.post_messages(
240-
channel_id=int(channel_id), # type: ignore
241-
content=content,
242-
msg_id=kwargs.get("event_id"),
243-
file_image=file_image, # type: ignore
244-
message_reference=message_reference, # type: ignore
245-
)
246-
# FIXME: 如果是主动消息,返回的时间会是 None
247-
# 暂时不清楚原因,先用当前时间代替
235+
try:
236+
if detail_type == "private":
237+
result = await self.bot.post_dms_messages(
238+
guild_id=int(guild_id), # type: ignore
239+
content=content,
240+
msg_id=kwargs.get("event_id"),
241+
file_image=file_image, # type: ignore
242+
message_reference=message_reference, # type: ignore
243+
)
244+
else:
245+
result = await self.bot.post_messages(
246+
channel_id=int(channel_id), # type: ignore
247+
content=content,
248+
msg_id=kwargs.get("event_id"),
249+
file_image=file_image, # type: ignore
250+
message_reference=message_reference, # type: ignore
251+
)
252+
except ActionFailed as e:
253+
raise ob_exception.PlatformError("failed", 34001, str(e), None)
254+
# TODO: 如果是主动消息,返回的时间会是 None
255+
# https://bot.q.qq.com/wiki/develop/api/openapi/message/post_messages.html#%E9%94%99%E8%AF%AF%E7%A0%81
256+
# 因为会返回带 MessageAudit 的错误消息
248257
time = (
249258
result.timestamp.timestamp()
250259
if result.timestamp

0 commit comments

Comments
 (0)