From 389a13f134e051842da7cd0a7d713f1d9ce48caf Mon Sep 17 00:00:00 2001 From: anka <1350989414@qq.com> Date: Fri, 30 May 2025 12:33:20 +0800 Subject: [PATCH 01/13] =?UTF-8?q?refactor:=20=E6=95=B4=E7=90=86=E8=B0=83?= =?UTF-8?q?=E6=95=B4=20message=5Fcomponents,=20=E9=81=BF=E5=85=8D=E4=BD=BF?= =?UTF-8?q?=E7=94=A8import=20*,=20=E5=90=8C=E6=97=B6=E6=95=B4=E7=90=86?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/api/__init__.py | 5 ++++ astrbot/api/all.py | 9 +++++- astrbot/api/message_components.py | 44 +++++++++++++++++++++++++++++- astrbot/core/message/components.py | 26 +++++++++++------- 4 files changed, 72 insertions(+), 12 deletions(-) diff --git a/astrbot/api/__init__.py b/astrbot/api/__init__.py index e8a9d23a9..459cb1589 100644 --- a/astrbot/api/__init__.py +++ b/astrbot/api/__init__.py @@ -1,3 +1,8 @@ +""" +astrbot.api +该模块提供最常用最核心的一些接口 +""" + from astrbot.core.config.astrbot_config import AstrBotConfig from astrbot import logger from astrbot.core import html_renderer diff --git a/astrbot/api/all.py b/astrbot/api/all.py index 2463dbc2b..9189f6af1 100644 --- a/astrbot/api/all.py +++ b/astrbot/api/all.py @@ -1,6 +1,13 @@ +""" +astrbot.api.all +该模块提供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 # event @@ -50,4 +57,4 @@ from astrbot.core.platform.register import register_platform_adapter -from .message_components import * \ No newline at end of file +from .message_components import * diff --git a/astrbot/api/message_components.py b/astrbot/api/message_components.py index ff9add858..406d725a4 100644 --- a/astrbot/api/message_components.py +++ b/astrbot/api/message_components.py @@ -1 +1,43 @@ -from astrbot.core.message.components import * +""" +astrbot.api.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, # 文件 + # 其他消息组件 + Share, # 分享 + Music, # 音乐卡片 + Xml, # Xml 消息 + Json, # Json 消息 + CardImage, # 卡片图片 + TTS, # TTS + Unknown, # 未知类型 + # 特定平台消息组件 + WechatEmoji, # 微信表情 + # TODO 消息组件 + RPS, # TODO + Dice, # TODO + Shake, # TODO + Anonymous, # TODO + Contact, # TODO + Location, # TODO + RedBag, # TODO + # 其他 + ComponentTypes, # 小写名->类型 字典实例 +) diff --git a/astrbot/core/message/components.py b/astrbot/core/message/components.py index d4dbc12b5..711451013 100644 --- a/astrbot/core/message/components.py +++ b/astrbot/core/message/components.py @@ -38,11 +38,13 @@ class ComponentType(Enum): + # 常用消息组件 Plain = "Plain" # 纯文本消息 Face = "Face" # QQ表情 Record = "Record" # 语音 Video = "Video" # 视频 At = "At" # At + AtAll = "AtAll" # At 全体成员 Node = "Node" # 转发消息的一个节点 Nodes = "Nodes" # 转发消息的多个节点 Poke = "Poke" # QQ 戳一戳 @@ -51,22 +53,26 @@ class ComponentType(Enum): Forward = "Forward" # 转发消息 File = "File" # 文件 + # 其他消息组件 + Share = "Share" # 分享 + Music = "Music" # 音乐卡片 + RedBag = "RedBag" # 红包 + Xml = "Xml" # Xml 消息 + Json = "Json" # Json 消息 + CardImage = "CardImage" # 卡片图片 + TTS = "TTS" # TTS + Unknown = "Unknown" # 未知类型 + + # 特定平台消息组件 + WechatEmoji = "WechatEmoji" # Wechat 下的 emoji 表情包 + + # TODO 消息组件 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" - - WechatEmoji = "WechatEmoji" # Wechat 下的 emoji 表情包 class BaseMessageComponent(BaseModel): From edbed8a4628d514c3862e507d1d322dbc37f215d Mon Sep 17 00:00:00 2001 From: anka <1350989414@qq.com> Date: Fri, 30 May 2025 17:26:00 +0800 Subject: [PATCH 02/13] =?UTF-8?q?refactor:=20=E6=95=B4=E7=90=86=E5=AE=8C?= =?UTF-8?q?=E6=AF=95=E6=B6=88=E6=81=AF=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/api/message_components.py | 23 ++--- astrbot/core/message/components.py | 159 +++++++++++++++++++++++++---- 2 files changed, 146 insertions(+), 36 deletions(-) diff --git a/astrbot/api/message_components.py b/astrbot/api/message_components.py index 406d725a4..132d39c08 100644 --- a/astrbot/api/message_components.py +++ b/astrbot/api/message_components.py @@ -21,23 +21,18 @@ Forward, # 转发消息 File, # 文件 # 其他消息组件 - Share, # 分享 - Music, # 音乐卡片 - Xml, # Xml 消息 + Music, # 音乐分享 Json, # Json 消息 - CardImage, # 卡片图片 TTS, # TTS Unknown, # 未知类型 # 特定平台消息组件 + ## QQ + Dice, # 骰子 + Contact, # 推荐好友/群 + RPS, # 猜拳魔法表情 + ## 微信 WechatEmoji, # 微信表情 - # TODO 消息组件 - RPS, # TODO - Dice, # TODO - Shake, # TODO - Anonymous, # TODO - Contact, # TODO - Location, # TODO - RedBag, # TODO - # 其他 - ComponentTypes, # 小写名->类型 字典实例 + # 仅接收 + Share, # 链接分享 + Shake, # 私聊窗口抖动 ) diff --git a/astrbot/core/message/components.py b/astrbot/core/message/components.py index 711451013..11c0d9f5d 100644 --- a/astrbot/core/message/components.py +++ b/astrbot/core/message/components.py @@ -53,29 +53,39 @@ class ComponentType(Enum): Forward = "Forward" # 转发消息 File = "File" # 文件 - # 其他消息组件 - Share = "Share" # 分享 - Music = "Music" # 音乐卡片 - RedBag = "RedBag" # 红包 - Xml = "Xml" # Xml 消息 + # 特定平台消息组件 + + ## QQ + Dice = "Dice" # 骰子 + Contact = "Contact" # 推荐好友/群 + RPS = "RPS" # 猜拳魔法表情 + Music = "Music" # 音乐分享 Json = "Json" # Json 消息 - CardImage = "CardImage" # 卡片图片 - TTS = "TTS" # TTS - Unknown = "Unknown" # 未知类型 - # 特定平台消息组件 + ## 微信 WechatEmoji = "WechatEmoji" # Wechat 下的 emoji 表情包 - # TODO 消息组件 - RPS = "RPS" # TODO - Dice = "Dice" # TODO - Shake = "Shake" # TODO - Anonymous = "Anonymous" # TODO - Contact = "Contact" # TODO - Location = "Location" # TODO + # 仅接收 + 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): @@ -114,6 +124,10 @@ async def to_dict(self) -> dict: class Plain(BaseMessageComponent): + """ + 纯文本消息 + """ + type: ComponentType = "Plain" text: str convert: T.Optional[bool] = True # 若为 False 则直接发送未转换 CQ 码的消息 @@ -133,6 +147,10 @@ def toDict(self): class Face(BaseMessageComponent): + """ + QQ表情, 仅 QQ + """ + type: ComponentType = "Face" id: int @@ -141,6 +159,10 @@ def __init__(self, **_): class Record(BaseMessageComponent): + """ + 语音 + """ + type: ComponentType = "Record" file: T.Optional[str] = "" magic: T.Optional[bool] = False @@ -240,6 +262,10 @@ async def register_to_file_service(self) -> str: class Video(BaseMessageComponent): + """ + 视频 + """ + type: ComponentType = "Video" file: str cover: T.Optional[str] = "" @@ -326,6 +352,10 @@ async def to_dict(self): class At(BaseMessageComponent): + """ + At 即 @ + """ + type: ComponentType = "At" qq: T.Union[int, str] # 此处str为all时代表所有人 name: T.Optional[str] = "" @@ -341,34 +371,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 @@ -377,6 +427,10 @@ def __init__(self, **_): class Share(BaseMessageComponent): + """ + 链接分享, 仅接收, 仅 QQ + """ + type: ComponentType = "Share" url: str title: str @@ -387,7 +441,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 @@ -396,7 +454,11 @@ def __init__(self, **_): super().__init__(**_) -class Location(BaseMessageComponent): # TODO +class Location(BaseMessageComponent): + """ + ⚠️ 标记为已废弃, 已经没有协议端支持, 请勿使用 + """ + type: ComponentType = "Location" lat: float lon: float @@ -408,6 +470,10 @@ def __init__(self, **_): class Music(BaseMessageComponent): + """ + 音乐分享, 仅 QQ + """ + type: ComponentType = "Music" _type: str id: T.Optional[int] = 0 @@ -425,6 +491,10 @@ def __init__(self, **_): class Image(BaseMessageComponent): + """ + 图片 + """ + type: ComponentType = "Image" file: T.Optional[str] = "" _type: T.Optional[str] = "" @@ -536,6 +606,10 @@ async def register_to_file_service(self) -> str: class Reply(BaseMessageComponent): + """ + 回复, 回复某条消息 + """ + type: ComponentType = "Reply" id: T.Union[str, int] """所引用的消息 ID""" @@ -562,6 +636,10 @@ def __init__(self, **_): class RedBag(BaseMessageComponent): + """ + ⚠️ 标记为已废弃, 已经没有协议端支持, 请勿使用 + """ + type: ComponentType = "RedBag" title: str @@ -570,6 +648,10 @@ def __init__(self, **_): class Poke(BaseMessageComponent): + """ + QQ 戳一戳 + """ + type: str = "" id: T.Optional[int] = 0 qq: T.Optional[int] = 0 @@ -580,6 +662,10 @@ def __init__(self, type: str, **_): class Forward(BaseMessageComponent): + """ + 转发消息 + """ + type: ComponentType = "Forward" id: str @@ -638,6 +724,10 @@ async def to_dict(self): class Nodes(BaseMessageComponent): + """ + 转发消息的多个节点 + """ + type: ComponentType = "Nodes" nodes: T.List[Node] @@ -664,6 +754,10 @@ async def to_dict(self): class Xml(BaseMessageComponent): + """ + ⚠️ 标记为已废弃, 已经没有协议端支持, 请勿使用 + """ + type: ComponentType = "Xml" data: str resid: T.Optional[int] = 0 @@ -673,6 +767,10 @@ def __init__(self, **_): class Json(BaseMessageComponent): + """ + Json 消息 + """ + type: ComponentType = "Json" data: T.Union[str, dict] resid: T.Optional[int] = 0 @@ -684,6 +782,10 @@ def __init__(self, data, **_): class CardImage(BaseMessageComponent): + """ + ⚠️ 标记为已废弃, 已经没有协议端支持, 请勿使用 + """ + type: ComponentType = "CardImage" file: str cache: T.Optional[bool] = True @@ -703,6 +805,10 @@ def fromFileSystem(path, **_): class TTS(BaseMessageComponent): + """ + TTS + """ + type: ComponentType = "TTS" text: str @@ -711,6 +817,10 @@ def __init__(self, **_): class Unknown(BaseMessageComponent): + """ + 未知类型 + """ + type: ComponentType = "Unknown" text: str @@ -853,6 +963,10 @@ async def to_dict(self): class WechatEmoji(BaseMessageComponent): + """ + 微信 emoji 表情包 + """ + type: ComponentType = "WechatEmoji" md5: T.Optional[str] = "" md5_len: T.Optional[int] = 0 @@ -862,6 +976,7 @@ def __init__(self, **_): super().__init__(**_) +# 匹配消息用字典 ComponentTypes = { "plain": Plain, "text": Plain, From 87fe4c49692d168413356964260e2f6f37cbbdd9 Mon Sep 17 00:00:00 2001 From: anka <1350989414@qq.com> Date: Fri, 30 May 2025 17:36:19 +0800 Subject: [PATCH 03/13] =?UTF-8?q?refactor:=20=E6=9B=B4=E6=96=B0=E9=83=A8?= =?UTF-8?q?=E5=88=86=E6=A8=A1=E5=9D=97=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/api/all.py | 43 +++++++++++++++++++-- astrbot/api/event/__init__.py | 5 +++ astrbot/api/star/__init__.py | 5 +++ astrbot/core/platform/astr_message_event.py | 5 +++ 4 files changed, 54 insertions(+), 4 deletions(-) diff --git a/astrbot/api/all.py b/astrbot/api/all.py index 9189f6af1..5ddf6999e 100644 --- a/astrbot/api/all.py +++ b/astrbot/api/all.py @@ -1,21 +1,58 @@ """ astrbot.api.all 该模块提供AstrBot全部的api接口, 如果不清楚从哪里导入, 可以从这个模块导入 +⚠️ 标记为已弃用, 不会更新, 请使用 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 import sp from astrbot.core.star.register import register_llm_tool as llm_tool -# event +# astrbot.api.message_components +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.message.message_event_result import ( MessageEventResult, MessageChain, CommandResult, EventResultType, + ResultContentType, ) from astrbot.core.platform import AstrMessageEvent @@ -56,5 +93,3 @@ ) from astrbot.core.platform.register import register_platform_adapter - -from .message_components import * diff --git a/astrbot/api/event/__init__.py b/astrbot/api/event/__init__.py index 1f2fce640..7d1f77702 100644 --- a/astrbot/api/event/__init__.py +++ b/astrbot/api/event/__init__.py @@ -1,3 +1,8 @@ +""" +astrbot.api.event +该模块包含 AstrBot 所有事件相关模块 +""" + from astrbot.core.message.message_event_result import ( MessageEventResult, MessageChain, diff --git a/astrbot/api/star/__init__.py b/astrbot/api/star/__init__.py index 1b33923fe..e69055a1d 100644 --- a/astrbot/api/star/__init__.py +++ b/astrbot/api/star/__init__.py @@ -1,3 +1,8 @@ +""" +astrbot.api.star +该模块包括所有插件注册相关模块以及插件使用的数据 +""" + from astrbot.core.star.register import ( register_star as register, # 注册插件(Star) ) diff --git a/astrbot/core/platform/astr_message_event.py b/astrbot/core/platform/astr_message_event.py index 40aab6443..b435103cf 100644 --- a/astrbot/core/platform/astr_message_event.py +++ b/astrbot/core/platform/astr_message_event.py @@ -41,6 +41,11 @@ def from_str(session_str: str): class AstrMessageEvent(abc.ABC): + """ + AstrBot 事件, AstrBot 运行的核心, AstrBot 所有操作的运行都是事件驱动的 + AstrBot 将不同消息平台的消息, 统一转换为了一个 AstrBot 事件, 以此统一了不同平台的逻辑 + """ + def __init__( self, message_str: str, From b1a3c4a7aa5304ecf084c6995eb4706d9343fae1 Mon Sep 17 00:00:00 2001 From: anka <1350989414@qq.com> Date: Fri, 30 May 2025 18:06:21 +0800 Subject: [PATCH 04/13] =?UTF-8?q?refactor:=20=E6=95=B4=E7=90=86=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E6=89=80=E6=9C=89=E5=B7=B2=E6=9C=89api,=20=E5=87=86?= =?UTF-8?q?=E5=A4=87=E6=95=B4=E7=90=86=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/api/all.py | 53 ++++++++++++++---------- astrbot/api/event/__init__.py | 5 ++- astrbot/api/platform/__init__.py | 52 ++++++++++++++++++++--- astrbot/api/provider/__init__.py | 5 +++ astrbot/api/star/__init__.py | 2 +- astrbot/core/platform/astrbot_message.py | 8 ++++ 6 files changed, 94 insertions(+), 31 deletions(-) diff --git a/astrbot/api/all.py b/astrbot/api/all.py index 5ddf6999e..9ba235f4e 100644 --- a/astrbot/api/all.py +++ b/astrbot/api/all.py @@ -47,6 +47,7 @@ ) # astrbot.api.event +from astrbot.core.platform import AstrMessageEvent from astrbot.core.message.message_event_result import ( MessageEventResult, MessageChain, @@ -54,9 +55,36 @@ EventResultType, ResultContentType, ) -from astrbot.core.platform import AstrMessageEvent -# star register +# astrbot.api.platform +from astrbot.core.platform import ( + AstrMessageEvent, # AstrBot 事件, 其实应当出现在事件 api 下, 此处保留向后兼容 + 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 # 已弃用 + + from astrbot.core.star.register import ( register_command as command, register_command_group as command_group, @@ -72,24 +100,3 @@ 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 diff --git a/astrbot/api/event/__init__.py b/astrbot/api/event/__init__.py index 7d1f77702..aca613713 100644 --- a/astrbot/api/event/__init__.py +++ b/astrbot/api/event/__init__.py @@ -3,6 +3,10 @@ 该模块包含 AstrBot 所有事件相关模块 """ +# AstrBot 事件, event api的所有者 +from astrbot.core.platform import AstrMessageEvent + +# AstrBot 事件相关组件 from astrbot.core.message.message_event_result import ( MessageEventResult, MessageChain, @@ -11,7 +15,6 @@ ResultContentType, ) -from astrbot.core.platform import AstrMessageEvent __all__ = [ "MessageEventResult", 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/provider/__init__.py b/astrbot/api/provider/__init__.py index 9b1ade50a..d583c7de2 100644 --- a/astrbot/api/provider/__init__.py +++ b/astrbot/api/provider/__init__.py @@ -1,3 +1,8 @@ +""" +astrbot.api.provider +该模块包含了 AstrBot 有关大模型供应商的所有模块 +""" + from astrbot.core.provider import Provider, STTProvider, Personality from astrbot.core.provider.entities import ( ProviderRequest, diff --git a/astrbot/api/star/__init__.py b/astrbot/api/star/__init__.py index e69055a1d..cfc5ec3d1 100644 --- a/astrbot/api/star/__init__.py +++ b/astrbot/api/star/__init__.py @@ -8,6 +8,6 @@ ) 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/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 From e87b1b4abeeabf7bf1bac59d1b98529c6a962e11 Mon Sep 17 00:00:00 2001 From: anka <1350989414@qq.com> Date: Fri, 30 May 2025 18:21:29 +0800 Subject: [PATCH 05/13] =?UTF-8?q?refactor:=20=E5=AE=8C=E5=96=84=E6=9C=80?= =?UTF-8?q?=E5=90=8E=E7=9A=84=E4=B8=80=E4=BA=9B=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/api/util/__init__.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/astrbot/api/util/__init__.py b/astrbot/api/util/__init__.py index a66206e05..f848d6027 100644 --- a/astrbot/api/util/__init__.py +++ b/astrbot/api/util/__init__.py @@ -1,3 +1,8 @@ +""" +astrbot.api.util +该模块包含了 AstrBot 的实用工具模块 +""" + from astrbot.core.utils.session_waiter import ( SessionWaiter, SessionController, From fde90e08ea45dc1858b485ed9ae0427286872cd4 Mon Sep 17 00:00:00 2001 From: anka <1350989414@qq.com> Date: Fri, 30 May 2025 19:24:13 +0800 Subject: [PATCH 06/13] =?UTF-8?q?refactor:=20=E8=BF=81=E7=A7=BBastrbot.api?= =?UTF-8?q?.all=E8=87=B3astrbot.api,=20=E8=BF=81=E7=A7=BBastrbot.api.event?= =?UTF-8?q?.filter=E8=87=B3astrbot.api.star.register?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/api/__init__.py | 184 +++++++++++++++++- astrbot/api/all.py | 30 ++- astrbot/api/event/filter/__init__.py | 6 + astrbot/api/event/message/__init__.py | 25 +++ .../api/event/message/message_components.py | 38 ++++ astrbot/api/message_components.py | 1 + astrbot/api/star/register/__init__.py | 67 +++++++ 7 files changed, 340 insertions(+), 11 deletions(-) create mode 100644 astrbot/api/event/message/__init__.py create mode 100644 astrbot/api/event/message/message_components.py create mode 100644 astrbot/api/star/register/__init__.py diff --git a/astrbot/api/__init__.py b/astrbot/api/__init__.py index 459cb1589..ab80126f1 100644 --- a/astrbot/api/__init__.py +++ b/astrbot/api/__init__.py @@ -3,10 +3,190 @@ 该模块提供最常用最核心的一些接口 """ +# 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 -__all__ = ["AstrBotConfig", "logger", "html_renderer", "llm_tool", "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, # 私聊窗口抖动 +) + +# 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 工具 +) + +# 监听器所用到的过滤器和类型 +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 + +__all__ = [ + "AstrBotConfig", + "logger", + "html_renderer", + "llm_tool", + "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", +] diff --git a/astrbot/api/all.py b/astrbot/api/all.py index 9ba235f4e..6e0b4ffef 100644 --- a/astrbot/api/all.py +++ b/astrbot/api/all.py @@ -9,9 +9,9 @@ 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 -# astrbot.api.message_components +# 原: astrbot.api.message_components (已弃用) +# 现: astrbot.api.event.message.MessageComponents from .message_components import ( ComponentType, # 枚举所有消息类型名 BaseMessageComponent, # 消息类型基类, 如果你需要适配新的消息类型, 可以选择继承此类 @@ -58,7 +58,6 @@ # astrbot.api.platform from astrbot.core.platform import ( - AstrMessageEvent, # AstrBot 事件, 其实应当出现在事件 api 下, 此处保留向后兼容 AstrBotMessage, # AstrBot 消息, 其实应当出现在事件 api 下, 因为它是事件的一部分, 此处保留向后兼容 MessageMember, # AstrBot 消息成员, 其实应当出现在事件 api 下, 此处保留向后兼容 MessageType, # AstrBot 消息类型, 其实应当出现在事件 api 下, 此处保留向后兼容 @@ -84,14 +83,25 @@ 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_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, @@ -100,3 +110,5 @@ PlatformAdapterTypeFilter, PlatformAdapterType, ) +from astrbot.core.star.filter.permission import PermissionTypeFilter, PermissionType +from astrbot.core.star.filter.custom_filter import CustomFilter 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..5c1c12ec8 --- /dev/null +++ b/astrbot/api/event/message/__init__.py @@ -0,0 +1,25 @@ +""" +astrbot.api.event.message +此模块包含事件中的消息相关模块 +""" + +from . import message_components as MessageComponents +from astrbot.core.platform import ( + AstrBotMessage, + MessageMember, + MessageType, +) +from astrbot.core.message.message_event_result import ( + MessageEventResult, + MessageChain, + MessageEventResult, +) + +__all__ = [ + "AstrBotMessage", + "MessageMember", + "MessageType", + "MessageEventResult", + "MessageChain", + "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 132d39c08..9392b0422 100644 --- a/astrbot/api/message_components.py +++ b/astrbot/api/message_components.py @@ -1,6 +1,7 @@ """ astrbot.api.message_components 该模块提供一个事件中的消息的构成组件, 一个事件拥有一个消息链, 消息链是一个列表, 其中的元素就是这些消息组件 +⚠️ 标记为已弃用, 不会更新, 请使用 astrbot.api.event.message.message_components 导入 """ from astrbot.core.message.components import ( diff --git a/astrbot/api/star/register/__init__.py b/astrbot/api/star/register/__init__.py new file mode 100644 index 000000000..275b8033b --- /dev/null +++ b/astrbot/api/star/register/__init__.py @@ -0,0 +1,67 @@ +""" +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 + +__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", +] From cd4994cf02979950accaf6070571489085c95f8b Mon Sep 17 00:00:00 2001 From: anka <1350989414@qq.com> Date: Mon, 1 Sep 2025 11:11:05 +0800 Subject: [PATCH 07/13] docs: add api readme --- astrbot/api/README.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 astrbot/api/README.md diff --git a/astrbot/api/README.md b/astrbot/api/README.md new file mode 100644 index 000000000..4a08161e7 --- /dev/null +++ b/astrbot/api/README.md @@ -0,0 +1,23 @@ +# 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.api.event.message.message_components: 包括了所有消息组件 + +astrbot.api.platform: 包括了所有平台相关的导入 + +astrbot.api.provider: 包括了所有大模型供应商相关的导入 + +astrbot.api.star: 包括了所有插件相关的导入 +astrbot.api.star.register: 包括了所有插件注册 Handler 相关的导入 + +astrbot.api.util: 包括了所有的实用工具的导入 From 47be122946cf4e74e8cffd2aaf900fb39fd56a24 Mon Sep 17 00:00:00 2001 From: anka <1350989414@qq.com> Date: Mon, 1 Sep 2025 11:28:17 +0800 Subject: [PATCH 08/13] =?UTF-8?q?docs:=20=E5=A2=9E=E5=8A=A0api=E6=B3=A8?= =?UTF-8?q?=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/api/event/__init__.py | 3 +++ astrbot/api/event/message/__init__.py | 17 +++++++++++------ astrbot/core/platform/astr_message_event.py | 5 +++++ 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/astrbot/api/event/__init__.py b/astrbot/api/event/__init__.py index aca613713..7f250771e 100644 --- a/astrbot/api/event/__init__.py +++ b/astrbot/api/event/__init__.py @@ -15,6 +15,8 @@ ResultContentType, ) +from astrbot.core.platform.astr_message_event import MessageSesion as MessageSession + __all__ = [ "MessageEventResult", @@ -22,5 +24,6 @@ "CommandResult", "EventResultType", "AstrMessageEvent", + "MessageSession", "ResultContentType", ] diff --git a/astrbot/api/event/message/__init__.py b/astrbot/api/event/message/__init__.py index 5c1c12ec8..c561d2b5f 100644 --- a/astrbot/api/event/message/__init__.py +++ b/astrbot/api/event/message/__init__.py @@ -5,14 +5,17 @@ from . import message_components as MessageComponents from astrbot.core.platform import ( - AstrBotMessage, - MessageMember, - MessageType, + AstrBotMessage, # AstrBot 的消息对象, 包括id, 消息链等 + MessageMember, # 消息成员, 包括发送者id和昵称 + MessageType, # 消息类型(私聊/群聊/其他) ) + +# 消息链与消息链的结果 from astrbot.core.message.message_event_result import ( - MessageEventResult, - MessageChain, - MessageEventResult, + MessageEventResult, # 消息中的所有组件和事件处理的结果 + MessageChain, # 消息链 + EventResultType, # 事件处理结果类型(继续/终止) + ResultContentType, # 事件结果内容类型(LLM/流式/普通) ) __all__ = [ @@ -21,5 +24,7 @@ "MessageType", "MessageEventResult", "MessageChain", + "EventResultType", + "ResultContentType", "MessageComponents", ] diff --git a/astrbot/core/platform/astr_message_event.py b/astrbot/core/platform/astr_message_event.py index 6c2406873..0ec65cc46 100644 --- a/astrbot/core/platform/astr_message_event.py +++ b/astrbot/core/platform/astr_message_event.py @@ -27,6 +27,11 @@ @dataclass class MessageSesion: + """ + 消息会话 + 用于统一标识一个消息会话 + """ + platform_name: str message_type: MessageType session_id: str From 3c5f7c5fc249c0cebecebc2b6212f0849316f110 Mon Sep 17 00:00:00 2001 From: anka <1350989414@qq.com> Date: Mon, 1 Sep 2025 12:03:59 +0800 Subject: [PATCH 09/13] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E5=90=84?= =?UTF-8?q?=E4=B8=AA=E5=B9=B3=E5=8F=B0=E7=9A=84=E6=8E=A5=E5=8F=A3,=20?= =?UTF-8?q?=E6=96=B9=E4=BE=BF=E4=BD=BF=E7=94=A8(=E4=BE=8B=E5=A6=82?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E6=9E=84=E9=80=A0=E6=9F=90=E4=B8=80=E5=B9=B3?= =?UTF-8?q?=E5=8F=B0=E7=9A=84=E6=B6=88=E6=81=AF=E7=9A=84=E5=9C=BA=E5=90=88?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/api/platform/aiocqhttp/__init__.py | 16 +++++++++++ astrbot/api/platform/dingtalk/__init__.py | 15 ++++++++++ astrbot/api/platform/discord/__init__.py | 28 +++++++++++++++++++ astrbot/api/platform/lark/__init__.py | 15 ++++++++++ astrbot/api/platform/qqofficial/__init__.py | 19 +++++++++++++ .../platform/qqofficial_webhook/__init__.py | 24 ++++++++++++++++ astrbot/api/platform/slack/__init__.py | 23 +++++++++++++++ astrbot/api/platform/telegram/__init__.py | 17 +++++++++++ astrbot/api/platform/webchat/__init__.py | 20 +++++++++++++ astrbot/api/platform/wechatpadpro/__init__.py | 20 +++++++++++++ astrbot/api/platform/wecom/__init__.py | 25 +++++++++++++++++ .../weixin_official_account/__init__.py | 18 ++++++++++++ .../platform/sources/discord/components.py | 10 ++++--- 13 files changed, 246 insertions(+), 4 deletions(-) create mode 100644 astrbot/api/platform/aiocqhttp/__init__.py create mode 100644 astrbot/api/platform/dingtalk/__init__.py create mode 100644 astrbot/api/platform/discord/__init__.py create mode 100644 astrbot/api/platform/lark/__init__.py create mode 100644 astrbot/api/platform/qqofficial/__init__.py create mode 100644 astrbot/api/platform/qqofficial_webhook/__init__.py create mode 100644 astrbot/api/platform/slack/__init__.py create mode 100644 astrbot/api/platform/telegram/__init__.py create mode 100644 astrbot/api/platform/webchat/__init__.py create mode 100644 astrbot/api/platform/wechatpadpro/__init__.py create mode 100644 astrbot/api/platform/wecom/__init__.py create mode 100644 astrbot/api/platform/weixin_official_account/__init__.py 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..41ffae594 --- /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 as Client, + QQOfficialPlatformAdapter as QQOfficialAdapter, +) + +__all__ = [ + "QQOfficialAdapter", + "Client", + "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..749c7d980 --- /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 as Client, + 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", + "Client", + "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/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) From f9334d726128f3735c2914ef3c2aa8eacdc57ca6 Mon Sep 17 00:00:00 2001 From: anka <1350989414@qq.com> Date: Mon, 1 Sep 2025 12:05:51 +0800 Subject: [PATCH 10/13] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=91=BD?= =?UTF-8?q?=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/api/platform/qqofficial/__init__.py | 4 ++-- astrbot/api/platform/qqofficial_webhook/__init__.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/astrbot/api/platform/qqofficial/__init__.py b/astrbot/api/platform/qqofficial/__init__.py index 41ffae594..e93657266 100644 --- a/astrbot/api/platform/qqofficial/__init__.py +++ b/astrbot/api/platform/qqofficial/__init__.py @@ -8,12 +8,12 @@ ) from astrbot.core.platform.sources.qqofficial.qqofficial_platform_adapter import ( - botClient as Client, + botClient, QQOfficialPlatformAdapter as QQOfficialAdapter, ) __all__ = [ "QQOfficialAdapter", - "Client", + "botClient", "QQOfficialMessageEvent", ] diff --git a/astrbot/api/platform/qqofficial_webhook/__init__.py b/astrbot/api/platform/qqofficial_webhook/__init__.py index 749c7d980..8a3282fff 100644 --- a/astrbot/api/platform/qqofficial_webhook/__init__.py +++ b/astrbot/api/platform/qqofficial_webhook/__init__.py @@ -4,7 +4,7 @@ """ from astrbot.core.platform.sources.qqofficial_webhook.qo_webhook_adapter import ( - botClient as Client, + botClient, QQOfficialWebhookPlatformAdapter as QQOfficialWebhookAdapter, ) @@ -18,7 +18,7 @@ __all__ = [ "QQOfficialWebhookAdapter", - "Client", + "botClient", "QQOfficialWebhook", "QQOfficialWebhookMessageEvent", ] From 607bfe03b70bb5591649886df0dfa2e459166721 Mon Sep 17 00:00:00 2001 From: anka <1350989414@qq.com> Date: Mon, 1 Sep 2025 13:02:57 +0800 Subject: [PATCH 11/13] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E9=83=A8?= =?UTF-8?q?=E5=88=86=E5=8F=AF=E8=83=BD=E8=A6=81=E7=94=A8=E5=88=B0=E7=9A=84?= =?UTF-8?q?api(=E4=BE=8B=E5=A6=82=E6=AF=8F=E4=B8=AA=E5=A4=A7=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E7=9A=84provider)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/api/README.md | 2 + astrbot/api/provider/__init__.py | 111 ++++++++++++++++++++++++-- astrbot/api/star/register/__init__.py | 4 + astrbot/api/tool/__init__.py | 12 +++ astrbot/api/util/__init__.py | 12 ++- 5 files changed, 135 insertions(+), 6 deletions(-) create mode 100644 astrbot/api/tool/__init__.py diff --git a/astrbot/api/README.md b/astrbot/api/README.md index 4a08161e7..1dd3043b9 100644 --- a/astrbot/api/README.md +++ b/astrbot/api/README.md @@ -20,4 +20,6 @@ astrbot.api.provider: 包括了所有大模型供应商相关的导入 astrbot.api.star: 包括了所有插件相关的导入 astrbot.api.star.register: 包括了所有插件注册 Handler 相关的导入 +astrbot.api.tool: 包括了所有大模型工具, agent 相关的导入 + astrbot.api.util: 包括了所有的实用工具的导入 diff --git a/astrbot/api/provider/__init__.py b/astrbot/api/provider/__init__.py index d583c7de2..1379028fa 100644 --- a/astrbot/api/provider/__init__.py +++ b/astrbot/api/provider/__init__.py @@ -3,20 +3,121 @@ 该模块包含了 AstrBot 有关大模型供应商的所有模块 """ -from astrbot.core.provider import Provider, STTProvider, Personality +from astrbot.core.provider import ( + Provider, + STTProvider, + TTSProvider, + EmbeddingProvider, + Personality, +) 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/register/__init__.py b/astrbot/api/star/register/__init__.py index 275b8033b..bc1e1b505 100644 --- a/astrbot/api/star/register/__init__.py +++ b/astrbot/api/star/register/__init__.py @@ -42,6 +42,9 @@ 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", @@ -64,4 +67,5 @@ "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 f848d6027..eb6d67152 100644 --- a/astrbot/api/util/__init__.py +++ b/astrbot/api/util/__init__.py @@ -8,5 +8,15 @@ 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", +] From 26a6a03d45bf417df7ac7dfc6b8318132979bb31 Mon Sep 17 00:00:00 2001 From: anka <1350989414@qq.com> Date: Mon, 1 Sep 2025 13:33:10 +0800 Subject: [PATCH 12/13] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E5=B1=82=E7=BA=A7,=20=E5=86=85=E9=83=A8=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E4=B8=8D=E5=BA=94=E8=AF=A5=E4=BD=BF=E7=94=A8=E9=AB=98?= =?UTF-8?q?=E5=B1=82=E7=9A=84api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/api/provider/__init__.py | 20 ++++++++++--------- .../platform/sources/webchat/webchat_event.py | 7 ++++--- astrbot/core/star/star_tools.py | 6 ++++-- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/astrbot/api/provider/__init__.py b/astrbot/api/provider/__init__.py index 1379028fa..a66266826 100644 --- a/astrbot/api/provider/__init__.py +++ b/astrbot/api/provider/__init__.py @@ -6,10 +6,9 @@ from astrbot.core.provider import ( Provider, STTProvider, - TTSProvider, - EmbeddingProvider, Personality, ) +from astrbot.core.provider.provider import TTSProvider, EmbeddingProvider from astrbot.core.provider.entities import ( ProviderRequest, # 供应商请求 ProviderType, # 供应商类型 @@ -34,7 +33,8 @@ 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.edge_tts_source import ProviderEdgeTTS # Edge TTS from astrbot.core.provider.sources.fishaudio_tts_api_source import ( ProviderFishAudioTTSAPI, ServeTTSRequest, @@ -65,18 +65,20 @@ 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.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.whisper_selfhosted_source import ( +# ProviderOpenAIWhisperSelfHost, +# ) # OpenAI Whisper 自托管 from astrbot.core.provider.sources.zhipu_source import ( ProviderZhipu, ) # 智谱 (包括 ChatGLM 和 MOSS) 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) From 4f8a7d06bdb9d46f7951a62247b6a992136f2cd8 Mon Sep 17 00:00:00 2001 From: anka <1350989414@qq.com> Date: Mon, 1 Sep 2025 13:39:09 +0800 Subject: [PATCH 13/13] Update astrbot/api/README.md Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com> --- astrbot/api/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/astrbot/api/README.md b/astrbot/api/README.md index 1dd3043b9..c3caf5f06 100644 --- a/astrbot/api/README.md +++ b/astrbot/api/README.md @@ -11,7 +11,7 @@ astrbot.api.message_components(将弃用): 包括了所有消息组件, 由 astr astrbot.api.event: 包括了 AstrBot 事件以及相关类的导入 astrbot.api.event.filter(将弃用): 包括了事件过滤器, 用于注册 Handler, 由 astrbot.api.star.register 统一注册来代替 astrbot.api.event.message: 包括了 AstrBot 事件中, 所有有关消息的类 -astrbot.api.api.event.message.message_components: 包括了所有消息组件 +astrbot.api.event.message.message_components: 包括了所有消息组件 astrbot.api.platform: 包括了所有平台相关的导入