QQBot Cqhttp服务器配置

配这个一开始的时候还有点蒙,在这里记录一下。

看到QQ指令机器人,心血来潮打算自己也下个cqhttp配一配,然后就有了这篇博客。

QQ指令机器人的历史还是相当古老的。10年左右QQ推出了webQQ,基于http协议下的通信特别方便进行抓包篡改,于是就有了酷Q机器人这个小东西。

而cqhttp也是相当轻量级的,在一开始的时候mrds一行人只打算做一个路由器上可以跑的酷Q,现在已经发展成为了一个成熟的机器人。

下面来一点配置过程:

1、进入cqhttp仓库所在地址:

https://github.com/Mrs4s/go-cqhttp/releases/tag/v1.2.0

下载linux环境下对应的安装包进行安装。

 

2、安装完成后在根目录~/下新建一个文件夹,比如QQBot,直接运行go-cqhttp,这时会在文件夹下生成一些配置文件:

 

 

进入config.yml文件:

 在这里修改好用户名。

 可以看到这里还有签名服务器需要配置,我们接下来要解决。

 

3、再运行的时候一般会出现一些问题:

 提示签名服务器不可用。

这个时候我们就要用到docker,docker的下载安装过程参考:这边这边

下面我们要进行签名服务器的配置

由于别人已经造好轮子了,可以直接用这一行命令进行run:

sudo docker run -d --restart=always --name qsign -p 7778:8080 hansaes/unidbg-fetch-qsign:latest

这样就可以啦!签名服务器跑起来了。

 

 

4、最后还要在原config.yml下更新关于服务器的配置:

一切配置正常的话就可以看到go-cqhttp正常启动:

 

 

 

5、新建QQBot网络转发程序

在一个文件夹下配置:

bot.py:

复制代码
import re

from receive import rev_msg
from send_msg import send_msg
import socket
import requests
import random
import urllib.request, json

while True:
    try:
        rev = rev_msg()
        print(rev)
        if rev == None:
            continue
    except:
        continue

    if rev["post_type"] == "message":
        if rev["message_type"] == "private":  # 私聊

            if '在吗' in rev['raw_message']:
                qq = rev['sender']['user_id']  # 获取消息发出者的qq号
                send_msg({'msg_type': 'private', 'number': qq, 'msg': '我在'})  # 发送

            if '不知道' in rev['raw_message']:
                qq = rev['sender']['user_id']  # 获取消息发出者的qq号
                send_msg({'msg_type': 'private', 'number': qq, 'msg': '我也不知道'})  # 发送

            if '醒了' in rev['raw_message']:
                qq = rev['sender']['user_id']  # 获取消息发出者的qq号
                send_msg({'msg_type': 'private', 'number': qq, 'msg': '自动回复!!!'})  # 发送


        elif rev["message_type"] == "group":  # 群聊
            group = rev['group_id']
            if '在干嘛' in rev['raw_message']:
                qq = rev['sender']['user_id']
                send_msg({'msg_type': 'group', 'number': group, 'msg': '在干嘛'})
            if '逆天' in rev['raw_message']:
                qq = rev['sender']['user_id']
                send_msg({'msg_type': 'group', 'number': group, 'msg': '逆天'})
            if '在吗' in rev['raw_message']:
                qq = rev['sender']['user_id']
                send_msg({'msg_type': 'group', 'number': group, 'msg': '你好'})
        else:
            continue
    else:  # rev["post_type"]=="meta_event":
        continue
复制代码

 

receive.py:

复制代码
import socket
import json

ListenSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ListenSocket.bind(('127.0.0.1', 5701))
ListenSocket.listen(100)
HttpResponseHeader = '''HTTP/1.1 200 OK\r\n
Content-Type: text/html\r\n\r\n
'''


def request_to_json(msg):
    for i in range(len(msg)):
        if msg[i] == "{" and msg[-1] == "\n":
            return json.loads(msg[i:])
    return None


# 需要循环执行,返回值为json格式
def rev_msg():  # json or None
    Client, Address = ListenSocket.accept()
    Request = Client.recv(1024).decode(encoding='utf-8')
    rev_json = request_to_json(Request)
    Client.sendall((HttpResponseHeader).encode(encoding='utf-8'))
    Client.close()
    return rev_json
复制代码

 

send_msg.py:

复制代码
import socket

port = 5700


def send_msg(resp_dict):
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    ip = '127.0.0.1'
    client.connect((ip, port))

    msg_type = resp_dict['msg_type']  # 回复类型(群聊/私聊)
    number = resp_dict['number']  # 回复账号(群号/好友号)
    msg = resp_dict['msg']  # 要回复的消息

    # 将字符中的特殊字符进行url编码
    msg = msg.replace(" ", "%20")
    msg = msg.replace("\n", "%0a")

    if msg_type == 'group':
        payload = "GET /send_group_msg?group_id=" + str(
            number) + "&message=" + msg + " HTTP/1.1\r\nHost:" + ip + f":{port}\r\nConnection: close\r\n\r\n"
    elif msg_type == 'private':
        payload = "GET /send_private_msg?user_id=" + str(
            number) + "&message=" + msg + " HTTP/1.1\r\nHost:" + ip + f":{port}\r\nConnection: close\r\n\r\n"
    print("发送" + payload)
    client.send(payload.encode("utf-8"))
    client.close()
    return 0
复制代码

 

可以跑起来,但是不是QQBot回车指令的效果,QQBot之后再配。

 

posted @   Thaudmin  阅读(412)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示