附加功能 - fnsflm/cq-picsearcher-bot GitHub Wiki

这部分功能只是开发者一拍大腿加上去的 _(:3」∠)_

复读

相关配置项:bot.repeat

  1. 当某个群里出现复读现象时(复读不能被打断),如果复读次数大于设定的次数,则机器人会根据设定的复读概率进行概率复读
  2. 如果成功复读,则不会再次参与本句的复读
  3. 同一个人复读自己刷屏不算复读
  4. 日常复读即为平时群员说话时有概率直接进行复读

setu

自行看bot.setu意会(

APIKEY

为了防止滥用,该 API 已实行 APIKEY 制度,请前往此处按说明创建 APIKEY,之后将其填入bot.setu.apikey

该设置项在 v2.11.8 开始可用,请更新代码

R18 和关键词参数

可以支持根据正则表达式的捕获组匹配指令,发送 R18 或与关键字相关的 setu

请参考默认正则表达式^竹竹.*[来來发發给給][张張个個幅点點]?(?<r18>[Rr]18的?)?(?<keyword>.*?)?的?[色瑟][图圖]|^--setu$,在这之中,(?<r18>r18的?)(?<keyword>.*)即为两个捕获组,尖括号对中的内容为捕获组的名字,程序会取r18keyword两个捕获组作为 R18 和关键字参数

只要 <r18> 有匹配内容,就开启 R18;<keyword> 有匹配时会被作为关键字

以下是指令实际得到参数的例子:

  • 竹竹来张r18色图 -> r18=true 没有keyword
  • 竹竹来张r18妖精弓手色图 -> r18=true keyword=妖精弓手
  • 竹竹来张碧蓝航线色图 -> r18=false keyword=碧蓝航线

注意:在群内 setu 在不开启“反和谐”的情况下,普通 setu 有概率会被 tx 屏蔽,r18 setu 绝大部分都会被屏蔽,私聊不会屏蔽

反和谐

开启后 setu 将有概率不再被 tx 和谐,目前有两种方式

  • 1 轻微修改:对图片四角 1x1 的像素区域填充一个随机颜色以改变图片
  • 2 旋转:将图片逆时针旋转90°

由于酷Q本地最大只能发送 4M 的图片,因此当原图过大时会强制启用 size1200

usePximgAddr说明

若你使用的是酷Q Docker 版,你可能需要此设置

假如你将本程序部署在宿主机上,然后使用酷Q Docker 版,那么你需要将该项设置为宿主机的IP,或是在 Docker 容器内可以访问到宿主机的 IP,否则无法使用本地反代发送 setu

当然,你也可以通过配置pximgProxy来简单地解决这个问题

注:除了上面所说的格式<IP>,该设置项也支持<IP>:<Port>:<Port>的格式,在需要的情况下可结合pximgServerPort设置项自由发挥

pximgProxy说明

该设置项旨在可以自定义 i.pximg.net 的反代,以起到在国内可以加速下载 pixiv 图片并解决防盗链问题的作用

该设置项为空字符串时不会启用该功能,而是直接使用本程序自建的本地反代下载图片以解决防盗链问题,本质上是直连下载

如需开启,则填写反代网址开头部分,程序会将其与 pximg 图片链接的路径拼接组成图片地址

例如原图地址https://i.pximg.net/img-original/img/2019/01/16/01/49/12/72685648_p0.jpg
路径为img-original/img/2019/01/16/01/49/12/72685648_p0.jpg

以下是使用配置示例:

  • https://pixiv.cat
    则配置为"pximgProxy": "https://i.pixiv.cat/",
    最终得到图片地址https://i.pixiv.cat/img-original/img/2019/01/16/01/49/12/72685648_p0.jpg

OCR 文字识别

相关配置项:bot.ocr

修改use配置项以选择一个 OCR 服务来使用,目前支持qqocr.spacebaidubcetencent

qq

使用手机 QQ 客户端 OCR,需要 go-cqhttp ≥ v0.9.26

使用时不支持自定义目标语言,为自动检测

ocr.space

由于是免费的 OCR 服务,效果远不如手机QQ客户端上的“提取图中文字”功能,只用在在电脑前懒得掏手机的场合(但现在 PC QQ 也有截图 OCR 了,因此该功能基本上是专门给方舟公招计算器服务的)

国内部分地区可能无法访问该服务或访问有困难

配置项说明:

  • defaultLANG - 不指定语言时的默认识别语言(支持的语言
  • apikey - 可以到这里申请免费的(每日可用 500 次),但你也可以留空不填,此时会使用官方默认的helloworld(限制次数不明)

使用方法:

与搜图类似,发送图片时附加--ocr参数即可,同时需要用--lang=语言来指定需要识别的语言,不指定时使用配置中的defaultLANG

语言在上面“支持的语言”中都有列出,格式均为3字母,但本程序也支持使用以下缩写形式

  • ch / cn / zh / zhs -> chs (简体中文)
  • zht -> cht (繁体中文)
  • en -> eng
  • jp -> jpn
  • ko -> kor
  • fr -> fre
  • ge -> ger
  • ru -> rus

baidubce

百度 OCR 每日送免费使用额度,不手动开通付费的情况下不会额外计费,请放心使用

请先到百度 AI 开放平台登录并新建一个应用

配置项说明:

  • useApi - 指定 OCR 的 API,默认为accurate_basic,有以下可选项
    • general_basic - 通用文字识别:每日免费 50000 次
    • accurate_basic - 通用文字识别(高精度版):每日免费 500 次
    • 其他支持的 API 请查阅文档
  • apiKey - 为应用的 API Key
  • secretKey - 为应用的 Secret Key

使用方法:

与搜图类似,发送图片时附加--ocr参数即可,可用--lang=语言来指定需要识别的语言,不指定时默认为中英混合(支持的语言

通用文字识别(高精度版)只支持识别中英混合内容,自定义语言无效

语言在上面“支持的语言”中都有列出,格式均为3字母,大小写无所谓,但本程序也支持使用以下缩写形式的语言表示

  • ch / cn / zh -> CHN_ENG (中英混合)
  • en -> ENG
  • jp -> JAP
  • ko -> KOR
  • fr -> FRE
  • ge -> GER
  • ru -> RUS

tencent

腾讯 OCR 每个 API 每会赠送 1000 次免费使用额度(某些特殊的 API 除外),如果你超出额度,将自动转变为后付费模式进行计费,若欠费会造成账号冻结,具体请看计费概述

注:程序会统计每月使用次数(仅为通过该程序调用的次数),当某个 API 使用次数达到950次后会阻止继续请求该 API 来防止产生费用,但这也不是绝对安全的保护措施;使用腾讯 OCR 请自行注意额度,我不对任何超额使用导致的扣费负责

请先到腾讯云控制台登录并开通通用印刷体识别、通用印刷体识别(高速版)、通用印刷体识别(高精度版),然后在这里查看 SecretId 和 SecretKey,填入到设置项中

开通三个 API 的作用是,程序可以轮流调用这三个 API,相当于每个月可以有 3000 次的免费额度

如果你只想使用某些 API,可以修改配置文件中的useApi数组

  • GeneralBasicOCR - 通用印刷体识别
  • GeneralFastOCR - 通用印刷体识别(高速版)
  • GeneralAccurateOCR - 通用印刷体识别(高精度版)

Region设置项可以下取值,是必要参数,腾讯 API 文档的解释是“地域参数,用来标识希望操作哪个地域的数据”,但该值与请求的 API 服务器无关,具体用途不明;当刚开通某个 API 时,某些地域可能无法使用,仍提示“服务未开通”

  • ap-beijing
  • ap-guangzhou
  • ap-hongkong
  • ap-shanghai
  • na-toronto

你可以在此处查看 API 免费额度使用情况

明日方舟公开招募计算器

相关配置项:bot.akhr

该功能默认关闭,需要配置config.jsonc启用

修改ocr配置项以选择一个 OCR 服务来使用,目前支持QQocr.spacebaidubcetencent

若你使用的 go-cqhttp ≥ v0.9.26,建议直接使用QQ

国内部分地区可能无法访问ocr.space服务或访问有困难

发送公开招募含有词条的界面截图并在消息内含有akhr公招一词,会生成词条组合结果图片并发送,效果类似于下面这样

akhr

如果程序在 Linux 下运行,请安装微软雅黑字体,否则会出现图片中文字显示异常的情况

干员数据来自我自己在维护的方舟工具箱,首次运行时会在线拉取,向机器人私聊发送--update-akhr可手动更新

定时提醒

相关配置项:bot.reminder

该功能未设计完善的限制机制,请不要轻易开放给群友使用以免被玩坏
设计初衷用于定时发送“xx提醒小助手.jpg”,但发现实际上没什么卵用

该功能用于创建高度自定义的定时文字提醒功能,可在私聊、群组、讨论组中创建,每个区域的上限各为 20 条

该功能默认关闭,需要配置config.jsonc启用

功能启用时,无论onlyPM如何设置,管理者(bot.admin)一定可以在群内使用

创建

无需@,也不要@机器人,直接发送--time=时间表达式 --rmd=提醒内容,这两个参数的先后顺序没有关系,提醒内容如果含有空格和换行也无所谓,该怎么输入就怎么输入,支持包含图片

如果提醒需要@人(@自己也是),请在提醒内容中直接附上@(必须是真实的@,纯文字@是无效的)

时间表达式的格式与 crontab 相同,如下所示,只不过需要将空格换成英文分号;,即格式应为a;b;c;d;e

*    *    *    *    *
┬    ┬    ┬    ┬    ┬
│    │    │    │    │
│    │    │    │    └ 星期 (0 - 7) (0 或 7 是星期天)
│    │    │    └───── 月 (1 - 12)
│    │    └────────── 日 (1 - 31)
│    └─────────────── 小时 (0 - 23)
└──────────────────── 分钟 (0 - 59)

crontab 表达式的每一位都可以配合,或者/或者-符号指定时间范围,也就是说不单单只能固定时间提醒,详情请自行百度

注意:为了防止刷屏现象,不允许使用秒级 cron 表达式,并且分钟级的最小分度为5,即最低只能*/5;*;*;*;*

查看提醒列表

直接发送--rmd-list,只能查看当前区域创建的提醒

删除

查看提醒列表时可以看到提醒对应的 ID,然后直接发送--rmd-del=ID即可,只能删除当前区域创建的提醒

精华消息

若消息以 <精华消息> 开头,则该消息发送成功后会自动将其设置为精华消息(当然,<精华消息> 这几个字是不会发出去的,仅仅充当一个标识)

每次设置精华消息前,上一次通过同一条定时提醒发送的消息会被移出精华消息

反哔哩哔哩小程序

相关配置项:bot.antiBiliMiniApp

启用鄙视的话会发张图

鄙视

分享小程序在 CQ 中会被解析成富文本分享,有两种情况

  1. (我猜)较新版的 B 站客户端分享会带qqdocurl,在不支持小程序的 PC 上就会兼容显示为纯链接,此时可以拿到视频链接,程序会直接获取视频信息
  2. 不带qqdocurl时无法拿到视频链接,但分享信息中包含标题,程序将使用标题进行搜索,获取返回的首个视频的信息

鼓励直接发送链接,程序也会自动获取并发送视频信息,支持 av / BV 链接、b23.tv 短链接、acg.tv 短链接

不支持番剧,番剧链接将被尽可能忽略;如果是不带qqdocurl的小程序番剧分享,将会变成搜索,得到与实际不符的结果

为防止刷屏,同个群组中在三分钟之内发送的指向相同 av / BV 号的小程序或链接将不会被解析

以上过程中如果出现错误则不会发送任何消息

其他说明

富文本分享中可以拿到一个m.q.qq.com/a/s/{id}链接,该 id 是随机生成的与视频无关,并且无论如何访问都为一个同 URL 的二维码静态页,只有在手Q客户端中扫码或点击这种链接才会直接打开小程序

经过抓包没有发现调用任何接口进行解析,估计是客户端通过 ws 传输聊天内容时附带了信息,或者使用 ws 与服务器通信进行解析,所以通过这个链接大概是拿不到什么信息的了

语言库(自动回复)

相关配置项:bot.corpus

该功能类似酷Q的语言库插件,请知晓修改配置文件后可以使用配置热重载指令,而无需重启程序

bot.corpus为一个数组,其成员为具有如下结构的对象

{
  "regexp": "^东京府福立第一中学!片山新太郎!$",
  "reply": "好!很有精神!",
  "scene": "a"
}
  • 只要该对象内任何一个属性不为字符串或为空字符串,将视为无效的回复规则,不会被使用
  • 规则匹配顺序为数组成员顺序,一但某个规则匹配成功则终止匹配
  • 若有规则匹配成功,则不会再触发机器人的其他功能

regexp

触发回复需满足的正则表达式

酷Q的语言库插件除了“正则表达式”外提供还有“完整匹配”和“模糊匹配”的选项,它们也可以简单的写成正则表达式的形式:

  • 完整匹配:^匹配内容$
  • 模糊匹配:匹配内容(什么都不加)

你可以使用 regex101 这一工具来测试你的正则表达式

需要注意的是,由于某些半角符号在正则表达式中属于特殊字符,因此在必要时需要使用反斜杠\进行转义,并且在 JSON 中反斜杠也需要用反斜杠进行转义,即写入配置时\\才代表正则表达式的一个\

例如需要匹配纯文本的(匹配内容),则配置应为\\(匹配内容\\)

reply

消息内容满足正则表达式时的回复内容

  • 可以使用 CQ 码
  • 除此之外,与酷Q语言库插件一样,可以直接使用[CQ:at],会被替换成对消息发送者的@;在私聊中无效,会被替换成空字符串;若使用 go-cqhttp 则@会被自动加上尾空格,不需要自己加
  • 与酷Q语言库插件的正则表达式一样,支持特殊变量名,但 $`$' 为空字符串

scene

规则生效的场景

  • a - 全部 (all)
  • p - 私聊 (private)
  • g - 群组 (group)
⚠️ **GitHub.com Fallback** ⚠️