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):
|
class ForwardMessages(BaseEventHandler):
|
||||||
"""
|
"""
|
||||||
把接收到的消息转发到指定聊天ID
|
把接收到的消息转发到指定聊天ID
|
||||||
|
|
||||||
此组件是HYBRID消息和FORWARD消息的使用示例。
|
此组件是HYBRID消息和FORWARD消息的使用示例。
|
||||||
每收到10条消息,就会以1%的概率使用HYBRID消息转发,否则使用FORWARD消息转发。
|
每收到10条消息,就会以1%的概率使用HYBRID消息转发,否则使用FORWARD消息转发。
|
||||||
"""
|
"""
|
||||||
|
|
@ -177,11 +177,23 @@ class ForwardMessages(BaseEventHandler):
|
||||||
if random.random() < 0.01:
|
if random.random() < 0.01:
|
||||||
success = await self.send_hybrid(stream_id, [(ReplyContentType.TEXT, msg) for msg in self.messages])
|
success = await self.send_hybrid(stream_id, [(ReplyContentType.TEXT, msg) for msg in self.messages])
|
||||||
else:
|
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:
|
if not success:
|
||||||
raise ValueError("转发消息失败")
|
raise ValueError("转发消息失败")
|
||||||
self.messages = []
|
self.messages = []
|
||||||
return True, True, None, None, None
|
return True, True, None, None, None
|
||||||
|
|
||||||
|
|
||||||
class RandomEmojis(BaseCommand):
|
class RandomEmojis(BaseCommand):
|
||||||
command_name = "random_emojis"
|
command_name = "random_emojis"
|
||||||
command_description = "发送多张随机表情包"
|
command_description = "发送多张随机表情包"
|
||||||
|
|
@ -203,6 +215,7 @@ class RandomEmojis(BaseCommand):
|
||||||
success = await self.send_forward([("0", "神秘用户", [(ReplyContentType.IMAGE, img)]) for img in images])
|
success = await self.send_forward([("0", "神秘用户", [(ReplyContentType.IMAGE, img)]) for img in images])
|
||||||
return (True, "已发送随机表情包", True) if success else (False, "发送随机表情包失败", False)
|
return (True, "已发送随机表情包", True) if success else (False, "发送随机表情包失败", False)
|
||||||
|
|
||||||
|
|
||||||
# ===== 插件注册 =====
|
# ===== 插件注册 =====
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import asyncio
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
from rich.traceback import install
|
from rich.traceback import install
|
||||||
|
from maim_message import Seg
|
||||||
|
|
||||||
from src.common.message.api import get_global_api
|
from src.common.message.api import get_global_api
|
||||||
from src.common.logger import get_logger
|
from src.common.logger import get_logger
|
||||||
|
|
@ -66,8 +67,36 @@ class UniversalMessageSender:
|
||||||
message.build_reply()
|
message.build_reply()
|
||||||
logger.debug(f"[{chat_id}] 选择回复引用消息: {message.processed_plain_text[:20]}...")
|
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()
|
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:
|
if typing:
|
||||||
typing_time = calculate_typing_time(
|
typing_time = calculate_typing_time(
|
||||||
input_string=message.processed_plain_text,
|
input_string=message.processed_plain_text,
|
||||||
|
|
@ -80,6 +109,18 @@ class UniversalMessageSender:
|
||||||
if not sent_msg:
|
if not sent_msg:
|
||||||
return False
|
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:
|
if storage_message:
|
||||||
await self.storage.store_message(message, message.chat_stream)
|
await self.storage.store_message(message, message.chat_stream)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -67,6 +67,7 @@ class EventType(Enum):
|
||||||
ON_PLAN = "on_plan"
|
ON_PLAN = "on_plan"
|
||||||
POST_LLM = "post_llm"
|
POST_LLM = "post_llm"
|
||||||
AFTER_LLM = "after_llm"
|
AFTER_LLM = "after_llm"
|
||||||
|
POST_SEND_PRE_PROCESS = "post_send_pre_process"
|
||||||
POST_SEND = "post_send"
|
POST_SEND = "post_send"
|
||||||
AFTER_SEND = "after_send"
|
AFTER_SEND = "after_send"
|
||||||
UNKNOWN = "unknown" # 未知事件类型
|
UNKNOWN = "unknown" # 未知事件类型
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue