事件工厂111

This commit is contained in:
2026-01-01 18:43:14 +08:00
parent 046dd0860f
commit 3ba15d38f9
15 changed files with 1017 additions and 245 deletions

View File

@@ -7,7 +7,7 @@ from typing import TYPE_CHECKING
if TYPE_CHECKING:
from .ws import WS
from ..models.event import Event
from models import OneBotEvent
class Bot:
@@ -33,40 +33,53 @@ class Bot:
"""
return await self.ws.call_api(action, params)
async def send_group_msg(self, group_id: int, message: str) -> dict:
async def send_group_msg(self, group_id: int, message: str, auto_escape: bool = False) -> dict:
"""
发送群消息
:param group_id: 群号
:param message: 消息内容
:param auto_escape: 是否自动转义
:return: API 响应结果
"""
return await self.call_api(
"send_group_msg", {"group_id": group_id, "message": message}
"send_group_msg", {"group_id": group_id, "message": message, "auto_escape": auto_escape}
)
async def send_private_msg(self, user_id: int, message: str) -> dict:
async def send_private_msg(self, user_id: int, message: str, auto_escape: bool = False) -> dict:
"""
发送私聊消息
:param user_id: 用户 QQ 号
:param message: 消息内容
:param auto_escape: 是否自动转义
:return: API 响应结果
"""
return await self.call_api(
"send_private_msg", {"user_id": user_id, "message": message}
"send_private_msg", {"user_id": user_id, "message": message, "auto_escape": auto_escape}
)
async def send(self, event: "Event", message: str) -> dict:
async def send(self, event: "OneBotEvent", message: str, auto_escape: bool = False) -> dict:
"""
智能发送消息,根据事件类型自动选择发送方式
:param event: 触发事件对象
:param message: 消息内容
:param auto_escape: 是否自动转义
:return: API 响应结果
"""
if event.message_type == "group" and event.group_id:
return await self.send_group_msg(event.group_id, message)
elif event.user_id:
return await self.send_private_msg(event.user_id, message)
# 如果是消息事件,直接调用 reply
if hasattr(event, "reply"):
await event.reply(message, auto_escape)
return {"status": "ok", "msg": "Replied via event.reply()"}
# 尝试从事件中获取 user_id 或 group_id
user_id = getattr(event, "user_id", None)
group_id = getattr(event, "group_id", None)
if group_id:
return await self.send_group_msg(group_id, message, auto_escape)
elif user_id:
return await self.send_private_msg(user_id, message, auto_escape)
return {"status": "failed", "msg": "Unknown message target"}