@@ -50,14 +50,14 @@ import asyncio
5050
5151from astrbot.api.platform import Platform, AstrBotMessage, MessageMember, PlatformMetadata, MessageType
5252from 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 # 消息链中的组件,可以根据需要导入
5454from astrbot.core.platform.astr_message_event import MessageSesion
5555from astrbot.api.platform import register_platform_adapter
5656from astrbot import logger
5757from .client import FakeClient
5858from .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