QQ 机器人框架
我只用过 napcat,所以接下来的介绍都是基于 napcat 的,可以类比理解 qq 机器人框架的工作机制。
napcat 实现的是作为 qq 客户端并提供使用指定协议进行交互的 api。
直接说明各个部分需要实现的功能或许更好理解。
- napcat:qq 登录,发送 qq 消息,接受 qq 消息,提供 api
- 机器人程序:与 napcat 建立连接,通过 napcat 提供的 api 获取信息并处理信息,通过 napcat 提供的 api 控制 napcat 的行为
napcat 提供 webui 作为控制界面。
napcat 提供多种网络配置,有基于 http 协议和 websocket 协议的客户端和服务端。
API
OneBot 是一个聊天机器人应用接口标准,OneBot 提供统一的接口标准,让机器人应用可以跨平台运行。
NapCatQQ 实现了 Onebot 的大部分 API,对于 API 的详细说明请自行点击导航协议或者链接查看相关实现。
详细 NapCatQQ All API 用例参考 https://napcat.apifox.cn
接收与发送消息
创建 websocket 客户端。
Python
async def main ():
ws1 = await websockets.serve (handler, "127.0.0.1", 8090)
print ("正在监听 8090")
await asyncio.Future ()Pythonhandler 是传入的处理器函数,定义对接收消息的处理逻辑。
Python
async def handler (ws1):
# 接受消息群白名单
whitelist_group = []
print ("napcat 已连接")
async for msg in ws1:
data = json.loads (msg)
print ("收到事件:", data)
raw_message = data.get ("raw_message")
group_id = data.get ("group_id")
# 帮助
if isinstance (raw_message, str) and raw_message == "/help" and group_id in whitelist_group:
print ("帮助")
Msg_help = ''
# 发送消息函数
await sendMsg_help (ws1 ,group_id, Msg_help)PythonPython
async def sendMsg_help (ws1, group_id, message_content):
msg = {
"action": "send_group_msg",
"params": {
"group_id": group_id,
"message": message_content
},
"echo": "msg_" + str (group_id)
}
await ws1.send (json.dumps (msg))
print (f"已发送消息给群 {group_id}")
resp = await ws1.recv ()
print (resp)Python
Comments NOTHING