如何创造自己的QQ机器人

如何创造自己的QQ机器人

与QQ服务器的通信

与QQ服务器的通信采用Lagrange.OneBot,下面是项目的仓库地址

LagrangeDev/Lagrange.Core: An Implementation of NTQQ Protocol, with Pure C#, Derived from Konata.Core (github.com)

从仓库的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啦

后续可以自行添加更复杂的逻辑,比如说处理群聊消息或者接入大模型等

参考文档

高老师自动回复的GPT bot是用这个框架做的吗

是这样的