在Ubuntu服务器上搭建QQ机器人

最近有使用QQ开发机器人的需求,酷Q是现在广泛使用的QQ机器人,但是酷Q只适用于windows平台,而手头现在只有一台阿里云上的Ubuntu16.04服务器。在查阅了相关的资料后,终于找到一条可以使用的路线。

需求环境

硬件:一台服务器
系统:Ubuntu16.04,理论上支持各类linux系统
软件

  • python 3.6 以上
  • Django
  • Ubuntu Server 16.04 LTS & Docker CE

配置docker

首先,在服务器上安装酷Q的docker以支持酷Q在Ubuntu系统上的运行。

参考连接:酷Q on docker

之前没接触过docker,这次算是碰了一鼻子灰。有理解错误的地方欢迎指正。

确定docker正确安装之后,使用以下命令来安装酷Q镜像:

docker pull coolq/wine-coolq

之后,在任意目录下新建一个文件夹,比如:

mkdir /root/coolq-data # 任意路径均可

运行docker镜像

docker run --name=coolq --rm -p 8080:9000 -p 5700:5700 -v /root/coolq-data:/home/user/coolq -e VNC_PASSWD=12345678 -e COOLQ_ACCOUNT=123456 coolq/wine-coolq

其中,–rm可以换成-d,就可以以服务的形式在后台运行,并使用以下命令控制:

docker start coolq # 启动
docker stop coolq # 终止
docker logs coolq # 查看

另外的可以修改的参数包括:

参数
-p 8080:9000可以把8080改到任意端口,用于使用浏览器连接docker的桌面。
-p 5700:5700可以把前一个5700改成任意端口,用于连接酷Q的HTTP API。
-v /root/coolq-data可以改成之前新建的文件夹,用于做文件夹储存位置的映射
VNC_PASSWD=12345678可以自己设置密码,用于连接docker的远程桌面
COOLQ_ACCOUNT=123456登录的机器人的QQ号

运行后,会看到控制台中输出一系列日志。当你看到 [CQDaemon] Started CoolQ . 时,说明已启动成功。
此时,在浏览器中访问 http://你的服务器IP:你的端口 即可看到远程操作登录页面,输入密码,看到 酷Q Air 登录界面即为成功。
在这里插入图片描述
此时,在新建的文件夹下会多出酷Q的相关文件,文件结构和在windows平台一样。在app文件夹下可以放入cpk文件添加插件。

配置HTTP API

酷Q HTTP API,以酷Q的一个插件形式存在,下载地址
基本上,它在启动后会自动搭建一个HTTP服务器,向其发送标准HTTP形式的请求命令即可实现对酷Q的调用。同时,酷Q接收到的信息会通过它转发到配置的地址,这样就避免了复杂的酷Q的开发。之前也试过使用python api,但是由于在服务器上酷Q是运行在docker里,给docker里再装一个python这太麻烦了。

下载好io.github.richardchien.coolqhttpapi.cpk文件后,将其放在之前建的酷Q文件夹下的app文件夹下,这时可以在远程桌面上的酷Q悬浮窗上单击右键,点击应用管理,重载应用后即可看到有HTTP API的插件。
在这里插入图片描述
点击该插件,点击启用,会弹出一个命令行窗口记录日志,不要关闭该窗口。

{酷Q文件夹}/data/app下面,会生成一个io.github.richardchien.coolqhttpapi文件夹,其中会生成config/{登录QQ}.json文件。

打开对其配置,在"post_url": ""一项中,填入上报的服务器的地址即可实现对酷Q接收到的信息的转发,转发会以HTTP Post的形式发送,具体格式参照下面的资料和下一节。

此时HTTP API安装完成,参考如下资料来对API进行学习和测试:HTTP API

搭建处理服务器

现在酷Q提供了一个HTTP的接口供调用了,那么我们就可以搭建一个用于处理具体逻辑的服务器,来处理酷Q的信息了。

在这里我选用的是python的Django框架,当然其他语言的其他框架都是可以的。关于框架的使用,不在这里详述。

建立一个工具类用于向酷Q发送命令,代码如下:
utils.CQSDK.py

import requests
import json
import os
import logging
import utils.log
import urllib.parse


url = ""  # 设置为酷Q服务器地址
logger = logging.getLogger(utils.log.Logger.LOGGER_NAME)


def read_config_url():
    global url

    print(os.path.abspath(os.path.dirname(__file__)))
    if url != "":
        return url

    with open("config.json", 'r', encoding="utf-8") as f:
        content = json.load(f)
        url = content['coolq_server_url']
        return url


def execute_bak(cmd, json_obj):
    target_url = "{url}/{prefix}".format(url=read_config_url(), prefix=cmd)

    response = requests.post(target_url, data=str(json_obj), headers={"Encode": "UTF-8", "Content-Type": "application/json"})
    print(response.text)


def execute(cmd, json_obj):
    target_url = "{url}/{prefix}".format(url=read_config_url(), prefix=cmd)
    logger.info("Send get request to {}".format(target_url))
    response = requests.get(target_url, params=json_obj)
    print(response.text)


def send_private_msg(qq, msg):
    # 使用该接口向私聊发送信息
    json_obj = {
        "user_id": qq,
        "message": msg
    }
    execute("send_private_msg", json_obj)


def send_group_msg(group_id, msg):
    # 使用该接口向群聊发送信息
    json_obj = {
        "group_id": group_id,
        "message": msg
    }
    execute("send_group_msg", json_obj)

接收到信息后,进行业务处理,并使用该接口进行返回即可完成完整逻辑。
参考:项目github

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
评论 2

打赏作者

mottled233

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值