diff --git a/astrbot/api/README.md b/astrbot/api/README.md new file mode 100644 index 000000000..c3caf5f06 --- /dev/null +++ b/astrbot/api/README.md @@ -0,0 +1,25 @@ +# Astrbot API + +提供了 AstrBot 所有的适合插件使用的 api + +## API 结构 + +astrbot.api: 包括了所有的导入 +astrbot.api.all(将弃用): 包括了所有的导入, 由 astrbot.api 代替 +astrbot.api.message_components(将弃用): 包括了所有消息组件, 由 astrbot.api.event.message.message_components 代替 + +astrbot.api.event: 包括了 AstrBot 事件以及相关类的导入 +astrbot.api.event.filter(将弃用): 包括了事件过滤器, 用于注册 Handler, 由 astrbot.api.star.register 统一注册来代替 +astrbot.api.event.message: 包括了 AstrBot 事件中, 所有有关消息的类 +astrbot.api.event.message.message_components: 包括了所有消息组件 + +astrbot.api.platform: 包括了所有平台相关的导入 + +astrbot.api.provider: 包括了所有大模型供应商相关的导入 + +astrbot.api.star: 包括了所有插件相关的导入 +astrbot.api.star.register: 包括了所有插件注册 Handler 相关的导入 + +astrbot.api.tool: 包括了所有大模型工具, agent 相关的导入 + +astrbot.api.util: 包括了所有的实用工具的导入 diff --git a/astrbot/api/__init__.py b/astrbot/api/__init__.py index 540171f1d..7156e31a8 100644 --- a/astrbot/api/__init__.py +++ b/astrbot/api/__init__.py @@ -1,9 +1,119 @@ +""" +astrbot.api +该模块提供最常用最核心的一些接口 +""" + +# astrbot.api from astrbot.core.config.astrbot_config import AstrBotConfig from astrbot import logger from astrbot.core import html_renderer from astrbot.core import sp -from astrbot.core.star.register import register_llm_tool as llm_tool -from astrbot.core.star.register import register_agent as agent + +# 原: astrbot.api.message_components (已弃用) +# 现: astrbot.api.event.message.MessageComponents +from .message_components import ( + ComponentType, # 枚举所有消息类型名 + BaseMessageComponent, # 消息类型基类, 如果你需要适配新的消息类型, 可以选择继承此类 + # 常用消息组件 + Plain, # 纯文本消息 + Face, # QQ表情 + Record, # 语音 + Video, # 视频 + At, # @ + AtAll, # @全体成员 + Node, # 转发节点 + Nodes, # 多个转发节点 + Poke, # QQ 戳一戳 + Image, # 图片 + Reply, # 回复消息 + Forward, # 转发消息 + File, # 文件 + # 其他消息组件 + Music, # 音乐分享 + Json, # Json 消息 + TTS, # TTS + Unknown, # 未知类型 + # 特定平台消息组件 + ## QQ + Dice, # 骰子 + Contact, # 推荐好友/群 + RPS, # 猜拳魔法表情 + ## 微信 + WechatEmoji, # 微信表情 + # 仅接收 + Share, # 链接分享 + Shake, # 私聊窗口抖动 +) + +# astrbot.api.event +from astrbot.core.platform import AstrMessageEvent +from astrbot.core.message.message_event_result import ( + MessageEventResult, + MessageChain, + CommandResult, + EventResultType, + ResultContentType, +) + +# astrbot.api.platform +from astrbot.core.platform import ( + AstrBotMessage, # AstrBot 消息, 其实应当出现在事件 api 下, 因为它是事件的一部分, 此处保留向后兼容 + MessageMember, # AstrBot 消息成员, 其实应当出现在事件 api 下, 此处保留向后兼容 + MessageType, # AstrBot 消息类型, 其实应当出现在事件 api 下, 此处保留向后兼容 + Platform, + PlatformMetadata, + Group, # 一个群聊 +) +from astrbot.core.platform.register import register_platform_adapter + +# astrbot.api.provider +from astrbot.core.provider import Provider, STTProvider, Personality +from astrbot.core.provider.entities import ( + ProviderRequest, + ProviderType, + ProviderMetaData, + LLMResponse, +) + +# astrbot.api.star +from astrbot.core.star.register import ( + register_star as register, # 注册插件(Star) +) +from astrbot.core.star import Context, Star, StarTools +from astrbot.core.star.config import load_config, put_config, update_config # 已弃用 + +# 原: astrbot.api.event.filter (已弃用) +# 现: astrbot.api.star.register +from astrbot.core.star.register import ( + register_command as command, # 注册命令 + register_command_group as command_group, # 注册命令组 + register_event_message_type as event_message_type, # 注册监听器: 事件消息类型 + register_regex as regex, # 注册监听器: 正则表达式 + register_platform_adapter_type as platform_adapter_type, # 注册监听器: 平台适配器类型 + register_permission_type as permission_type, # 注册监听器: 权限类型 + register_custom_filter as custom_filter, # 注册监听器: 自定义过滤器 + register_on_astrbot_loaded as on_astrbot_loaded, # 注册触发器: AstrBot 加载完成时 + register_on_llm_request as on_llm_request, # 注册触发器: LLM 请求时 + register_on_llm_response as on_llm_response, # 注册触发器: LLM 响应时 + register_on_decorating_result as on_decorating_result, # 注册触发器: 装饰结果时 + register_after_message_sent as after_message_sent, # 注册触发器: 消息发送后 + register_llm_tool as llm_tool, # 注册 LLM 工具 + register_agent as agent, # 注册 agent +) + +# 监听器所用到的过滤器和类型 +from astrbot.core.star.filter.event_message_type import ( + EventMessageTypeFilter, + EventMessageType, +) +from astrbot.core.star.filter.platform_adapter_type import ( + PlatformAdapterTypeFilter, + PlatformAdapterType, +) +from astrbot.core.star.filter.permission import PermissionTypeFilter, PermissionType +from astrbot.core.star.filter.custom_filter import CustomFilter + +# agent from astrbot.core.agent.tool import ToolSet, FunctionTool from astrbot.core.agent.tool_executor import BaseFunctionToolExecutor @@ -12,8 +122,79 @@ "logger", "html_renderer", "llm_tool", - "agent", "sp", + "ComponentType", + "BaseMessageComponent", + "Plain", + "Face", + "Record", + "Video", + "At", + "AtAll", + "Node", + "Nodes", + "Poke", + "Image", + "Reply", + "Forward", + "File", + "Music", + "Json", + "TTS", + "Unknown", + "Dice", + "Contact", + "RPS", + "WechatEmoji", + "Share", + "Shake", + "AstrMessageEvent", + "MessageEventResult", + "MessageChain", + "CommandResult", + "EventResultType", + "ResultContentType", + "AstrBotMessage", + "MessageMember", + "MessageType", + "Platform", + "PlatformMetadata", + "Group", + "register_platform_adapter", + "Provider", + "STTProvider", + "Personality", + "ProviderRequest", + "ProviderType", + "ProviderMetaData", + "LLMResponse", + "register", + "Context", + "Star", + "StarTools", + "load_config", + "put_config", + "update_config", + "command", + "command_group", + "event_message_type", + "regex", + "platform_adapter_type", + "permission_type", + "custom_filter", + "on_astrbot_loaded", + "on_llm_request", + "on_llm_response", + "on_decorating_result", + "after_message_sent", + "EventMessageTypeFilter", + "EventMessageType", + "PlatformAdapterTypeFilter", + "PlatformAdapterType", + "PermissionTypeFilter", + "PermissionType", + "CustomFilter", + "agent", "ToolSet", "FunctionTool", "BaseFunctionToolExecutor", diff --git a/astrbot/api/all.py b/astrbot/api/all.py index 2463dbc2b..6e0b4ffef 100644 --- a/astrbot/api/all.py +++ b/astrbot/api/all.py @@ -1,25 +1,107 @@ +""" +astrbot.api.all +该模块提供AstrBot全部的api接口, 如果不清楚从哪里导入, 可以从这个模块导入 +⚠️ 标记为已弃用, 不会更新, 请使用 astrbot.api 导入 +""" + +# astrbot.api from astrbot.core.config.astrbot_config import AstrBotConfig from astrbot import logger from astrbot.core import html_renderer -from astrbot.core.star.register import register_llm_tool as llm_tool +from astrbot.core import sp + +# 原: astrbot.api.message_components (已弃用) +# 现: astrbot.api.event.message.MessageComponents +from .message_components import ( + ComponentType, # 枚举所有消息类型名 + BaseMessageComponent, # 消息类型基类, 如果你需要适配新的消息类型, 可以选择继承此类 + # 常用消息组件 + Plain, # 纯文本消息 + Face, # QQ表情 + Record, # 语音 + Video, # 视频 + At, # @ + AtAll, # @全体成员 + Node, # 转发节点 + Nodes, # 多个转发节点 + Poke, # QQ 戳一戳 + Image, # 图片 + Reply, # 回复消息 + Forward, # 转发消息 + File, # 文件 + # 其他消息组件 + Music, # 音乐分享 + Json, # Json 消息 + TTS, # TTS + Unknown, # 未知类型 + # 特定平台消息组件 + ## QQ + Dice, # 骰子 + Contact, # 推荐好友/群 + RPS, # 猜拳魔法表情 + ## 微信 + WechatEmoji, # 微信表情 + # 仅接收 + Share, # 链接分享 + Shake, # 私聊窗口抖动 +) -# event +# astrbot.api.event +from astrbot.core.platform import AstrMessageEvent from astrbot.core.message.message_event_result import ( MessageEventResult, MessageChain, CommandResult, EventResultType, + ResultContentType, +) + +# astrbot.api.platform +from astrbot.core.platform import ( + AstrBotMessage, # AstrBot 消息, 其实应当出现在事件 api 下, 因为它是事件的一部分, 此处保留向后兼容 + MessageMember, # AstrBot 消息成员, 其实应当出现在事件 api 下, 此处保留向后兼容 + MessageType, # AstrBot 消息类型, 其实应当出现在事件 api 下, 此处保留向后兼容 + Platform, + PlatformMetadata, + Group, # 一个群聊 +) +from astrbot.core.platform.register import register_platform_adapter + +# astrbot.api.provider +from astrbot.core.provider import Provider, STTProvider, Personality +from astrbot.core.provider.entities import ( + ProviderRequest, + ProviderType, + ProviderMetaData, + LLMResponse, ) -from astrbot.core.platform import AstrMessageEvent -# star register +# astrbot.api.star from astrbot.core.star.register import ( - register_command as command, - register_command_group as command_group, - register_event_message_type as event_message_type, - register_regex as regex, - register_platform_adapter_type as platform_adapter_type, + register_star as register, # 注册插件(Star) ) +from astrbot.core.star import Context, Star, StarTools +from astrbot.core.star.config import load_config, put_config, update_config # 已弃用 + +# 原: astrbot.api.event.filter (已弃用) +# 现: astrbot.api.star.register +from astrbot.core.star.register import ( + register_command as command, # 注册命令 + register_command_group as command_group, # 注册命令组 + register_event_message_type as event_message_type, # 注册监听器: 事件消息类型 + register_regex as regex, # 注册监听器: 正则表达式 + register_platform_adapter_type as platform_adapter_type, # 注册监听器: 平台适配器类型 + register_permission_type as permission_type, # 注册监听器: 权限类型 + register_custom_filter as custom_filter, # 注册监听器: 自定义过滤器 + register_on_astrbot_loaded as on_astrbot_loaded, # 注册触发器: AstrBot 加载完成时 + register_on_llm_request as on_llm_request, # 注册触发器: LLM 请求时 + register_on_llm_response as on_llm_response, # 注册触发器: LLM 响应时 + register_on_decorating_result as on_decorating_result, # 注册触发器: 装饰结果时 + register_after_message_sent as after_message_sent, # 注册触发器: 消息发送后 + register_llm_tool as llm_tool, # 注册 LLM 工具 +) + +# 监听器所用到的过滤器和类型 from astrbot.core.star.filter.event_message_type import ( EventMessageTypeFilter, EventMessageType, @@ -28,26 +110,5 @@ PlatformAdapterTypeFilter, PlatformAdapterType, ) -from astrbot.core.star.register import ( - register_star as register, # 注册插件(Star) -) -from astrbot.core.star import Context, Star -from astrbot.core.star.config import * - - -# provider -from astrbot.core.provider import Provider, Personality, ProviderMetaData - -# platform -from astrbot.core.platform import ( - AstrMessageEvent, - Platform, - AstrBotMessage, - MessageMember, - MessageType, - PlatformMetadata, -) - -from astrbot.core.platform.register import register_platform_adapter - -from .message_components import * \ No newline at end of file +from astrbot.core.star.filter.permission import PermissionTypeFilter, PermissionType +from astrbot.core.star.filter.custom_filter import CustomFilter diff --git a/astrbot/api/event/__init__.py b/astrbot/api/event/__init__.py index 1f2fce640..7f250771e 100644 --- a/astrbot/api/event/__init__.py +++ b/astrbot/api/event/__init__.py @@ -1,3 +1,12 @@ +""" +astrbot.api.event +该模块包含 AstrBot 所有事件相关模块 +""" + +# AstrBot 事件, event api的所有者 +from astrbot.core.platform import AstrMessageEvent + +# AstrBot 事件相关组件 from astrbot.core.message.message_event_result import ( MessageEventResult, MessageChain, @@ -6,7 +15,8 @@ ResultContentType, ) -from astrbot.core.platform import AstrMessageEvent +from astrbot.core.platform.astr_message_event import MessageSesion as MessageSession + __all__ = [ "MessageEventResult", @@ -14,5 +24,6 @@ "CommandResult", "EventResultType", "AstrMessageEvent", + "MessageSession", "ResultContentType", ] diff --git a/astrbot/api/event/filter/__init__.py b/astrbot/api/event/filter/__init__.py index dd737e3ff..f3719538e 100644 --- a/astrbot/api/event/filter/__init__.py +++ b/astrbot/api/event/filter/__init__.py @@ -1,3 +1,9 @@ +""" +astrbot.api.event.filter +该模块包括所有事件过滤器相关模块, 用于过滤事件消息 +⚠️ 标记为已弃用, 不会更新, 请使用 astrbot.api.star.register 导入 +""" + from astrbot.core.star.register import ( register_command as command, register_command_group as command_group, diff --git a/astrbot/api/event/message/__init__.py b/astrbot/api/event/message/__init__.py new file mode 100644 index 000000000..c561d2b5f --- /dev/null +++ b/astrbot/api/event/message/__init__.py @@ -0,0 +1,30 @@ +""" +astrbot.api.event.message +此模块包含事件中的消息相关模块 +""" + +from . import message_components as MessageComponents +from astrbot.core.platform import ( + AstrBotMessage, # AstrBot 的消息对象, 包括id, 消息链等 + MessageMember, # 消息成员, 包括发送者id和昵称 + MessageType, # 消息类型(私聊/群聊/其他) +) + +# 消息链与消息链的结果 +from astrbot.core.message.message_event_result import ( + MessageEventResult, # 消息中的所有组件和事件处理的结果 + MessageChain, # 消息链 + EventResultType, # 事件处理结果类型(继续/终止) + ResultContentType, # 事件结果内容类型(LLM/流式/普通) +) + +__all__ = [ + "AstrBotMessage", + "MessageMember", + "MessageType", + "MessageEventResult", + "MessageChain", + "EventResultType", + "ResultContentType", + "MessageComponents", +] diff --git a/astrbot/api/event/message/message_components.py b/astrbot/api/event/message/message_components.py new file mode 100644 index 000000000..9f08d600a --- /dev/null +++ b/astrbot/api/event/message/message_components.py @@ -0,0 +1,38 @@ +""" +astrbot.api.event.message.message_components +该模块提供一个事件中的消息的构成组件, 一个事件拥有一个消息链, 消息链是一个列表, 其中的元素就是这些消息组件 +""" + +from astrbot.core.message.components import ( + ComponentType, # 枚举所有消息类型名 + BaseMessageComponent, # 消息类型基类, 如果你需要适配新的消息类型, 可以选择继承此类 + # 常用消息组件 + Plain, # 纯文本消息 + Face, # QQ表情 + Record, # 语音 + Video, # 视频 + At, # @ + AtAll, # @全体成员 + Node, # 转发节点 + Nodes, # 多个转发节点 + Poke, # QQ 戳一戳 + Image, # 图片 + Reply, # 回复消息 + Forward, # 转发消息 + File, # 文件 + # 其他消息组件 + Music, # 音乐分享 + Json, # Json 消息 + TTS, # TTS + Unknown, # 未知类型 + # 特定平台消息组件 + ## QQ + Dice, # 骰子 + Contact, # 推荐好友/群 + RPS, # 猜拳魔法表情 + ## 微信 + WechatEmoji, # 微信表情 + # 仅接收 + Share, # 链接分享 + Shake, # 私聊窗口抖动 +) diff --git a/astrbot/api/message_components.py b/astrbot/api/message_components.py index ff9add858..9392b0422 100644 --- a/astrbot/api/message_components.py +++ b/astrbot/api/message_components.py @@ -1 +1,39 @@ -from astrbot.core.message.components import * +""" +astrbot.api.message_components +该模块提供一个事件中的消息的构成组件, 一个事件拥有一个消息链, 消息链是一个列表, 其中的元素就是这些消息组件 +⚠️ 标记为已弃用, 不会更新, 请使用 astrbot.api.event.message.message_components 导入 +""" + +from astrbot.core.message.components import ( + ComponentType, # 枚举所有消息类型名 + BaseMessageComponent, # 消息类型基类, 如果你需要适配新的消息类型, 可以选择继承此类 + # 常用消息组件 + Plain, # 纯文本消息 + Face, # QQ表情 + Record, # 语音 + Video, # 视频 + At, # @ + AtAll, # @全体成员 + Node, # 转发节点 + Nodes, # 多个转发节点 + Poke, # QQ 戳一戳 + Image, # 图片 + Reply, # 回复消息 + Forward, # 转发消息 + File, # 文件 + # 其他消息组件 + Music, # 音乐分享 + Json, # Json 消息 + TTS, # TTS + Unknown, # 未知类型 + # 特定平台消息组件 + ## QQ + Dice, # 骰子 + Contact, # 推荐好友/群 + RPS, # 猜拳魔法表情 + ## 微信 + WechatEmoji, # 微信表情 + # 仅接收 + Share, # 链接分享 + Shake, # 私聊窗口抖动 +) diff --git a/astrbot/api/platform/__init__.py b/astrbot/api/platform/__init__.py index 5a98c5903..da46339ca 100644 --- a/astrbot/api/platform/__init__.py +++ b/astrbot/api/platform/__init__.py @@ -1,15 +1,55 @@ +""" +astrbot.api.platform +该模块包括了 AstrBot 有关不同平台适配器的相关导入 +""" + from astrbot.core.platform import ( - AstrMessageEvent, + AstrMessageEvent, # AstrBot 事件, 其实应当出现在事件 api 下, 此处保留向后兼容 + AstrBotMessage, # AstrBot 消息, 其实应当出现在事件 api 下, 因为它是事件的一部分, 此处保留向后兼容 + MessageMember, # AstrBot 消息成员, 其实应当出现在事件 api 下, 此处保留向后兼容 + MessageType, # AstrBot 消息类型, 其实应当出现在事件 api 下, 此处保留向后兼容 Platform, - AstrBotMessage, - MessageMember, - MessageType, PlatformMetadata, - Group, + Group, # 一个群聊 ) +# 注册平台使用的装饰器 from astrbot.core.platform.register import register_platform_adapter -from astrbot.core.message.components import * + +# 消息组件, 其实应当出现在事件 api 下, 因为消息是事件的一部分, 此处保留向后兼容 +from astrbot.core.message.components import ( + ComponentType, # 枚举所有消息类型名 + BaseMessageComponent, # 消息类型基类, 如果你需要适配新的消息类型, 可以选择继承此类 + # 常用消息组件 + Plain, # 纯文本消息 + Face, # QQ表情 + Record, # 语音 + Video, # 视频 + At, # @ + AtAll, # @全体成员 + Node, # 转发节点 + Nodes, # 多个转发节点 + Poke, # QQ 戳一戳 + Image, # 图片 + Reply, # 回复消息 + Forward, # 转发消息 + File, # 文件 + # 其他消息组件 + Music, # 音乐分享 + Json, # Json 消息 + TTS, # TTS + Unknown, # 未知类型 + # 特定平台消息组件 + ## QQ + Dice, # 骰子 + Contact, # 推荐好友/群 + RPS, # 猜拳魔法表情 + ## 微信 + WechatEmoji, # 微信表情 + # 仅接收 + Share, # 链接分享 + Shake, # 私聊窗口抖动 +) __all__ = [ "AstrMessageEvent", diff --git a/astrbot/api/platform/aiocqhttp/__init__.py b/astrbot/api/platform/aiocqhttp/__init__.py new file mode 100644 index 000000000..37169ecc3 --- /dev/null +++ b/astrbot/api/platform/aiocqhttp/__init__.py @@ -0,0 +1,16 @@ +""" +astrbot.api.platform.aiocqhttp +该模块包含了 AstrBot 有关 aiocqhttp 平台适配器的相关 +""" + +from astrbot.core.platform.sources.aiocqhttp.aiocqhttp_message_event import ( + AiocqhttpMessageEvent, +) +from astrbot.core.platform.sources.aiocqhttp.aiocqhttp_platform_adapter import ( + AiocqhttpAdapter, +) + +__all__ = [ + "AiocqhttpAdapter", + "AiocqhttpMessageEvent", +] diff --git a/astrbot/api/platform/dingtalk/__init__.py b/astrbot/api/platform/dingtalk/__init__.py new file mode 100644 index 000000000..a735ec051 --- /dev/null +++ b/astrbot/api/platform/dingtalk/__init__.py @@ -0,0 +1,15 @@ +""" +astrbot.api.platform.dingtalk +该模块包含了 AstrBot 有关 钉钉 平台适配器的相关 +""" + +from astrbot.core.platform.sources.dingtalk.dingtalk_event import DingtalkMessageEvent + +from astrbot.core.platform.sources.dingtalk.dingtalk_adapter import ( + DingtalkPlatformAdapter as DingtalkAdapter, +) + +__all__ = [ + "DingtalkAdapter", + "DingtalkMessageEvent", +] diff --git a/astrbot/api/platform/discord/__init__.py b/astrbot/api/platform/discord/__init__.py new file mode 100644 index 000000000..02307c933 --- /dev/null +++ b/astrbot/api/platform/discord/__init__.py @@ -0,0 +1,28 @@ +""" +astrbot.api.platform.discord +该模块包括了 AstrBot 有关 Discord 平台适配器的相关导入 +""" + +from astrbot.core.platform.sources.discord.components import ( + DiscordEmbed, # Discord Embed消息组件 + DiscordButton, # Discord 引用组件 + DiscordReference, # Discord 视图组件 + DiscordView, # Discord 视图组件 +) + +from astrbot.core.platform.sources.discord.discord_platform_adapter import ( + DiscordPlatformAdapter as DiscordAdapter, +) + +from astrbot.core.platform.sources.discord.discord_platform_event import ( + DiscordPlatformEvent as DiscordMessageEvent, +) + +__all__ = [ + "DiscordAdapter", + "DiscordMessageEvent", + "DiscordEmbed", + "DiscordButton", + "DiscordReference", + "DiscordView", +] diff --git a/astrbot/api/platform/lark/__init__.py b/astrbot/api/platform/lark/__init__.py new file mode 100644 index 000000000..198b988a8 --- /dev/null +++ b/astrbot/api/platform/lark/__init__.py @@ -0,0 +1,15 @@ +""" +astrbot.api.platform.lark +该模块包括了 AstrBot 飞书平台适配器的相关导入 +""" + +from astrbot.core.platform.sources.lark.lark_adapter import ( + LarkPlatformAdapter as LarkAdapter, +) + +from astrbot.core.platform.sources.lark.lark_event import LarkMessageEvent + +__all__ = [ + "LarkAdapter", + "LarkMessageEvent", +] diff --git a/astrbot/api/platform/qqofficial/__init__.py b/astrbot/api/platform/qqofficial/__init__.py new file mode 100644 index 000000000..e93657266 --- /dev/null +++ b/astrbot/api/platform/qqofficial/__init__.py @@ -0,0 +1,19 @@ +""" +astrbot.api.platform.qqofficial +该模块包含了 AstrBot 对 QQ 官方 平台的适配器 +""" + +from astrbot.core.platform.sources.qqofficial.qqofficial_message_event import ( + QQOfficialMessageEvent, +) + +from astrbot.core.platform.sources.qqofficial.qqofficial_platform_adapter import ( + botClient, + QQOfficialPlatformAdapter as QQOfficialAdapter, +) + +__all__ = [ + "QQOfficialAdapter", + "botClient", + "QQOfficialMessageEvent", +] diff --git a/astrbot/api/platform/qqofficial_webhook/__init__.py b/astrbot/api/platform/qqofficial_webhook/__init__.py new file mode 100644 index 000000000..8a3282fff --- /dev/null +++ b/astrbot/api/platform/qqofficial_webhook/__init__.py @@ -0,0 +1,24 @@ +""" +astrbot.api.platform.qqofficial_webhook +该模块包括了 AstrBot 有关 QQ 机器人官方框架 Webhook 适配器的相关导入 +""" + +from astrbot.core.platform.sources.qqofficial_webhook.qo_webhook_adapter import ( + botClient, + QQOfficialWebhookPlatformAdapter as QQOfficialWebhookAdapter, +) + +from astrbot.core.platform.sources.qqofficial_webhook.qo_webhook_event import ( + QQOfficialWebhookMessageEvent, +) + +from astrbot.core.platform.sources.qqofficial_webhook.qo_webhook_server import ( + QQOfficialWebhook, +) + +__all__ = [ + "QQOfficialWebhookAdapter", + "botClient", + "QQOfficialWebhook", + "QQOfficialWebhookMessageEvent", +] diff --git a/astrbot/api/platform/slack/__init__.py b/astrbot/api/platform/slack/__init__.py new file mode 100644 index 000000000..254e60f56 --- /dev/null +++ b/astrbot/api/platform/slack/__init__.py @@ -0,0 +1,23 @@ +""" +astrbot.api.platform.slack +该模块包含了 AstrBot 对 Slack 平台的适配器 +""" + +from astrbot.core.platform.sources.slack.slack_event import ( + SlackMessageEvent, +) + +from astrbot.core.platform.sources.slack.slack_adapter import ( + SlackAdapter, +) +from astrbot.core.platform.sources.slack.client import ( + SlackSocketClient, + SlackWebhookClient, +) + +__all__ = [ + "SlackAdapter", + "SlackSocketClient", + "SlackMessageEvent", + "SlackWebhookClient", +] diff --git a/astrbot/api/platform/telegram/__init__.py b/astrbot/api/platform/telegram/__init__.py new file mode 100644 index 000000000..83f372748 --- /dev/null +++ b/astrbot/api/platform/telegram/__init__.py @@ -0,0 +1,17 @@ +""" +astrbot.api.platform.telegram +该模块包含了 AstrBot 对 Telegram 平台的适配器 +""" + +from astrbot.core.platform.sources.telegram.tg_event import ( + TelegramPlatformEvent as TelegramMessageEvent, +) + +from astrbot.core.platform.sources.telegram.tg_adapter import ( + TelegramPlatformAdapter as TelegramAdapter, +) + +__all__ = [ + "TelegramAdapter", + "TelegramMessageEvent", +] diff --git a/astrbot/api/platform/webchat/__init__.py b/astrbot/api/platform/webchat/__init__.py new file mode 100644 index 000000000..5ae00589f --- /dev/null +++ b/astrbot/api/platform/webchat/__init__.py @@ -0,0 +1,20 @@ +""" +astrbot.api.platform.webchat +该模块包含了 AstrBot 对 WebChat 平台的适配器 +""" + +from astrbot.core.platform.sources.webchat.webchat_adapter import ( + WebChatAdapter, + QueueListener, +) + +from astrbot.core.platform.sources.webchat.webchat_event import WebChatMessageEvent + +from astrbot.core.platform.sources.webchat.webchat_queue_mgr import WebChatQueueMgr + +__all__ = [ + "WebChatAdapter", + "WebChatMessageEvent", + "WebChatQueueMgr", + "QueueListener", +] diff --git a/astrbot/api/platform/wechatpadpro/__init__.py b/astrbot/api/platform/wechatpadpro/__init__.py new file mode 100644 index 000000000..ff27bde69 --- /dev/null +++ b/astrbot/api/platform/wechatpadpro/__init__.py @@ -0,0 +1,20 @@ +""" +astrbot.api.platform.wechatpadpro +该模块包含了 AstrBot 对 gewechat 的适配器 +""" + +from astrbot.core.platform.sources.wechatpadpro.wechatpadpro_message_event import ( + WeChatPadProMessageEvent, +) +from astrbot.core.platform.sources.wechatpadpro.wechatpadpro_adapter import ( + WeChatPadProAdapter, +) +from astrbot.core.platform.sources.wechatpadpro.xml_data_parser import ( + GeweDataParser, +) + +__all__ = [ + "WeChatPadProAdapter", + "WeChatPadProMessageEvent", + "GeweDataParser", +] diff --git a/astrbot/api/platform/wecom/__init__.py b/astrbot/api/platform/wecom/__init__.py new file mode 100644 index 000000000..492715bbd --- /dev/null +++ b/astrbot/api/platform/wecom/__init__.py @@ -0,0 +1,25 @@ +""" +astrbot.api.platform.wecom +该模块包含了 AstrBot 对微信客服平台的适配器 +""" + +from astrbot.core.platform.sources.wecom.wecom_adapter import ( + WecomPlatformAdapter, + WecomServer, +) + +from astrbot.core.platform.sources.wecom.wecom_event import ( + WecomPlatformEvent as WecomMessageEvent, +) + +from astrbot.core.platform.sources.wecom.wecom_kf_message import WeChatKFMessage + +from astrbot.core.platform.sources.wecom.wecom_kf import WeChatKF + +__all__ = [ + "WecomPlatformAdapter", + "WecomMessageEvent", + "WeChatKFMessage", + "WeChatKF", + "WecomServer", +] diff --git a/astrbot/api/platform/weixin_official_account/__init__.py b/astrbot/api/platform/weixin_official_account/__init__.py new file mode 100644 index 000000000..771db7d2e --- /dev/null +++ b/astrbot/api/platform/weixin_official_account/__init__.py @@ -0,0 +1,18 @@ +""" +astrbot.api.platform.weixin_official_account +该模块包含了 AstrBot 对 微信公众号 平台的适配器 +""" + +from astrbot.core.platform.sources.weixin_official_account.weixin_offacc_adapter import ( + WeixinOfficialAccountPlatformAdapter as WeixinOfficialAccountAdapter, + WecomServer, +) +from astrbot.core.platform.sources.weixin_official_account.weixin_offacc_event import ( + WeixinOfficialAccountPlatformEvent, +) + +__all__ = [ + "WeixinOfficialAccountAdapter", + "WecomServer", + "WeixinOfficialAccountPlatformEvent", +] diff --git a/astrbot/api/provider/__init__.py b/astrbot/api/provider/__init__.py index 9b1ade50a..a66266826 100644 --- a/astrbot/api/provider/__init__.py +++ b/astrbot/api/provider/__init__.py @@ -1,17 +1,125 @@ -from astrbot.core.provider import Provider, STTProvider, Personality +""" +astrbot.api.provider +该模块包含了 AstrBot 有关大模型供应商的所有模块 +""" + +from astrbot.core.provider import ( + Provider, + STTProvider, + Personality, +) +from astrbot.core.provider.provider import TTSProvider, EmbeddingProvider from astrbot.core.provider.entities import ( - ProviderRequest, - ProviderType, - ProviderMetaData, - LLMResponse, + ProviderRequest, # 供应商请求 + ProviderType, # 供应商类型 + ProviderMetaData, # 供应商元数据 + LLMResponse, # 大模型响应 + ToolCallsResult, # 工具调用结果 + AssistantMessageSegment, # role 为 assistant 的消息片段 + ToolCallMessageSegment, # role 为 tool_call 的消息片段 ) +from astrbot.core.provider.manager import ProviderManager + +from astrbot.core.provider.sources.anthropic_source import ProviderAnthropic # Claude +from astrbot.core.provider.sources.azure_tts_source import ( + OTTSProvider, + AzureNativeProvider, + AzureTTSProvider, +) # Azure TTS (包括微软官方和OTTS) +from astrbot.core.provider.sources.dashscope_source import ( + ProviderDashscope, +) # Dashscope (包括文本生成和嵌入) +from astrbot.core.provider.sources.dashscope_tts import ( + ProviderDashscopeTTSAPI, +) # Dashscope TTS +from astrbot.core.provider.sources.dify_source import ProviderDify # Dify + +# from astrbot.core.provider.sources.edge_tts_source import ProviderEdgeTTS # Edge TTS +from astrbot.core.provider.sources.fishaudio_tts_api_source import ( + ProviderFishAudioTTSAPI, + ServeTTSRequest, + ServeReferenceAudio, +) # FishAudio TTS +from astrbot.core.provider.sources.gemini_embedding_source import ( + GeminiEmbeddingProvider, +) # Gemini 嵌入 +from astrbot.core.provider.sources.gemini_source import ( + ProviderGoogleGenAI, +) # Google Gemini +from astrbot.core.provider.sources.gemini_tts_source import ( + ProviderGeminiTTSAPI, +) # Gemini TTS +from astrbot.core.provider.sources.gsv_selfhosted_source import ( + ProviderGSVTTS, +) # GSV 自托管 +from astrbot.core.provider.sources.gsvi_tts_source import ProviderGSVITTS # GSVI TTS +from astrbot.core.provider.sources.minimax_tts_api_source import ( + ProviderMiniMaxTTSAPI, +) # MiniMax TTS +from astrbot.core.provider.sources.openai_embedding_source import ( + OpenAIEmbeddingProvider, +) # OpenAI 嵌入 +from astrbot.core.provider.sources.openai_source import ( + ProviderOpenAIOfficial, +) # OpenAI 官方 (包括 ChatGPT 和 GPT-4) +from astrbot.core.provider.sources.openai_tts_api_source import ( + ProviderOpenAITTSAPI, +) # OpenAI TTS API (包括 Whisper 和 TTS) + +# from astrbot.core.provider.sources.sensevoice_selfhosted_source import ( +# ProviderSenseVoiceSTTSelfHost, +# ) # SenseVoice 自托管 STT +from astrbot.core.provider.sources.volcengine_tts import ( + ProviderVolcengineTTS, +) # 火山引擎 TTS +from astrbot.core.provider.sources.whisper_api_source import ( + ProviderOpenAIWhisperAPI, +) # OpenAI Whisper API + +# from astrbot.core.provider.sources.whisper_selfhosted_source import ( +# ProviderOpenAIWhisperSelfHost, +# ) # OpenAI Whisper 自托管 +from astrbot.core.provider.sources.zhipu_source import ( + ProviderZhipu, +) # 智谱 (包括 ChatGLM 和 MOSS) __all__ = [ "Provider", "STTProvider", + "TTSProvider", + "EmbeddingProvider", "Personality", "ProviderRequest", "ProviderType", "ProviderMetaData", "LLMResponse", + "ToolCallsResult", + "AssistantMessageSegment", + "ToolCallMessageSegment", + "ProviderManager", + "ProviderAnthropic", + "OTTSProvider", + "AzureNativeProvider", + "AzureTTSProvider", + "ProviderDashscope", + "ProviderDashscopeTTSAPI", + "ProviderDify", + "ProviderEdgeTTS", + "ProviderFishAudioTTSAPI", + "ServeTTSRequest", + "ServeReferenceAudio", + "GeminiEmbeddingProvider", + "ProviderGoogleGenAI", + "ProviderGeminiTTSAPI", + "ProviderGSVTTS", + "ProviderGSVITTS", + "ProviderMiniMaxTTSAPI", + "OpenAIEmbeddingProvider", + "ProviderOpenAIOfficial", + "ProviderOpenAITTSAPI", + "ProviderSenseVoiceSTTSelfHost", + "ProviderVolcengineTTS", + "ProviderOpenAIWhisperAPI", + "ProviderOpenAIWhisperSelfHost", + "ProviderZhipu", ] diff --git a/astrbot/api/star/__init__.py b/astrbot/api/star/__init__.py index 1b33923fe..cfc5ec3d1 100644 --- a/astrbot/api/star/__init__.py +++ b/astrbot/api/star/__init__.py @@ -1,8 +1,13 @@ +""" +astrbot.api.star +该模块包括所有插件注册相关模块以及插件使用的数据 +""" + from astrbot.core.star.register import ( register_star as register, # 注册插件(Star) ) from astrbot.core.star import Context, Star, StarTools -from astrbot.core.star.config import * +from astrbot.core.star.config import load_config, put_config, update_config # 已弃用 __all__ = ["register", "Context", "Star", "StarTools"] diff --git a/astrbot/api/star/register/__init__.py b/astrbot/api/star/register/__init__.py new file mode 100644 index 000000000..bc1e1b505 --- /dev/null +++ b/astrbot/api/star/register/__init__.py @@ -0,0 +1,71 @@ +""" +astrbot.api.star.register +该模块包括所有插件注册相关模块, 注册各种 Handler 等等 +""" + +# 注册插件 +from astrbot.core.star.register import ( + register_star as register, +) + +# 注册 Handler +""" +注解: +- 监听器: 监听的对象是事件, 根据选择的特定类型, 将事件交由该 Handler 处理 +- 触发器: 在消息处理流水线中的某个时机触发, 此时流水线将执行注册的 Handler +""" +from astrbot.core.star.register import ( + register_command as command, # 注册命令 + register_command_group as command_group, # 注册命令组 + register_event_message_type as event_message_type, # 注册监听器: 事件消息类型 + register_regex as regex, # 注册监听器: 正则表达式 + register_platform_adapter_type as platform_adapter_type, # 注册监听器: 平台适配器类型 + register_permission_type as permission_type, # 注册监听器: 权限类型 + register_custom_filter as custom_filter, # 注册监听器: 自定义过滤器 + register_on_astrbot_loaded as on_astrbot_loaded, # 注册触发器: AstrBot 加载完成时 + register_on_llm_request as on_llm_request, # 注册触发器: LLM 请求时 + register_on_llm_response as on_llm_response, # 注册触发器: LLM 响应时 + register_on_decorating_result as on_decorating_result, # 注册触发器: 装饰结果时 + register_after_message_sent as after_message_sent, # 注册触发器: 消息发送后 + register_llm_tool as llm_tool, # 注册 LLM 工具 +) + +# 监听器所用到的过滤器和类型 +from astrbot.core.star.filter.event_message_type import ( + EventMessageTypeFilter, + EventMessageType, +) +from astrbot.core.star.filter.platform_adapter_type import ( + PlatformAdapterTypeFilter, + PlatformAdapterType, +) +from astrbot.core.star.filter.permission import PermissionTypeFilter, PermissionType +from astrbot.core.star.filter.custom_filter import CustomFilter + +# 注册平台适配器 +from astrbot.core.provider.register import register_provider_adapter + +__all__ = [ + "register", + "command", + "command_group", + "event_message_type", + "regex", + "platform_adapter_type", + "permission_type", + "custom_filter", + "on_astrbot_loaded", + "on_llm_request", + "on_llm_response", + "on_decorating_result", + "after_message_sent", + "llm_tool", + "EventMessageTypeFilter", + "EventMessageType", + "PlatformAdapterTypeFilter", + "PlatformAdapterType", + "PermissionTypeFilter", + "PermissionType", + "CustomFilter", + "register_provider_adapter", +] diff --git a/astrbot/api/tool/__init__.py b/astrbot/api/tool/__init__.py new file mode 100644 index 000000000..a2180958f --- /dev/null +++ b/astrbot/api/tool/__init__.py @@ -0,0 +1,12 @@ +""" +astrbot.api.tool +该模块包含了 AstrBot 有关大模型函数工具(包括MCP)的所有模块 +""" + +from astrbot.core.provider.func_tool_manager import FuncTool, MCPClient, FuncCall + +__all__ = [ + "FuncTool", + "MCPClient", + "FuncCall", +] diff --git a/astrbot/api/util/__init__.py b/astrbot/api/util/__init__.py index a66206e05..eb6d67152 100644 --- a/astrbot/api/util/__init__.py +++ b/astrbot/api/util/__init__.py @@ -1,7 +1,22 @@ +""" +astrbot.api.util +该模块包含了 AstrBot 的实用工具模块 +""" + from astrbot.core.utils.session_waiter import ( SessionWaiter, SessionController, session_waiter, ) +from astrbot import logger +from astrbot.core.config import AstrBotConfig +from astrbot.core.utils.t2i.renderer import HtmlRenderer -__all__ = ["SessionWaiter", "SessionController", "session_waiter"] +__all__ = [ + "SessionWaiter", + "SessionController", + "session_waiter", + "logger", + "AstrBotConfig", + "HtmlRenderer", +] diff --git a/astrbot/core/message/components.py b/astrbot/core/message/components.py index d9ec4b41b..dcead7231 100644 --- a/astrbot/core/message/components.py +++ b/astrbot/core/message/components.py @@ -43,6 +43,7 @@ class ComponentType(str, Enum): Record = "Record" # 语音 Video = "Video" # 视频 At = "At" # At + AtAll = "AtAll" # At 全体成员 Node = "Node" # 转发消息的一个节点 Nodes = "Nodes" # 转发消息的多个节点 Poke = "Poke" # QQ 戳一戳 @@ -51,25 +52,39 @@ class ComponentType(str, Enum): Forward = "Forward" # 转发消息 File = "File" # 文件 - RPS = "RPS" # TODO - Dice = "Dice" # TODO - Shake = "Shake" # TODO - Anonymous = "Anonymous" # TODO - Share = "Share" - Contact = "Contact" # TODO - Location = "Location" # TODO - Music = "Music" - RedBag = "RedBag" - Xml = "Xml" - Json = "Json" - CardImage = "CardImage" - TTS = "TTS" - Unknown = "Unknown" + # 特定平台消息组件 + ## QQ + Dice = "Dice" # 骰子 + Contact = "Contact" # 推荐好友/群 + RPS = "RPS" # 猜拳魔法表情 + Music = "Music" # 音乐分享 + Json = "Json" # Json 消息 + + ## 微信 WechatEmoji = "WechatEmoji" # Wechat 下的 emoji 表情包 + # 仅接收 + Share = "Share" # 链接分享 仅接受 + Shake = "Shake" # 私聊窗口抖动 仅接收 + + # 其他消息组件 + TTS = "TTS" # TTS + Unknown = "Unknown" # 未知类型 + + # 不支持或已废弃 + Xml = "Xml" # Xml 消息 已废弃 不会支持 + CardImage = "CardImage" # 卡片图片 无协议端支持 不会支持 + Anonymous = "Anonymous" # 匿名 已废弃 不会支持 + RedBag = "RedBag" # 红包 法律原因 不会支持 + Location = "Location" # 位置 仅手机端协议支持 不会支持 + class BaseMessageComponent(BaseModel): + """ + 消息组件基类, 任何自定义消息组件都应当继承此类 + """ + type: ComponentType def toString(self): @@ -108,6 +123,10 @@ async def to_dict(self) -> dict: class Plain(BaseMessageComponent): + """ + 纯文本消息 + """ + type = ComponentType.Plain text: str convert: T.Optional[bool] = True # 若为 False 则直接发送未转换 CQ 码的消息 @@ -130,6 +149,10 @@ async def to_dict(self): class Face(BaseMessageComponent): + """ + QQ表情, 仅 QQ + """ + type = ComponentType.Face id: int @@ -138,6 +161,10 @@ def __init__(self, **_): class Record(BaseMessageComponent): + """ + 语音 + """ + type = ComponentType.Record file: T.Optional[str] = "" magic: T.Optional[bool] = False @@ -243,6 +270,10 @@ async def register_to_file_service(self) -> str: class Video(BaseMessageComponent): + """ + 视频 + """ + type = ComponentType.Video file: str cover: T.Optional[str] = "" @@ -329,6 +360,10 @@ async def to_dict(self): class At(BaseMessageComponent): + """ + At 即 @ + """ + type = ComponentType.At qq: T.Union[int, str] # 此处str为all时代表所有人 name: T.Optional[str] = "" @@ -344,34 +379,54 @@ def toDict(self): class AtAll(At): + """ + At 全体成员 即 @全体成员 + """ + qq: str = "all" def __init__(self, **_): super().__init__(**_) -class RPS(BaseMessageComponent): # TODO +class RPS(BaseMessageComponent): + """ + 猜拳魔法表情, 仅 QQ + """ + type = ComponentType.RPS def __init__(self, **_): super().__init__(**_) -class Dice(BaseMessageComponent): # TODO +class Dice(BaseMessageComponent): + """ + 骰子, 仅 QQ + """ + type = ComponentType.Dice def __init__(self, **_): super().__init__(**_) -class Shake(BaseMessageComponent): # TODO +class Shake(BaseMessageComponent): + """ + 私聊窗口抖动, 仅 QQ, 仅接收 + """ + type = ComponentType.Shake def __init__(self, **_): super().__init__(**_) -class Anonymous(BaseMessageComponent): # TODO +class Anonymous(BaseMessageComponent): + """ + ⚠️ 标记为已废弃, 已经没有协议端支持, 请勿使用 + """ + type = ComponentType.Anonymous ignore: T.Optional[bool] = False @@ -380,6 +435,10 @@ def __init__(self, **_): class Share(BaseMessageComponent): + """ + 链接分享, 仅接收, 仅 QQ + """ + type = ComponentType.Share url: str title: str @@ -390,7 +449,11 @@ def __init__(self, **_): super().__init__(**_) -class Contact(BaseMessageComponent): # TODO +class Contact(BaseMessageComponent): + """ + 推荐好友/群, 仅 QQ + """ + type = ComponentType.Contact _type: str # type 字段冲突 id: T.Optional[int] = 0 @@ -399,7 +462,11 @@ def __init__(self, **_): super().__init__(**_) -class Location(BaseMessageComponent): # TODO +class Location(BaseMessageComponent): + """ + ⚠️ 标记为已废弃, 已经没有协议端支持, 请勿使用 + """ + type = ComponentType.Location lat: float lon: float @@ -411,6 +478,10 @@ def __init__(self, **_): class Music(BaseMessageComponent): + """ + 音乐分享, 仅 QQ + """ + type = ComponentType.Music _type: str id: T.Optional[int] = 0 @@ -428,6 +499,10 @@ def __init__(self, **_): class Image(BaseMessageComponent): + """ + 图片 + """ + type = ComponentType.Image file: T.Optional[str] = "" _type: T.Optional[str] = "" @@ -541,6 +616,10 @@ async def register_to_file_service(self) -> str: class Reply(BaseMessageComponent): + """ + 回复, 回复某条消息 + """ + type = ComponentType.Reply id: T.Union[str, int] """所引用的消息 ID""" @@ -567,6 +646,10 @@ def __init__(self, **_): class RedBag(BaseMessageComponent): + """ + ⚠️ 标记为已废弃, 已经没有协议端支持, 请勿使用 + """ + type = ComponentType.RedBag title: str @@ -575,6 +658,10 @@ def __init__(self, **_): class Poke(BaseMessageComponent): + """ + QQ 戳一戳 + """ + type: str = ComponentType.Poke id: T.Optional[int] = 0 qq: T.Optional[int] = 0 @@ -585,6 +672,10 @@ def __init__(self, type: str, **_): class Forward(BaseMessageComponent): + """ + 转发消息 + """ + type = ComponentType.Forward id: str @@ -647,6 +738,10 @@ async def to_dict(self): class Nodes(BaseMessageComponent): + """ + 转发消息的多个节点 + """ + type = ComponentType.Nodes nodes: T.List[Node] @@ -673,6 +768,10 @@ async def to_dict(self): class Xml(BaseMessageComponent): + """ + ⚠️ 标记为已废弃, 已经没有协议端支持, 请勿使用 + """ + type = ComponentType.Xml data: str resid: T.Optional[int] = 0 @@ -682,6 +781,10 @@ def __init__(self, **_): class Json(BaseMessageComponent): + """ + Json 消息 + """ + type = ComponentType.Json data: T.Union[str, dict] resid: T.Optional[int] = 0 @@ -693,6 +796,10 @@ def __init__(self, data, **_): class CardImage(BaseMessageComponent): + """ + ⚠️ 标记为已废弃, 已经没有协议端支持, 请勿使用 + """ + type = ComponentType.CardImage file: str cache: T.Optional[bool] = True @@ -712,6 +819,10 @@ def fromFileSystem(path, **_): class TTS(BaseMessageComponent): + """ + TTS + """ + type = ComponentType.TTS text: str @@ -720,6 +831,10 @@ def __init__(self, **_): class Unknown(BaseMessageComponent): + """ + 未知类型 + """ + type = ComponentType.Unknown text: str @@ -862,6 +977,10 @@ async def to_dict(self): class WechatEmoji(BaseMessageComponent): + """ + 微信 emoji 表情包 + """ + type = ComponentType.WechatEmoji md5: T.Optional[str] = "" md5_len: T.Optional[int] = 0 @@ -871,6 +990,7 @@ def __init__(self, **_): super().__init__(**_) +# 匹配消息用字典 ComponentTypes = { "plain": Plain, "text": Plain, diff --git a/astrbot/core/platform/astr_message_event.py b/astrbot/core/platform/astr_message_event.py index 75ea317ad..404b2b7e7 100644 --- a/astrbot/core/platform/astr_message_event.py +++ b/astrbot/core/platform/astr_message_event.py @@ -26,8 +26,12 @@ from .platform_metadata import PlatformMetadata from .message_session import MessageSession, MessageSesion # noqa - class AstrMessageEvent(abc.ABC): + """ + AstrBot 事件, AstrBot 运行的核心, AstrBot 所有操作的运行都是事件驱动的 + AstrBot 将不同消息平台的消息, 统一转换为了一个 AstrBot 事件, 以此统一了不同平台的逻辑 + """ + def __init__( self, message_str: str, diff --git a/astrbot/core/platform/astrbot_message.py b/astrbot/core/platform/astrbot_message.py index e7bd4bd9c..955eb6d31 100644 --- a/astrbot/core/platform/astrbot_message.py +++ b/astrbot/core/platform/astrbot_message.py @@ -7,6 +7,10 @@ @dataclass class MessageMember: + """ + 消息成员, 描述一个人, 例如一个群成员 + """ + user_id: str # 发送者id nickname: str = None @@ -20,6 +24,10 @@ def __str__(self): @dataclass class Group: + """ + 一个群聊 + """ + group_id: str """群号""" group_name: str = None diff --git a/astrbot/core/platform/sources/discord/components.py b/astrbot/core/platform/sources/discord/components.py index dbeda38ad..fd6c2009a 100644 --- a/astrbot/core/platform/sources/discord/components.py +++ b/astrbot/core/platform/sources/discord/components.py @@ -59,7 +59,7 @@ def to_discord_embed(self) -> discord.Embed: class DiscordButton(BaseMessageComponent): - """Discord按钮组件""" + """Discord 按钮组件""" type: str = "discord_button" @@ -79,16 +79,19 @@ def __init__( self.url = url self.disabled = disabled + class DiscordReference(BaseMessageComponent): - """Discord引用组件""" + """Discord 引用组件""" + type: str = "discord_reference" + def __init__(self, message_id: str, channel_id: str): self.message_id = message_id self.channel_id = channel_id class DiscordView(BaseMessageComponent): - """Discord视图组件,包含按钮和选择菜单""" + """Discord 视图组件,包含按钮和选择菜单""" type: str = "discord_view" @@ -98,7 +101,6 @@ def __init__( self.components = components or [] self.timeout = timeout - def to_discord_view(self) -> discord.ui.View: """转换为Discord View对象""" view = discord.ui.View(timeout=self.timeout) diff --git a/astrbot/core/platform/sources/webchat/webchat_event.py b/astrbot/core/platform/sources/webchat/webchat_event.py index 3bf1c0a2a..6d96e9960 100644 --- a/astrbot/core/platform/sources/webchat/webchat_event.py +++ b/astrbot/core/platform/sources/webchat/webchat_event.py @@ -1,9 +1,10 @@ import os import uuid import base64 -from astrbot.api import logger -from astrbot.api.event import AstrMessageEvent, MessageChain -from astrbot.api.message_components import Plain, Image, Record +from astrbot import logger +from astrbot.core.platform import AstrMessageEvent +from astrbot.core.message.message_event_result import MessageChain +from astrbot.core.message.components import Plain, Image, Record from astrbot.core.utils.io import download_image_by_url from astrbot.core.utils.astrbot_path import get_astrbot_data_path from .webchat_queue_mgr import webchat_queue_mgr diff --git a/astrbot/core/star/star_tools.py b/astrbot/core/star/star_tools.py index 40fa3e519..352492b39 100644 --- a/astrbot/core/star/star_tools.py +++ b/astrbot/core/star/star_tools.py @@ -4,7 +4,7 @@ from typing import Union, Awaitable, List, Optional, ClassVar from astrbot.core.message.components import BaseMessageComponent from astrbot.core.message.message_event_result import MessageChain -from astrbot.api.platform import MessageMember, AstrBotMessage +from astrbot.core.platform import MessageMember, AstrBotMessage from astrbot.core.platform.astr_message_event import MessageSesion from astrbot.core.star.context import Context from astrbot.core.star.star import star_map @@ -182,7 +182,9 @@ def get_data_dir(cls, plugin_name: Optional[str] = None) -> Path: plugin_name = metadata.name - data_dir = Path(os.path.join(get_astrbot_data_path(), "plugin_data", plugin_name)) + data_dir = Path( + os.path.join(get_astrbot_data_path(), "plugin_data", plugin_name) + ) try: data_dir.mkdir(parents=True, exist_ok=True)