Skip to content

Commit 710a047

Browse files
committed
perf: 平台适配器注释
1 parent dcb061d commit 710a047

File tree

1 file changed

+25
-17
lines changed

1 file changed

+25
-17
lines changed

dev/plugin-platform-adapter.md

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,14 @@ import asyncio
5050

5151
from astrbot.api.platform import Platform, AstrBotMessage, MessageMember, PlatformMetadata, MessageType
5252
from astrbot.api.event import MessageChain
53-
from astrbot.api.message_components import Plain, Image, Record
53+
from astrbot.api.message_components import Plain, Image, Record # 消息链中的组件,可以根据需要导入
5454
from astrbot.core.platform.astr_message_event import MessageSesion
5555
from astrbot.api.platform import register_platform_adapter
5656
from astrbot import logger
5757
from .client import FakeClient
5858
from .fake_platform_event import FakePlatformEvent
5959

60-
60+
# 注册平台适配器。第一个参数为平台名,第二个为描述。第三个为默认配置。
6161
@register_platform_adapter("fake", "fake 适配器", default_config_tmpl={
6262
"token": "your_token",
6363
"username": "bot_username"
@@ -66,52 +66,60 @@ class FakePlatformAdapter(Platform):
6666

6767
def __init__(self, platform_config: dict, platform_settings: dict, event_queue: asyncio.Queue) -> None:
6868
super().__init__(event_queue)
69-
self.config = platform_config
70-
self.settingss = platform_settings
69+
self.config = platform_config # 上面的默认配置,用户填写后会传到这里
70+
self.settings = platform_settings # platform_settings 平台设置。
7171

7272
async def send_by_session(self, session: MessageSesion, message_chain: MessageChain):
73+
# 必须实现
7374
await super().send_by_session(session, message_chain)
7475

7576
def meta(self) -> PlatformMetadata:
77+
# 必须实现,直接像下面一样返回即可。
7678
return PlatformMetadata(
7779
"fake",
7880
"fake 适配器",
7981
)
8082

8183
async def run(self):
82-
84+
# 必须实现,这里是主要逻辑。
85+
86+
# FakeClient 是我们自己定义的,这里只是示例。这个是其回调函数
8387
async def on_received(data):
8488
logger.info(data)
8589
abm = await self.convert_message(data=data) # 转换成 AstrBotMessage
86-
await self.handle_msg(abm)
87-
90+
await self.handle_msg(abm)
91+
92+
# 初始化 FakeClient
8893
self.client = FakeClient(self.config['token'], self.config['username'])
8994
self.client.on_message_received = on_received
9095
await self.client.start_polling() # 持续监听消息,这是个堵塞方法。
9196

9297
async def convert_message(self, data: dict) -> AstrBotMessage:
98+
# 将平台消息转换成 AstrBotMessage
99+
# 这里就体现了适配程度,不同平台的消息结构不一样,这里需要根据实际情况进行转换。
93100
abm = AstrBotMessage()
94-
abm.type = MessageType.GROUP_MESSAGE # 还有 friend_message,对应私聊。具体平台具体分析
95-
abm.group_id = data['group_id']
96-
abm.message_str = data['content']
97-
abm.sender = MessageMember(user_id=data['userid'], nickname=data['username'])
98-
abm.message = [Plain(text=data['content'])] # 消息链
99-
abm.raw_message = data
100-
abm.self_id = data['bot_id'],
101-
abm.session_id = data['userid']
102-
abm.message_id = data['message_id']
101+
abm.type = MessageType.GROUP_MESSAGE # 还有 friend_message,对应私聊。具体平台具体分析。重要!
102+
abm.group_id = data['group_id'] # 如果是私聊,这里可以不填
103+
abm.message_str = data['content'] # 纯文本消息。重要!
104+
abm.sender = MessageMember(user_id=data['userid'], nickname=data['username']) # 发送者。重要!
105+
abm.message = [Plain(text=data['content'])] # 消息链。如果有其他类型的消息,直接 append 即可。重要!
106+
abm.raw_message = data # 原始消息。
107+
abm.self_id = data['bot_id']
108+
abm.session_id = data['userid'] # 会话 ID。重要!
109+
abm.message_id = data['message_id'] # 消息 ID。
103110

104111
return abm
105112

106113
async def handle_msg(self, message: AstrBotMessage):
114+
# 处理消息
107115
message_event = FakePlatformEvent(
108116
message_str=message.message_str,
109117
message_obj=message,
110118
platform_meta=self.meta(),
111119
session_id=message.session_id,
112120
client=self.client
113121
)
114-
self.commit_event(message_event) # 提交事件到事件队列
122+
self.commit_event(message_event) # 提交事件到事件队列。不要忘记!
115123
```
116124

117125

0 commit comments

Comments
 (0)