内置数据库的setu插件, 另外尝试降低因为风控发不出图的概率(图像左右镜像翻转, 随机修改左上角一颗像素点)
github仓库内顺便加了一次性下载数据库内所有图片的脚本, 文件夹download_image内 请勿团体大规模爬取, 造成代理服务器不可用, 代理使用的是我自己提供的代理服务器setu.51246352.xyz 如果不可用请删除第42行代码使用数据库默认的i.pixiv.re或修改成其他
另外:数据库的表结构性能极低,如果想拿来做api什么的建议把数据洗一下,比如分成多个表,tags单独分一个表,并且建立索引
安装方式:
pip install nonebot_plugin_setu4
nb plugin install nonebot-plugin-setu4
有能力尽量从本仓库clone, 因为pypi数据库不一定最新(可能会差个几千条), 也可以试着手动下载数据库换上去, 数据库大概月更
以下配置项均可不填,插件会按照默认值读取
config | type | default | example | usage |
---|---|---|---|---|
setu_disable_wlist | bool | False | setu_disable_wlist = True | 是否禁用白名单检查(极度不推荐禁用)(详见权限控制系统) |
setu_enable_private | bool | False | setu_enable_private = True | 是否允许未在白名单的私聊会话使用(详见权限控制系统) |
setu_perm_cfg_path | str | see example | setu_perm_cfg_path = './data/setu4' | 会话(群号或QQ号)启用、r18及其他独立配置项 |
setu_save | str | None | setu_save = './data/setu4/img' | setu保存到本地的路径, 留空则不保存至本地 |
setu_database_path | str | see example | setu_database_path = see description1 | 更新使用的数据库的地址, 默认为此项目的resource文件夹下 |
scientific_agency | str | None | scientific_agency = 'http://127.0.0.1:7890' | 科学上网的代理地址, 当不使用反向代理的时候(默认使用i.pixiv.re)直连i.pximg.net获取图片, 大陆服务器无法访问时填写 |
setu_quality | List | [5, 75] | setu_quality = [5, 95] | setu图片的质量, 为解决轻量级服务器发送图片的带宽问题, 可以适当降低图片的质量, [5, 75]的意思是大于5张的话图片质量压缩到75, 95为最佳质量 |
group_forward_msg | bool | False | group_forward_msg = True | 群聊是否以转发的形式发送色图 |
sfw_withdraw | bool | True | sfw_withdraw = False | 当setu_withdraw_time(色图撤回时间)不等于0时, 是否撤回非r18图片, 默认撤回 |
setu_cd* | int | 20 | setu_cd = 30 | setu默认cd[0,+∞], 为0时无cd |
setu_withdraw_time* | int | 100 | setu_withdraw_time = 30 | setu默认撤回时间[0,100], 为0时不撤回 |
setu_max_num* | int | 10 | setu_max_num = 20 | setu默认一次性最大数量[1,25] |
带有*标识的设置项可在指定群聊被setu_perm_cfg.json中的内容覆盖
setu_save保存后下一次调用碰到这个setu会先从这个文件夹中进行匹配, 不需要再下载
一般无需科学上网, 但希望你确认一下图片代理是否可用:
一些也许可用的pixiv代理: "setu.51246352.xyz", "i.pixiv.re" , "sex.nyan.xyz" , "px2.rainchan.win" , "pximg.moonchan.xyz" , "piv.deception.world" , "px3.rainchan.win" , "px.s.rainchan.win" , "pixiv.yuki.sh" , "pixiv.kagarise.workers.dev" , "pixiv.kagarise.workers.dev"
使用插件提供的on_command响应器进行更换(on_command响应器注意.env内的命令头, 默认的代理为i.pixiv.re)
使用superuser账号发送: setu_proxy xxx Example: setu_proxy i.pixiv.re
警告: 这部分带了一个ping代理服务器的操作, 这个响应器是superuser only, 用了os.popen().read()操作, 请不要尝试给自己电脑注入指令
Example:
数据库给的url为: https://i.pixiv.re/img-original/img/2022/07/09/18/51/03/99606781_p0.jpg
有些代理可能会暂时不可用, 可以用来换成可用的代理, 比如setu.51246352.xyz
即: https://setu.51246352.xyz/img-original/img/2022/07/09/18/51/03/99606781_p0.jpg
注: pixiv官网原连接为"i.pximg.net", 你也可以设置回去, 在你有科学上网或者大陆以外的网络环境时, 直接用官网的原链接下载图片速度应该是最理想的
能正常访问即可用
本插件的权限控制系统分为两个部分:黑名单和白名单。此部分内容被存储在setu_perm_cfg_path中的setu_perm_cfg.json,其结构如下所示:
{
"group_114":{
"cd" : 30, # cd时长
"r18" : True, # r18开关
"withdraw" : 100, # 撤回延时
"maxnum" : 10 # 单次最高张数
},
"last":{ # 最近一次发送setu的时间, 用于计算剩余的冷却时间, 此部分不会被积极写入文件, 仅更新内存
"user_1919" : 810
},
"ban":[ # 黑名单, 禁用的群组或用户,跨会话生效, 会覆盖白名单设置
"user_1919",
"group_810"
],
"proxy": "i.pixiv.re" # 代理, 用于替换数据库中的url
}
在插件运行中,权限控制系统会按照如下顺序进行检查:
- 检查该会话是否在黑名单中存在,若存在则检查不通过。
- 检查该会话是否屏蔽了白名单(即setu_disable_wlist = True),若屏蔽则跳过第3~4步的检查(认为通过)。
- 检查该会话是否为
群聊类型
或setu_enable_private = False 下的私聊类型
,若不是则跳过第4步的检查(认为通过)。 - 检查该会话是否在白名单中存在,若不存在则检查不通过。
- 检查该会话的冷却时间是否归零,若未归零则检查不通过。
- 在以上检查通过的情况下,读取其他配置项并通过检查。
此部分的内容可以参考权限控制模块的对应部分进行理解。
命令头: setu|色图|涩图|想色色|来份色色|来份色图|想涩涩|多来点|来点色图|来张setu|来张色图|来点色色|色色|涩涩 (任意一个)
张数: 1 2 3 4 ... 张|个|份 (可不填, 默认1)
r18: 不填则不会出现r18图片, 填了会根据r18模式管理中的数据判断是否可返回r18图片
关键词: 任意, 多tag使用空格分开 (可不填)
参考 (空格可去掉):
setu 10张 r18 白丝
setu 10张 白丝
setu r18 白丝
setu 白丝
setu
注意:
- 全部群聊或私聊默认均未在白名单, 但可以通过设置 setu_enable_private = True 将私聊默认全部开启, 群聊还需通过白名单管理指令添加。
- superuser在任意聊天或在设置 setu_enable_private = True 的情况下好友私聊中, 会话均不受cd和白名单本身的影响, 但会受 撤回时长, r18, 最大张数 的影响。
- 在群聊中默认以该群作为操作对象, 但在私聊需要用户提供操作对象。
- 此部分的事件响应器均为 on_command 生成的, 触发时需要带有命令头。
白名单管理:
setu_wl add 添加会话至白名单 eg: setu_wl add user_114514/group_1919810
setu_wl del 移出会话自白名单 eg: setu_wl del user_114514/group_1919810
黑名单管理:
setu_ban add 添加会话至黑名单 eg: setu_ban add user_114514/group_1919810
setu_ban del 移出会话自黑名单 eg: setu_ban del user_114514/group_1919810
r18模式管理:
setu_r18 on 开启会话的r18模式 eg: setu_r18 on group_1919810
setu_r18 off 关闭会话的r18模式 eg: setu_r18 off group_1919810
cd时间更新:
setu_cd xxx 更新会话的冷却时间, xxx为int类型的参数 eg: setu_cd 10 group_1919810
撤回时间更新:
setu_wd xxx 撤回前等待的时间, xxx为int类型的参数 eg: setu_wd 10 group_1919810
最大张数更新:
setu_mn xxx 单次发送的最大图片数, xxx为int类型的参数 eg: setu_mn 10 group_1919810
更换setu代理服务器:
setu_proxy xxx 使用的代理服务器, xxx 为 string 类型的参数
警告: 这部分带了一个ping代理服务器的操作, 这个响应器是superuser only, 用了os.popen().read()操作, 请不要尝试给自己电脑注入指令
获取插件帮助信息:
"setu_help" | "setu_帮助" | "色图_help" | "色图_帮助"
查询黑白名单:
"setu_roster" | "色图名单"
数据库更新:
此指令默认从 github.com[^2] 拉取数据库,如果无法访问可以考虑使用科学上网或更换镜像或者手动从仓库下载换上去。
setu_db 从指定的路径拉取 lolicon.db 数据库,默认为此仓库