如何创造自己的QQ机器人
与QQ服务器的通信
与QQ服务器的通信采用Lagrange.OneBot,下面是项目的仓库地址
从仓库的release 下载对应系统的包,windows下载WINx64就可以了
下载后找个文件夹解压,点击Lagrange.OneBot.exe运行,出现二维码后关闭,点开appsettings.json
下面是一个可行的配置,请自行去除注释使用
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"SignServerUrl": "",
"SignProxyUrl": "",
"MusicSignServerUrl": "",
"Account": {
"Uin": 0,
"Password": "",
"Protocol": "Linux",
"AutoReconnect": true,
"GetOptimumServer": true
},
"Message": {
"IgnoreSelf": true,
"StringPost": false
},
"QrCode": {
"ConsoleCompatibilityMode": false
},
"Implementations": [
{
"Type": "ReverseWebSocket",
"Host": "127.0.0.1",
"Port": 8080,
"Suffix": "/onebot/v11/ws",
"ReconnectInterval": 5000,
"HeartBeatInterval": 5000,
"AccessToken": ""
},
{
"Type": "Http",
"Host": "127.0.0.1", //监听地址
"Port": 8083, //访问的端口
"AccessToken": "123456" //token,可以看成密码,不懂的可以留空,但是不要把没有token的端口开到公网
},
{
"Type": "HttpPost", //反向HTTP地址,会将消息转发到这个地址的后端
"Host": "127.0.0.1",
"Port": 8082,
"Suffix": "/upload",
"HeartBeatInterval": 5000,
"HeartBeatEnable": true,
"AccessToken": "",
"Secret": ""
}
]
}
没有注释的可以不用更改,保存之后再点击Lagrange.OneBot.exe用二维码扫描登陆QQ,之后登录不用再配置
如果掉登录了删除keystrore.json和device.json之后扫描再次登录即可
这里与QQ通信的部分就配置完成了
消息处理后端
预备知识
-
至少一个了解一个后端框架
-
了解http协议的大概
-
json格式数据
这里采用python 的flask作为例子(比较简易)(这个只是一个例子,具体的消息逻辑和异步管理需要自己去更细实现)
- pip 安装flask (具体步骤自行搜索)
from flask import Flask, request
import requests
import json
- 首先一个最基本的flask app
@app.route('/') #挂载路径为根路径,即可以通过http://127.0.0.1/ 访问这个接口 返回Hello, World!
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run(host='127.0.0.1', port=8082)
- 现在我们向这个app添加逻辑
def send_private_msg(user_id, message): #发送私聊消息的函数
return
@app.route('/') #挂载路径为根路径,即可以通过http://127.0.0.1/ 访问这个接口 返回Hello, World!
def hello_world():
return 'Hello, World!'
@app.route('/upload', methods=['POST'])
def upload():
data = request.get_json() #获取post的内容
if "interval" in data :
return 'OK' #跳过心跳数据包
if 'message_type' in data: #如果是消息
msg = data['raw_message']
if data['message_type'] == 'private': #如果收到私聊消息
msg = data['raw_message']
send_private_msg(data['user_id'],msg) #回复一样的消息
return 'OK'
return 'ok'
if __name__ == '__main__':
app.run(host='127.0.0.1', port=8082)
- 现在我们添加发送的逻辑
def send_private_msg(user_id, message): #发送私聊消息的函数
data = {
'user_id': user_id,
'message': message
}
# 使用bearer token
headers = {
'Authorization ': 'Bearer ' + 'your_token' , #之前配置Lagrange.OneBot没有使用token的请删除这个
'Content-Type': 'application/json'
}
requests.post('http://127.0.0.1:8083/send_private_msg', json=data, headers=headers) #发送消息接口
return
@app.route('/') #挂载路径为根路径,即可以通过http://127.0.0.1/ 访问这个接口 返回Hello, World!
def hello_world():
return 'Hello, World!'
@app.route('/upload', methods=['POST'])
def upload():
data = request.get_json() #获取post的内容
if "interval" in data :
return 'OK' #跳过心跳数据包
if 'message_type' in data: #如果是消息
msg = data['raw_message']
if data['message_type'] == 'private': #如果收到私聊消息
msg = data['raw_message']
send_private_msg(data['user_id'],msg) #回复一样的消息
return 'OK'
return 'ok'
if __name__ == '__main__':
app.run(host='127.0.0.1', port=8082)
运行这个文件和Lagrange.OneBot.exe,现在我们就有了一个会在私聊回复你消息的bot啦
后续可以自行添加更复杂的逻辑,比如说处理群聊消息或者接入大模型等
参考文档
-
botuniverse/onebot-11: OneBot 11 标准 (github.com) 从这里可以找到发送群聊,语音消息的接口定义,用法参考私聊发送消息
-
快速部署 & 配置 | Lagrange 文档 (lagrangedev.github.io) Lagrange.OneBot文档