附加功能 - fnsflm/cq-picsearcher-bot GitHub Wiki
这部分功能只是开发者一拍大腿加上去的 _(:3」∠)_
相关配置项:bot.repeat
- 当某个群里出现复读现象时(复读不能被打断),如果复读次数大于设定的次数,则机器人会根据设定的复读概率进行概率复读
- 如果成功复读,则不会再次参与本句的复读
- 同一个人复读自己刷屏不算复读
- 日常复读即为平时群员说话时有概率直接进行复读
自行看bot.setu
意会(
为了防止滥用,该 API 已实行 APIKEY 制度,请前往此处按说明创建 APIKEY,之后将其填入bot.setu.apikey
该设置项在 v2.11.8 开始可用,请更新代码
可以支持根据正则表达式的捕获组匹配指令,发送 R18 或与关键字相关的 setu
请参考默认正则表达式^竹竹.*[来來发發给給][张張个個幅点點]?(?<r18>[Rr]18的?)?(?<keyword>.*?)?的?[色瑟][图圖]|^--setu$
,在这之中,(?<r18>r18的?)
和(?<keyword>.*)
即为两个捕获组,尖括号对中的内容为捕获组的名字,程序会取r18
和keyword
两个捕获组作为 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
若你使用的是酷Q Docker 版,你可能需要此设置
假如你将本程序部署在宿主机上,然后使用酷Q Docker 版,那么你需要将该项设置为宿主机的IP,或是在 Docker 容器内可以访问到宿主机的 IP,否则无法使用本地反代发送 setu
当然,你也可以通过配置pximgProxy
来简单地解决这个问题
注:除了上面所说的格式<IP>
,该设置项也支持<IP>:<Port>
或:<Port>
的格式,在需要的情况下可结合pximgServerPort
设置项自由发挥
该设置项旨在可以自定义 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
相关配置项:bot.ocr
修改use
配置项以选择一个 OCR 服务来使用,目前支持qq
、ocr.space
、baidubce
、tencent
使用手机 QQ 客户端 OCR,需要 go-cqhttp ≥ v0.9.26
使用时不支持自定义目标语言,为自动检测
由于是免费的 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
百度 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
腾讯 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 服务来使用,目前支持QQ
、ocr.space
、baidubce
、tencent
若你使用的 go-cqhttp ≥ v0.9.26,建议直接使用QQ
国内部分地区可能无法访问ocr.space
服务或访问有困难
发送公开招募含有词条的界面截图并在消息内含有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 中会被解析成富文本分享,有两种情况
- (我猜)较新版的 B 站客户端分享会带
qqdocurl
,在不支持小程序的 PC 上就会兼容显示为纯链接,此时可以拿到视频链接,程序会直接获取视频信息 - 不带
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"
}
- 只要该对象内任何一个属性不为字符串或为空字符串,将视为无效的回复规则,不会被使用
- 规则匹配顺序为数组成员顺序,一但某个规则匹配成功则终止匹配
- 若有规则匹配成功,则不会再触发机器人的其他功能
触发回复需满足的正则表达式
酷Q的语言库插件除了“正则表达式”外提供还有“完整匹配”和“模糊匹配”的选项,它们也可以简单的写成正则表达式的形式:
- 完整匹配:
^匹配内容$
- 模糊匹配:
匹配内容
(什么都不加)
你可以使用 regex101 这一工具来测试你的正则表达式
需要注意的是,由于某些半角符号在正则表达式中属于特殊字符,因此在必要时需要使用反斜杠\
进行转义,并且在 JSON 中反斜杠也需要用反斜杠进行转义,即写入配置时\\
才代表正则表达式的一个\
例如需要匹配纯文本的(匹配内容)
,则配置应为\\(匹配内容\\)
消息内容满足正则表达式时的回复内容
- 可以使用 CQ 码
- 除此之外,与酷Q语言库插件一样,可以直接使用
[CQ:at]
,会被替换成对消息发送者的@;在私聊中无效,会被替换成空字符串;若使用 go-cqhttp 则@会被自动加上尾空格,不需要自己加 - 与酷Q语言库插件的正则表达式一样,支持特殊变量名,但
$`
和$'
为空字符串
规则生效的场景
-
a
- 全部 (all) -
p
- 私聊 (private) -
g
- 群组 (group)