refactor(schemas): 统一 message/notification 命名边界,旧名收敛至兼容映射表

- notification 域:渠道能力(MessageChannel→NotificationChannel、ChannelCapability* 迁入 notification.py)
- message 域:消息收发(Notification→Message、NotificationType→MessageType、CommingMessage→IncomingMessage、NotificationHistoryItem→MessageHistoryItem、NotificationClear*→MessageClear*)
- Agent 工具契约:send_notification_message→send_message、notification_callback→message_callback
- 源码不保留旧名物理别名,旧导入经 app/runtime/compat/manifest.py SYMBOL_ALIASES 惰性解析
- API 路径与持久化键冻结不变,前端零改动
- 新增兼容守护测试与 docs/rules/07 命名边界规范
This commit is contained in:
jxxghp
2026-08-16 19:32:20 +08:00
parent 98276a68a8
commit 240a4dffe6
96 changed files with 1975 additions and 1751 deletions
+27 -27
View File
@@ -14,10 +14,10 @@ from app.runtime.log import logger
from app.modules import _ModuleBase, _MessageBase
from app.schemas import (
CommandRegisterEventData,
CommingMessage,
MessageChannel,
IncomingMessage,
NotificationChannel,
MessageResponse,
Notification,
Message,
)
from app.schemas.types import ChainEventType, ModuleType
from app.adapters.network.http import RequestUtils
@@ -31,7 +31,7 @@ except Exception as err: # ImportError or other load issues
register_channel_admin_resolver(
MessageChannel.Discord,
NotificationChannel.Discord,
lambda config: resolve_config_principal_ids(config, "DISCORD_ADMINS"),
)
@@ -72,7 +72,7 @@ class DiscordModule(_ModuleBase, _MessageBase[Discord]):
super().init_service(
service_name=Discord.__name__.lower(), service_type=Discord
)
self._channel = MessageChannel.Discord
self._channel = NotificationChannel.Discord
@staticmethod
def get_name() -> str:
@@ -86,11 +86,11 @@ class DiscordModule(_ModuleBase, _MessageBase[Discord]):
return ModuleType.Notification
@staticmethod
def get_subtype() -> MessageChannel:
def get_subtype() -> NotificationChannel:
"""
获取模块子类型
"""
return MessageChannel.Discord
return NotificationChannel.Discord
@staticmethod
def get_priority() -> int:
@@ -170,7 +170,7 @@ class DiscordModule(_ModuleBase, _MessageBase[Discord]):
def message_parser(
self, source: str, body: Any, form: Any, args: Any
) -> Optional[CommingMessage]:
) -> Optional[IncomingMessage]:
"""
解析消息内容,返回字典,注意以下约定值:
userid: 用户ID
@@ -213,13 +213,13 @@ class DiscordModule(_ModuleBase, _MessageBase[Discord]):
f"收到来自 {client_config.name} 的 Discord 按钮回调:"
f"userid={userid}, username={username}, callback_data={callback_data}"
)
return CommingMessage(
channel=MessageChannel.Discord,
return IncomingMessage(
channel=NotificationChannel.Discord,
source=client_config.name,
userid=userid,
username=username,
is_channel_admin=matches_channel_admin(
MessageChannel.Discord, client_config.config, userid
NotificationChannel.Discord, client_config.config, userid
),
text=f"CALLBACK:{callback_data}",
is_callback=True,
@@ -247,13 +247,13 @@ class DiscordModule(_ModuleBase, _MessageBase[Discord]):
f"images={len(images) if images else 0}, audios={len(audio_refs) if audio_refs else 0}, "
f"files={len(files) if files else 0}"
)
return CommingMessage(
channel=MessageChannel.Discord,
return IncomingMessage(
channel=NotificationChannel.Discord,
source=client_config.name,
userid=userid,
username=username,
is_channel_admin=matches_channel_admin(
MessageChannel.Discord, client_config.config, userid
NotificationChannel.Discord, client_config.config, userid
),
text=text,
chat_id=str(chat_id) if chat_id else None,
@@ -266,7 +266,7 @@ class DiscordModule(_ModuleBase, _MessageBase[Discord]):
@staticmethod
def _extract_images(
msg_json: dict,
) -> Optional[List[CommingMessage.MessageImage]]:
) -> Optional[List[IncomingMessage.MessageImage]]:
"""
从Discord消息中提取图片URL
"""
@@ -286,7 +286,7 @@ class DiscordModule(_ModuleBase, _MessageBase[Discord]):
or filename.endswith(DiscordModule._IMAGE_SUFFIXES)
):
images.append(
CommingMessage.MessageImage(
IncomingMessage.MessageImage(
ref=url,
name=attachment.get("filename"),
mime_type=attachment.get("content_type"),
@@ -317,7 +317,7 @@ class DiscordModule(_ModuleBase, _MessageBase[Discord]):
@classmethod
def _extract_files(
cls, msg_json: dict
) -> Optional[List[CommingMessage.MessageAttachment]]:
) -> Optional[List[IncomingMessage.MessageAttachment]]:
"""
从 Discord 消息中提取非图片/非音频文件。
"""
@@ -343,7 +343,7 @@ class DiscordModule(_ModuleBase, _MessageBase[Discord]):
if is_image or is_audio:
continue
files.append(
CommingMessage.MessageAttachment(
IncomingMessage.MessageAttachment(
ref=f"discord://file/{quote(url, safe='')}",
name=attachment.get("filename"),
mime_type=attachment.get("content_type"),
@@ -366,7 +366,7 @@ class DiscordModule(_ModuleBase, _MessageBase[Discord]):
return resp.content
return None
def post_message(self, message: Notification, **kwargs) -> None:
def post_message(self, message: Message, **kwargs) -> None:
"""
发送通知消息
:param message: 消息通知对象
@@ -441,7 +441,7 @@ class DiscordModule(_ModuleBase, _MessageBase[Discord]):
)
def post_medias_message(
self, message: Notification, medias: List[MediaInfo]
self, message: Message, medias: List[MediaInfo]
) -> None:
"""
发送媒体信息选择列表
@@ -464,7 +464,7 @@ class DiscordModule(_ModuleBase, _MessageBase[Discord]):
)
def post_torrents_message(
self, message: Notification, torrents: List[Context]
self, message: Message, torrents: List[Context]
) -> None:
"""
发送种子信息选择列表
@@ -488,7 +488,7 @@ class DiscordModule(_ModuleBase, _MessageBase[Discord]):
def delete_message(
self,
channel: MessageChannel,
channel: NotificationChannel,
source: str,
message_id: str,
chat_id: Optional[str] = None,
@@ -516,7 +516,7 @@ class DiscordModule(_ModuleBase, _MessageBase[Discord]):
def edit_message(
self,
channel: MessageChannel,
channel: NotificationChannel,
source: str,
message_id: Union[str, int],
chat_id: Union[str, int],
@@ -606,7 +606,7 @@ class DiscordModule(_ModuleBase, _MessageBase[Discord]):
def mark_message_processing_started(
self,
channel: MessageChannel,
channel: NotificationChannel,
source: str,
userid: Optional[Union[str, int]] = None,
message_id: Optional[Union[str, int]] = None,
@@ -642,7 +642,7 @@ class DiscordModule(_ModuleBase, _MessageBase[Discord]):
def mark_message_processing_finished(
self,
channel: MessageChannel,
channel: NotificationChannel,
source: str,
userid: Optional[Union[str, int]] = None,
message_id: Optional[Union[str, int]] = None,
@@ -667,7 +667,7 @@ class DiscordModule(_ModuleBase, _MessageBase[Discord]):
chat_id=str(target_chat_id) if target_chat_id else None,
)
def send_direct_message(self, message: Notification) -> Optional[MessageResponse]:
def send_direct_message(self, message: Message) -> Optional[MessageResponse]:
"""
直接发送消息并返回消息ID等信息
:param message: 消息体
@@ -716,7 +716,7 @@ class DiscordModule(_ModuleBase, _MessageBase[Discord]):
return MessageResponse(
message_id=str(message_id) if message_id else None,
chat_id=str(chat_id) if chat_id else None,
channel=MessageChannel.Discord,
channel=NotificationChannel.Discord,
source=conf.name,
success=True,
)