├── .gitattributes ├── Dockerfile ├── LICENSE ├── README.md ├── app └── io.github.richardchien.coolqhttpapi │ └── config.cfg ├── conf └── CQP.cfg ├── docker-compose.yml ├── docs └── CloudValley-QQBot.png └── vncmain.sh /.gitattributes: -------------------------------------------------------------------------------- 1 | *.cfg linguist-language=python 2 | *.sh linguist-language=python 3 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM coolq/wine-coolq 2 | MAINTAINER Waylon Wang 3 | 4 | # 安装vim、ifconfig、ping 5 | RUN apt-get update \ 6 | && apt-get install -y vim \ 7 | && apt-get install -y net-tools \ 8 | && apt-get install -y iputils-ping \ 9 | && rm -rf /var/lib/apt/lists/* 10 | 11 | # 替换vncmain.sh 12 | WORKDIR /app 13 | COPY ./vncmain.sh vncmain.sh 14 | RUN chmod 777 vncmain.sh 15 | 16 | # 更改CoolQ的app配置 17 | WORKDIR /home/user/coolq/conf 18 | COPY ./conf/CQP.cfg CQP.cfg 19 | 20 | # 下载coolq-http-api插件 21 | WORKDIR /home/user/coolq/app 22 | ADD https://github.com/richardchien/coolq-http-api/releases/download/v2.1.0/io.github.richardchien.coolqhttpapi.cpk io.github.richardchien.coolqhttpapi.cpk 23 | RUN mkdir -p io.github.richardchien.coolqhttpapi 24 | 25 | # 更改coolq-http-api插件的配置 26 | WORKDIR /home/user/coolq/app/io.github.richardchien.coolqhttpapi 27 | COPY ./app/io.github.richardchien.coolqhttpapi/config.cfg config.cfg 28 | 29 | WORKDIR / 30 | EXPOSE 9000 31 | VOLUME /home/user/coolq/app/io.github.richardchien.coolqhttpapi 32 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 waylon wang 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CloudValley QQBot : Message Server 2 | 【云谷QQ机器人】之「消息服务器」 3 | 4 | [![License](https://img.shields.io/badge/License-MIT-orange.svg)](https://github.com/waylonwang/msg-server/master/LICENSE) 5 | [![Docker Repository](https://img.shields.io/badge/docker-cloudvalley%2Fmsg--server-green.svg)](https://hub.docker.com/r/cloudvalley/msg-server/) 6 | 7 | ## CloudValley QQBot项目 8 | ### 业务架构 9 | 【CloudValley QQBot】项目计划实现一个自动处理消息指令的QQ机器人来处理一些私有项目上的需求,本服务器是【CloudValley QQBot】项目的关键组成部分,基于[CoolQ/docker-wine-coolq](https://github.com/CoolQ/docker-wine-coolq)(CoolQ)镜像和[richardchien/coolq-http-api](https://github.com/richardchien/coolq-http-api)(HTTP API)插件整合的酷Q服务器,用于VPS挂机实现QQ收发消息服务。 10 | 11 | ![CloudValley QQBot Framework](docs/CloudValley-QQBot.png) 12 | 13 | 【CloudValley QQBot】项目的另一关键组成部分是基于[CCZU-DEV/xiaokai-bot](https://github.com/CCZU-DEV/xiaokai-bot)改造的[waylonwang/cmd-server](https://github.com/waylonwang/cmd-server)(「Command Server」)指令处理服务器,用于本服务器消息的调度与逻辑处理。 14 | 15 | ### 技术选型 16 | 【CloudValley QQBot】项目尝试了GitHub上基于SmartQQ(Web QQ) API的众多开源项目,包括采用nodejs、perl、python等语言实现的QQBot,这些QQBot除了少量特性(如@用户)无法实现外,基本的IM需求和群管需求还是可以满足的,其中部分QQBot甚至采用了插件机制得以将业务处理的逻辑与框架主体分离实现松耦合,但是由于SmartQQ并非腾讯发展的重点,且貌似已不再维护,因此采用Web QQ协议的项目都先天存在风险,尤其是时不时一些API被关停或调整影响了机器人的稳定性,因此依赖于SmartQQ存在着极大的风险。 17 | 18 | 【CloudValley QQBot】项目在最初的选型上曾经考虑过采用以酷Q为代表的安卓QQ协议来实现,但是酷Q官方以易语言来实现插件,这实在是难以接受的一种状况,因此曾经放弃了酷Q这条路线。 19 | 20 | 在经历了连续数次个别Web QQ协议(群管)被关停的风波后,【CloudValley QQBot】项目重新把目光转回到了酷Q的方案上,最终找到[richardchien/coolq-http-api](https://github.com/richardchien/coolq-http-api)插件提供了很好的扩展性且符合当代互联网开发技术的潮流,从而不再被易语言问题困扰,得以将消息的收发与指令的处理进行分离。同时[CoolQ/docker-wine-coolq](https://github.com/CoolQ/docker-wine-coolq)镜像提供了在VPS的linux系统上长期挂机的可能性,使得【CloudValley QQBot】项目能在使用docker这种热门容器技术的同时又获得了酷Q稳定可靠的完备能力。并且之后找到了[CCZU-DEV/xiaokai-bot](https://github.com/CCZU-DEV/xiaokai-bot)机器人近乎完美的实现了理想中的消息过滤与指令处理框架,【CloudValley QQBot】项目就此终于确定了目前的架构。 21 | 22 | ## Message Server 23 | ### 内容 24 | 「Message Server」镜像继承了CoolQ/docker-wine-coolq镜像和richardchien/coolq-http-api插件,当前集成的coolq-http-api版本号是v1.1.2,整合后的「Message Server」镜像中,CoolQ默认启用了"HTTP API"插件和"状态监控"插件。 25 | 26 | ### 预备 27 | 首先你需要准备一个可以长期运行docker的操作系统环境,建议安装好docker-compose以便运行YAML文件,另外,如果你不太适应docker的命令交互方式,可以安装docker-ui使用图形化界面进行操作。 28 | 29 | 由于cloudvalley/msg-server镜像文件有1.6GB的容量,在国内拉取会非常慢,建议先配置国内的mirror服务来加速下载: 30 | ``` 31 | curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://51418756.m.daocloud.io 32 | ``` 33 | 有关daocloud mirror服务的详细说明请参见[配置 Docker 加速器](https://www.daocloud.io/mirror#accelerator-doc) 34 | ### 拉取镜像 35 | 「Message Server」的docker镜像可通过以下命令获得: 36 | ``` 37 | docker pull cloudvalley/msg-server 38 | ``` 39 | ### 运行前配置 40 | "HTTP API"插件的post_url配置项指向了`http://127.0.0.1:8888/coolq_http_api/REPLACE_QQ_ACCOUNT/`,如果启动容器时配置了COOLQ_ACCOUNT环境变量,post_url配置项中的REPLACE_QQ_ACCOUNT会被替换成COOLQ_ACCOUNT的变量值,【CloudValley QQBot】项目默认采用[waylonwang/cmd-server](https://github.com/waylonwang/cmd-server)作为指令处理服务器,你可以随时修改该配置为自己的指令处理服务器。 41 | CoolQ所使用的环境变量可在docker-compose.yml文件中直接修改,信息的配置内容请参见[CoolQ/docker-wine-coolq](https://github.com/CoolQ/docker-wine-coolq)原作者的描述。 42 | 43 | ### 运行容器 44 | 通过docker-compose命令来直接执行docker-compose.yml文件,如本地尚未拉取镜像则会自动拉取: 45 | ``` 46 | docker-compose up -d 47 | ``` 48 | 49 | 运行以上docker-compose命令同时会创建名为msg-server的容器,除了docker-compose命令外,你也可以通过docker run命令创建容器来运行本服务器: 50 | ``` 51 | docker run --name msg-server -p 9000:9000 -e "VNC_PASSWD=123456" -e "COOLQ_ACCOUNT=替换为QQ号" -d cloudvalley/msg-server 52 | ``` 53 | ### 运行后配置 54 | CoolQ登录必须通过VNC来操作,配置好"HTTP API"插件后,访问 `http://你的IP:9000` 输入密码123456即可以打开一个 VNC 页面登录QQ,要注意的是,由于novnc本身的原因,VNC页面如果点击无响应的话刷新页面重新连接VNC即正常可操作了。 55 | 56 | ### 局限性 57 | 【CloudValley QQBot】项目目前用于私有项目,从安全角度出发直接通过docker的“container”网络模式将「Command Server」与「Message Server」的IP合并到一起进行本地调用,因此「Message Server」并未开放"HTTP API"插件的API端口到外部,如你需要通过外部直接调用"HTTP API"插件的API,请自行修改docker-compose.yml文件或docker run命令映射端口实现外部的访问。 58 | -------------------------------------------------------------------------------- /app/io.github.richardchien.coolqhttpapi/config.cfg: -------------------------------------------------------------------------------- 1 | [general] 2 | host=0.0.0.0 3 | port=5700 4 | post_url=http://127.0.0.1:5600/coolq_http_api/REPLACE_QQ_ACCOUNT/ 5 | token=LRqxVa7G3a9c 6 | pattern= 7 | -------------------------------------------------------------------------------- /conf/CQP.cfg: -------------------------------------------------------------------------------- 1 | [App] 2 | com.coxxs.start.status=0 3 | io.github.richardchien.coolqhttpapi.status=1 4 | com.coxxs.status.status=1 5 | com.coxxs.tuling123.status=0 6 | [Main] 7 | StatusApp=com.coxxs.status 8 | StatusAppID=1 9 | StatusX=650 10 | StatusY=470 11 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | msg-server: 4 | image: cloudvalley/msg-server 5 | container_name: msg-server 6 | network_mode: 'bridge' 7 | expose: 8 | - '9000' 9 | ports: 10 | - '9000:9000' 11 | - '5600:5600' 12 | - '5700:5700' 13 | - '5800:5800' 14 | volumes: 15 | - ~/msg-server/app/io.github.richardchien.coolqhttpapi:/home/user/coolq/app/io.github.richardchien.coolqhttpapi 16 | - ~/msg-server/conf:/home/user/coolq/conf 17 | - ~/data/msg-server:/home/user/coolq/data 18 | - /tmp:/tmp 19 | environment: 20 | - VNC_PASSWD=123456 21 | - COOLQ_ACCOUNT=替换为登录的QQ号 22 | restart: always 23 | -------------------------------------------------------------------------------- /docs/CloudValley-QQBot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/waylonwang/msg-server/b1720270a182546500b3d9f12f1ebf1d8944cae2/docs/CloudValley-QQBot.png -------------------------------------------------------------------------------- /vncmain.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Set them to empty is NOT SECURE but avoid them display in random logs. 3 | export VNC_PASSWD='' 4 | export USER_PASSWD='' 5 | 6 | export TERM=linux 7 | 8 | while true; do 9 | # 检查进程是否存在 10 | process=`ps aux | grep 'CQ.\.exe'` 11 | if [ "$process" == '' ]; then 12 | # 如果设置了COOLQ_ACCOUNT,将HTTP API的地址中的QQ号替换成COOLQ_ACCOUNT 13 | if [ $COOLQ_ACCOUNT != '' ]; then 14 | sed -i "s/REPLACE_QQ_ACCOUNT/$COOLQ_ACCOUNT/g" ~/coolq/app/io.github.richardchien.coolqhttpapi/config.cfg 15 | fi 16 | # 不存在则重启 17 | wine ~/coolq/CQ?.exe /account $COOLQ_ACCOUNT 18 | # 进程退出后等待 30 秒后再检查,避免 CQ 自重启导致误判 19 | sleep 30 20 | else 21 | # 存在则说明是别的途径启动的,多等一会儿吧 22 | sleep 100 23 | fi 24 | done 25 | --------------------------------------------------------------------------------