Rat's

一个二次元搜图、搜番、搜本子QQ机器人,支持SauceNAO、WhatAnime、Ascii2d等网站
说明:CQ-picfinder-robot是一个由綺凜博主使用Nodejs编写的酷Q机器人插件,集成多个优秀的项目...
扫描右侧二维码阅读全文
11
2019/06

一个二次元搜图、搜番、搜本子QQ机器人,支持SauceNAO、WhatAnime、Ascii2d等网站

说明:CQ-picfinder-robot是一个由綺凜博主使用Nodejs编写的酷Q机器人插件,集成多个优秀的项目,使其用于搜图、搜番、搜本子,并夹带了许多娱乐向功能;原理就是利用SauceNAOWhatAnimeAscii2d搜索出自PixivTwitterDanbooru20多个站点的插画、本子、动漫。你只需要一张图片,就可以精准定位其图片、本子、动漫的出处,使用方法也是很简单的,不过貌似都是在Windows上使用,毕竟很方便,这里就发下在Linux VPS中的使用方法。

截图

请输入图片描述

安装

Github地址:https://github.com/Tsuk1ko/CQ-picfinder-robot

说明:该插件必须配合酷Q一起使用,且需要启动CoolQ HTTP API插件,并将配置文件use_ws设置为true,可参考:插件使用文档

提示:如果你的VPS内存过小,包括512M内存,建议加点虚拟内存,Swap一键脚本→传送门

1、安装CoolQ机器人

提示:想要完整的功能的,建议使用Pro;不过Pro也不是必须的,Air也可以,但Air无法发送图片,某些功能会受限,但能满足基本使用。

如果你用Windows系统,则自行安装;Linux系统,则使用Docker安装,这里就使用带CoolQ HTTP API插件的CoolQ Docker镜像,具体步骤如下。

安装Docker

#CentOS 6
rpm -iUvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum update -y
yum -y install docker-io
service docker start
chkconfig docker on

#CentOS 7、Debian、Ubuntu
curl -sSL https://get.docker.com/ | sh
systemctl start docker
systemctl enable docker

安装CoolQ

#安装酷Q Air图灵版
docker run --name wine-coolq -d \
-v /coolq:/home/user/coolq \
-p 9000:9000 \
-p 6700:6700 \
-e VNC_PASSWD=moerats \
richardchien/cqhttp

#安装酷Q Pro图灵版
docker run --name wine-coolq -d \
-v /coolq:/home/user/coolq \
-p 9000:9000 \
-p 6700:6700 \
-e VNC_PASSWD=moerats \
-e COOLQ_URL=https://dlsec.cqp.me/cqp-tuling \
richardchien/cqhttp

参数大致说明:

-p 将内部的Web运行端口9000映射到外部的9000,可自行修改端口。
-v 将内部酷Q和其数据文件夹/home/user/coolq映射到外部的/coolq文件夹,可自行修改路径。
-e VNC_PASSWD为VNC密码。注意该密码不能超过8个字符,默认MAX8char。

再删掉默认的配置文件,不然后面可能不会生成特定的QQ配置文件,使用命令:

rm -rf /coolq/app/io.github.richardchien.coolqhttpapi/config/general.ini

然后就可以访问http://ip:9000,输入VNC页面密码,文中默认moerats,即可看到一个酷Q已经启动,如果是Pro的话,会先要你输入授权码。

如果打不开界面,还需要开启9000端口,一般出现在CentOS系统,开启如下:

#CentOS 6
iptables -I INPUT -p tcp --dport 9000 -j ACCEPT
service iptables save
service iptables restart

#CentOS 7
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --reload

有些服务器,比如阿里云,谷歌云等都还需要在面板安全组开启该端口。

第一次登录QQ账号会生成特定的CoolQ HTTP API配置文件,路径为app/io.github.richardchien.coolqhttpapi/config,然后进行如下修改:

