mirror of https://github.com/Mai-with-u/MaiBot.git
events系统大体完成
parent
1260a11b78
commit
88eb5cd40d
|
|
@ -151,7 +151,7 @@ class PrintMessage(BaseEventHandler):
|
|||
class ForwardMessages(BaseEventHandler):
|
||||
"""
|
||||
把接收到的消息转发到指定聊天ID
|
||||
|
||||
|
||||
此组件是HYBRID消息和FORWARD消息的使用示例。
|
||||
每收到10条消息,就会以1%的概率使用HYBRID消息转发,否则使用FORWARD消息转发。
|
||||
"""
|
||||
|
|
@ -177,11 +177,23 @@ class ForwardMessages(BaseEventHandler):
|
|||
if random.random() < 0.01:
|
||||
success = await self.send_hybrid(stream_id, [(ReplyContentType.TEXT, msg) for msg in self.messages])
|
||||
else:
|
||||
success = await self.send_forward(stream_id, [(str(global_config.bot.qq_account), str(global_config.bot.nickname), [(ReplyContentType.TEXT, msg)]) for msg in self.messages])
|
||||
success = await self.send_forward(
|
||||
stream_id,
|
||||
[
|
||||
(
|
||||
str(global_config.bot.qq_account),
|
||||
str(global_config.bot.nickname),
|
||||
[(ReplyContentType.TEXT, msg)],
|
||||
)
|
||||
for msg in self.messages
|
||||
],
|
||||
)
|
||||
if not success:
|
||||
raise ValueError("转发消息失败")
|
||||
self.messages = []
|
||||
return True, True, None, None, None
|
||||
|
||||
|
||||
class RandomEmojis(BaseCommand):
|
||||
command_name = "random_emojis"
|
||||
command_description = "发送多张随机表情包"
|
||||
|
|
@ -203,6 +215,7 @@ class RandomEmojis(BaseCommand):
|
|||
success = await self.send_forward([("0", "神秘用户", [(ReplyContentType.IMAGE, img)]) for img in images])
|
||||
return (True, "已发送随机表情包", True) if success else (False, "发送随机表情包失败", False)
|
||||
|
||||
|
||||
# ===== 插件注册 =====
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import asyncio
|
|||
import traceback
|
||||
|
||||
from rich.traceback import install
|
||||
from maim_message import Seg
|
||||
|
||||
from src.common.message.api import get_global_api
|
||||
from src.common.logger import get_logger
|
||||
|
|
@ -66,8 +67,36 @@ class UniversalMessageSender:
|
|||
message.build_reply()
|
||||
logger.debug(f"[{chat_id}] 选择回复引用消息: {message.processed_plain_text[:20]}...")
|
||||
|
||||
from src.plugin_system.core.events_manager import events_manager
|
||||
from src.plugin_system.base.component_types import EventType
|
||||
|
||||
continue_flag, modified_message = await events_manager.handle_mai_events(
|
||||
EventType.POST_SEND_PRE_PROCESS, message=message, stream_id=chat_id
|
||||
)
|
||||
if not continue_flag:
|
||||
logger.info(f"[{chat_id}] 消息发送被插件取消: {str(message.message_segment)[:100]}...")
|
||||
return False
|
||||
if modified_message:
|
||||
if modified_message._modify_flags.modify_message_segments:
|
||||
message.message_segment = Seg(type="seglist", data=modified_message.message_segments)
|
||||
if modified_message._modify_flags.modify_plain_text:
|
||||
logger.warning(f"[{chat_id}] 插件修改了消息的纯文本内容,可能导致此内容被覆盖。")
|
||||
message.processed_plain_text = modified_message.plain_text
|
||||
|
||||
await message.process()
|
||||
|
||||
continue_flag, modified_message = await events_manager.handle_mai_events(
|
||||
EventType.POST_SEND, message=message, stream_id=chat_id
|
||||
)
|
||||
if not continue_flag:
|
||||
logger.info(f"[{chat_id}] 消息发送被插件取消: {str(message.message_segment)[:100]}...")
|
||||
return False
|
||||
if modified_message:
|
||||
if modified_message._modify_flags.modify_message_segments:
|
||||
message.message_segment = Seg(type="seglist", data=modified_message.message_segments)
|
||||
if modified_message._modify_flags.modify_plain_text:
|
||||
message.processed_plain_text = modified_message.plain_text
|
||||
|
||||
if typing:
|
||||
typing_time = calculate_typing_time(
|
||||
input_string=message.processed_plain_text,
|
||||
|
|
@ -80,6 +109,18 @@ class UniversalMessageSender:
|
|||
if not sent_msg:
|
||||
return False
|
||||
|
||||
continue_flag, modified_message = await events_manager.handle_mai_events(
|
||||
EventType.AFTER_SEND, message=message, stream_id=chat_id
|
||||
)
|
||||
if not continue_flag:
|
||||
logger.info(f"[{chat_id}] 消息发送后续处理被插件取消: {str(message.message_segment)[:100]}...")
|
||||
return True
|
||||
if modified_message:
|
||||
if modified_message._modify_flags.modify_message_segments:
|
||||
message.message_segment = Seg(type="seglist", data=modified_message.message_segments)
|
||||
if modified_message._modify_flags.modify_plain_text:
|
||||
message.processed_plain_text = modified_message.plain_text
|
||||
|
||||
if storage_message:
|
||||
await self.storage.store_message(message, message.chat_stream)
|
||||
|
||||
|
|
|
|||
|
|
@ -67,6 +67,7 @@ class EventType(Enum):
|
|||
ON_PLAN = "on_plan"
|
||||
POST_LLM = "post_llm"
|
||||
AFTER_LLM = "after_llm"
|
||||
POST_SEND_PRE_PROCESS = "post_send_pre_process"
|
||||
POST_SEND = "post_send"
|
||||
AFTER_SEND = "after_send"
|
||||
UNKNOWN = "unknown" # 未知事件类型
|
||||
|
|
|
|||
Loading…
Reference in New Issue