#注意每次更换新的QQ号登录机器人,都要进行该操作
1、根据路径找到配置文件,格式为QQ号.json
2、编辑配置文件,将use_ws后面的false改为true

#不想麻烦的,可以直接ssh客户端使用命令修改,命令如下:
sed -i 's#"use_ws": false#"use_ws": true#g' /coolq/app/io.github.richardchien.coolqhttpapi/config/*.json

接下来在VNC页面,右键右下角悬浮球,快速重启机器人即可。

2、安装Nodejs

#Debian/Ubuntu系统
curl -sL https://deb.nodesource.com/setup_10.x | bash -
apt install -y git nodejs 

#CentOS系统
curl -sL https://rpm.nodesource.com/setup_10.x | bash -
yum install nodejs git -y

3、安装CQ-picfinder-robot

#拉取项目
git clone https://github.com/Tsuk1ko/CQ-picfinder-robot.git
cd CQ-picfinder-robot
#复制配置文件
cp config.default.json config.json
#安装依赖
npm i
#安装pm2
npm install -g pm2

config.json配置文件参考如下:

#别直接将下面配置文件复制进去,JSON是不允许注释的,仅供参考
{
    //前面这几项配置请参考https://github.com/momocow/node-cq-websocket/blob/master/docs/api/CQWebSocket.md#cqwebsocketoption
    "host": "127.0.0.1",
    "port": 6700,
    "enableAPI": true,
    "enableEvent": true,
    "access_token": "",
    "reconnection": true,
    "reconnectionAttempts": 10,
    "reconnectionDelay": 5000,
    //以下开始都是搜图机器人配置
    "picfinder": {
        "debug": false,            //调试模式,启用后会在控制台输出每次查询的返回文本
        "admin": -1,               //指定管理者QQ,请务必设置
        "autoAddFriend": false,    //自动同意好友申请(false则忽略,但不会拒绝)
        "addFriendAnswers": [],    //根据问题回答同意好友申请(后续详解
        "autoAddGroup": false,     //自动同意入群申请(false同上,但可以用命令手动允许,后续有说明)
        "searchLimit": 30,         //每名用户每日搜索次数限制
        //复读机
        "repeat": {
            "enable": true,        //开关
            "times": 3,            //当检测到某个群有这么多次相同发言后会概率参与复读
            "probability": 40,     //复读概率(百分比)
            "commonProb": 0.1      //日常复读概率(百分比)
        },
        //setu功能
        "setu": {
            "enable": false,       //是否启用
            "allowPM": true,       //是否允许私聊使用
            "pximgProxy": "",      //设置发送setu时使用的反向代理,后续详解
            "deleteTime": 30,      //发送后这么多秒自动撤回(0则不撤回,下同)
            "cd": 600,             //使用冷却时间(秒),每名用户独立,0则无冷却
            "limit": 30,           //每名用户每日次数限制
            "whiteGroup": [],      //群组白名单(请按照json数组格式填写)
            "whiteOnly": false,    //仅允许白名单群使用(与上面的私聊使用是独立的)
            "whiteCd": 0,          //白名单群组的使用冷却时间
            "whiteDeleteTime": 0   //白名单群组的撤回时间
        },
        //指令正则表达式
        "regs": {
            //开启搜图模式
            "searchModeOn": "竹竹搜[图圖]",
            //关闭搜图模式
            "searchModeOff": "[谢謝]+竹竹",
            //签到
            "sign": "我(.*)签到",
            //setu
            "setu": "(竹竹.*[来來发發给給].*[色瑟][图圖])|(--setu)"
        },
        //回复
        "replys": {
            //默认回复
            "default": "必须要发送图片我才能帮你找噢_(:3」」\n支持批量!",
            //调试模式时
            "debug": "维护升级中,暂时不能使用,抱歉啦~",
            //个人搜索次数到达上限时
            "personLimit": "您今天搜的图太多辣!休息一下明天再来搜吧~",
            //搜索失败时
            "failed": "搜索失败惹 QAQ\n有可能是服务器网络爆炸,请重试一次",
            //签到相关
            "sign": "签到成功,送您10个赞!",
            "signed": "您今天已经签到过啦_(:3」∠)_",
            //开启搜图模式
            "searchModeOn": "了解~请发送图片吧!支持批量噢!\n如想退出搜索模式请发送“谢谢竹竹”",
            //已经开启搜图模式
            "searchModeAlreadyOn": "您已经在搜图模式下啦!\n如想退出搜索模式请发送“谢谢竹竹”",
            //关闭搜图模式
            "searchModeOff": "不用谢~",
            //已经关闭搜图模式
            "searchModeAlreadyOff": "にゃ~",
            //setu冷却中
            "setuLimit": "乖,要懂得节制噢 →_→",
            //setu请求错误
            "setuError": "瑟图服务器爆炸惹_(:3」∠)_",
            //其他不满足发送setu的条件
            "setuReject": "很抱歉,该功能暂不开放_(:3」」"
        },
        //OCR(详细见“附加功能”)
        "ocr": {
            "use": "ocr.space", //选择使用的OCR服务
            "ocr.space": {
                "defaultLANG": "eng",
                "apikey": ""
            },
            "baidubce": {
                "useApi": "accurate_basic",
                "apiKey": "",
                "secretKey": ""
            }
        },
        //明日方舟公开招募计算器(详细见“附加功能”)
        "akhr": {
            "enable": false,    //true则启用
            "ocr": "ocr.space"  //选择使用的OCR服务
        }
    },
    //数据库配置(用于缓存搜图结果)
    "mysql": {
        "enable": false,       //是否开启缓存功能
        "expire": 172800,      //缓存时间(秒),默认为两天(172800秒)
        "host": "127.0.0.1",   //数据库地址
        "port": 3306,          //端口
        "db": "",              //数据库名
        "user": "",            //用户名
        "password": "",        //密码
        "expire": 172800       //缓存时间
    },
    //Saucenao地址,一般请不要动,除非你猜到了我提供此设置的意义(
    "saucenaoHost": [
        "saucenao.com"
    ],
    //WhatAnime的域名,同上
    "whatanimeHost": [
        "trace.moe"
    ]
}

启动及其它运行命令:

#运行
npm run pm2start
#停止
npm run pm2stop
#重启
npm run pm2restart
#查看日志
npm run pm2log

启动成功后建议查看下日志,如果显示连接成功即安装成功。

使用

1、日常使用

#私聊
1、直接发送图片即可
2、详见下方搜图模式说明

#群组&讨论组
1、@机器人并发送图片
2、详见下方搜图模式说明(群限定)
3、特别地,在群组中可以发送符合配置中正则表达式的发言以进入搜图模式,在搜图模式中,发送的所有图片即使不@也会被搜图,此功能通常用于在手机上无法在转发图片时@的情况;另外,进入搜图模式后也请务必记得退出搜图模式!

#可以在同一条消息中包含多张图片(针对PC),会自动批量搜索

#搜索图片时可以在消息内包含以下参数来指定搜索范围或者使用某项功能,参数之间互斥,优先级从上到下
1、--get-url:获取图片的在线链接(不会搜图)
2、--a2d:使用 ascii2d 进行搜索(优势在于可搜索局部图)
3、--pixiv:从P站中搜索
4、--danbooru:从Danbooru中搜索
5、--book:搜索本子
6、--anime:搜索番剧

#如果saucenao得到的结果相似度低于60%,会自动使用ascii2d进行搜索

#如果搜索到本子,会自动在 nhentai 中搜索并返回链接(如果有汉化本会优先返回汉化本链接)

#如果搜到番剧,会自动使用WhatAnime搜索番剧详细信息
1、AnimeDB与WhatAnime的结果可能会不一致,是正常现象,毕竟这是两个不同的搜索引擎
2、同时展示这两个搜索的目的是为了尽力得到你可能想要的识别结果

2、搜图模式

#搜图模式存在的意义是方便手机用户在转发图片等不方便在消息中夹带@或搜图参数的情况下指定搜索库

#在私聊时直接发送图库关键字
此时你发出来的下一张图(只有下一张,也就是一次性的)会使用指定搜索库

#在群组中发送符合配置中正则表达式的发言进入搜图模式
1、此时你发出的所有图片都会被搜图(默认使用全范围搜索)
2、发送图库关键字后,你后续发出的所有图片都会使用你指定的搜索库
3、每次使用完后请务必记得退出搜图模式啊,同理,也是发送符合配置中正则表达式的发言

#图库关键字:
1、all:默认的全范围搜索模式
2、以下与上方“日常使用”中描述的搜索参数功能相同
pixiv
danbooru
book
anime

3、处理好友申请

#如果在QQ中设置选择“允许任何人”,则直接通过,酷Q无法干预

#如果选择“需要验证信息”,则是否通过由autoAddFriend设置项决定

#如果选择“需要正确回答问题”,则是否通过由对方的回答决定,酷Q无法干预

#如果选择“需要回答问题并由我确认”,则在autoAddFriend为true,且addFriendAnswers数组不为空的情况下会进行判断,只有对方的回答与addFriendAnswers的设置完全一致才会同意

autoAddFriendfalse时不会主动拒绝申请,只是忽略申请而已,autoAddGroup同理。

addFriendAnswers配置规则:

#请将问题的答案顺次作为addFriendAnswers数组的元素写入,例:
"addFriendAnswers": [
    "问题一的答案",
    "问题二的答案"
]

目前貌似最多只可以设置两个问题,请一定要写入与问题个数相等数量的元素,多写会爆炸的。

如果你设置了两个问题但是只在addFriendAnswers数组中写了一个元素,那么只会验证第一个问题。

4、手动同意进群申请
当你设定了picfinder.admin为你自己的QQ后,假如123456789是你需要让机器人加的群,向机器人私聊发送--add-group=123456789,此时:

#如果该群之前已经在机器人处于运行状态的时候邀请过机器人,那么该邀请会被直接同意

#如果之前没有邀请过,那么下一次邀请将会被同意

#以上两种操作都是一次性的

5、封禁用户/群组
发送--ban-u=Q号或--ban-g=群号,该封禁功能并不是真的拉入黑名单,仅仅是忽略用户/群的发言,如果想解封请自行编辑data/ban.json删除对应Q号/群号。

更多配置和使用说明可以直接看下Github说明→传送门

说明

#为什么有时候搜不想要的出结果?
需要说明的是,搜图引擎发现新图片并收录也是需要时间的,因此画师刚上传的画作一般情况下是没办法搜到的

另外,搜图时发送的图片必须是刚好完整的图片,使用以下几种情况的图片会导致大概率搜不到结果:
1、使用的是原图的局部图,即因剪裁而不完整,此时可以尝试使用ascii2d的特征搜索功能
2、图片被 马赛克/图片马赛克等 遮挡的部分面积过大
3、截图没截好,留有黑边,例如为了省事直接使用手机截屏或者电脑手动框选截图,这种情况请在搜图前4自行编辑裁去与图片无关的部分
4、清晰度过低的图片

最后说下重启操作,每次重启镜像都会生成general.ini文件,这貌似会引起特定QQ配置不生效,这可以在安装Docker镜像的时候加入变量-e COOLQ_ACCOUNT=123456来解决这个问题,也可以在重启时删掉该文件,然后登录VNC即可。

docker restart wine-coolq
rm -rf /coolq/app/io.github.richardchien.coolqhttpapi/config/general.ini

对于该机器人的使用,博主只是大概了解了下,可能有些没有注意到,如果有其它问题的可以自行研究。

Vultr新用户注册送100美元/16个机房按小时计费,支持支付宝,【点击查看】。
最后修改:2020 年 01 月 22 日 02 : 58 PM

发表评论

97 条评论

  1. Pain4Din0

    私聊一切正常,群组里无论是 @ 还是搜图模式指令都不搭理我

  2. LYM

    大佬,我这个新手教程可以回复,都成功启动,但是就是用不了。。。https://chart.loli.by/uploads/2019/08/_R3D$ML_1_TA_QB_E2_AYHR.png
    https://chart.loli.by/uploads/2019/08/7DF_0_NR7_R__SMQR5MDMR8.jpg
    https://chart.loli.by/uploads/2019/08/YG_T}E~J33{_M{9DB_N8B_V.png

  3. xiaoheizi

    大佬,请问这个是什么原因啊
    0|cqpf | { file:///coolq/CQ-picfinder-robot/modules/plugin/akhr.draw.js:1
    0|cqpf | Error: Cannot find module 'canvas'
    0|cqpf | at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10) code: 'MODULE_NOT_FOUND' }

    1. Rat's
      @xiaoheizi

      依赖没安装上,先手动进入到插件文件夹cd CQ-picfinder-robot

      再安装下这个依赖
      npm i canvas

      1. xiaoheizi
        @Rat's

        安装完还有别的错误没解决
        0|cqpf | at Module.load (internal/modules/cjs/loader.js:653:32)
        0|cqpf | at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
        0|cqpf | at Function.Module._load (internal/modules/cjs/loader.js:585:3)
        0|cqpf | at Object.<anonymous> (/usr/lib/node_modules/pm2/lib/ProcessContainerFork.js:27:21) code: 'MODULE_NOT_FOUND' }
        0|cqpf | { Error: Cannot find module 'esm'
        0|cqpf | at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
        0|cqpf | at Module.Hook._require.Module.require (/usr/lib/node_modules/pm2/node_modules/require-in-the-middle/index.js:51:29)
        0|cqpf | at require (internal/modules/cjs/helpers.js:25:18)
        0|cqpf | at Object.<anonymous> (/home/admin/CQ-picfinder-robot/index.js:1:11)
        0|cqpf | at Module._compile (internal/modules/cjs/loader.js:778:30)
        0|cqpf | at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
        0|cqpf | at Module.load (internal/modules/cjs/loader.js:653:32)
        0|cqpf | at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
        0|cqpf | at Function.Module._load (internal/modules/cjs/loader.js:585:3)
        0|cqpf | at Object.<anonymous> (/usr/lib/node_modules/pm2/lib/ProcessContainerFork.js:27:21) code: 'MODULE_NOT_FOUND' }

        1. Rat's
          @xiaoheizi

          直接用yarn安装依赖吧,给你命令。
          npm i -g yarn
          cd CQ-picfinder-robot
          yarn

  4. yusssss

    第一步docke安装CoolQ就出问题了……复制命令安装完之后,打开ip:9000打不开,端口已经开启,docker container ls 看下没有wine-coolq,不知道什么原因

    1. Rat's
      @yusssss

      安装的时候没报错么?

  5. C.C.

    我想配置自动回复,pro的自动回复,但是docker里面无法打中文,也无法从windows复制文字进去= = 请问,该怎么做,我搜过方法,没搜到

  6. Tyrant

    打开VNC连接后显示
    发生错误
    很抱歉,酷Q Pro 无法连接软件更新服务器。请检查网络是否通畅,并稍后再试。
    是怎么回事

    1. Tyrant
      @Tyrant

      npm日志显示这个什么意思,装了好几次都这样~~~
      npm ERR! path /root/package.json
      npm ERR! code ENOENT
      npm ERR! errno -2
      npm ERR! syscall open
      npm ERR! enoent ENOENT: no such file or directory, open '/root/package.json'
      npm ERR! enoent This is related to npm not being able to find a file.
      npm ERR! enoent

      npm ERR! A complete log of this run can be found in:
      npm ERR! /root/.npm/_logs/2019-07-27T11_16_03_128Z-debug.log

      1. Rat's
        @Tyrant

        在插件文件夹安装依赖,不是在根目录。

  7. Radioactive

    大佬,想问一下这种情况。服务器正常运作,内存空间足够,PM2显示也是启用,novnc上面也显示可以接收到消息,但是就是不会回复消息,私聊和群里@都不行。重启一下PM2可以暂时解决问题,但隔了几天又会出现同样情况(Air版)。酷Q on docker论坛里也有老哥有同样情况,会不会是酷Q和Docker的兼容问题?

    1. Rat's
      @Radioactive

      这个不太清楚,看是不是酷Q问题,你可以设置一下定时重启。

  8. 白白白

    我服务器重启novnc就连不上服务器了这怎么弄

    1. Rat's
      @白白白

      重启后,需要重新启动下docker才行,docker start wine-coolq

      1. 白白白
        @Rat's

        我重启输入这个指令还是连不上

      2. 白白白
        @Rat's

        我服务器装了宝塔 机器人的setu功能就不发图了 而且私聊的撤回一直显示失败 这该怎么设置

        1. Rat's
          @白白白

          这个不太清楚。

          1. 白白白
            @Rat's

            usePximgAddr里面什么都不打pximgProxy设置好 然后就又可以用了 但是有时延迟比较高 重启还没测试过 有问题再来麻烦大佬

  9. 狮子堂戌子

    感谢教程 挺好用的。可惜免费版不能发图。而免费能发图的qqlight和cleverqq并没有docker镜像

    1. Rat's
      @狮子堂戌子

      收费也不贵,可以上一波

      1. 狮子堂戌子
        @Rat's 查看日志

        npm run pm2log
        陷入这种状态了 怎么破
        0|cqpf | 7/15/2019, 8:01:46 PM 连接失败[/event]#19
        0|cqpf | 7/15/2019, 8:01:51 PM 连接中[/api]#20
        0|cqpf | 7/15/2019, 8:01:51 PM 连接中[/event]#20
        0|cqpf | 7/15/2019, 8:01:51 PM 连接错误[/api]
        0|cqpf | 7/15/2019, 8:01:51 PM 连接失败[/api]#20
        0|cqpf | 7/15/2019, 8:01:51 PM 连接错误[/event]
        0|cqpf | 7/15/2019, 8:01:51 PM 连接失败[/event]#20

        1. Rat's
          @狮子堂戌子

          这个是没连接上,检查下配置文件有没有哪里不对的。

          1. 狮子堂戌子
            @Rat's

            想把相关的东西都卸载了重新弄一遍 不过不知道该输入什么指令

            1. Rat's
              @狮子堂戌子

              看这个教程清空镜像https://www.moerats.com/archives/161/,然后把映射的文件夹删掉,就基本干净了。

              1. C.C.
                @Rat's

                我也是连接中连接失败一直循环 不知道为什么 也不知道哪里错了 请问看配置文件是哪个配置文件,config.json吗,而且我有config.json,log提示config.json not found

                1. Rat's
                  @C.C.

                  配置文件有2个地方,一个是酷Q机器人的,位置/coolq/app/io.github.richardchien.coolqhttpapi/config/,一个是插件的,位置CQ-picfinder-robot文件夹里面,关键就是酷Q里面的相关参数要改下,可以仔细看下文章。

                  1. C.C.
                    @Rat's

                    昨天搞定了跑起来了,今天想把air换pro但是装完pro启动以后没有生成QQ.json的文件,why?

                    1. C.C.
                      @C.C.

                      有了有了= = 抱歉

  10. TurboHsu

    大佬,今天配置好了之后发现机器人就是连不上trace.moe,服务端甚至可以打开网页,但是机器人就是没法用whatsanime搜 啥原因啊

    1. Rat's
      @TurboHsu

      可以直接给插件作者反映下,地址:https://moe.best/projects/qq-robot-picfinder.html