随机获取 SFW/NSFW 图片,支持多种分类标签
随机获取 SFW / NSFW 图片,支持多种标签分类、按标签检索与批量获取。
作者: 蜥蜴
⚠️ 免责声明
本插件提供的部分图片属于 NSFW 内容。请勿将本插件配置于 QQ 或其他国内社交平台,由此产生的后果由使用者自行承担。
- 数据来源于第三方图片接口
- 建议在可控的、私密的群聊或私聊环境中使用
背景
在社群中分享随机图片时,通常需要手动查找并逐张发送,操作较为繁琐,也难以按分类挑选。若希望在日常聊天中直接获取,需要通过机器人调用第三方图片接口。
koishi-plugin-sexy-pic-lizard 将图片的随机抽取、标签筛选与批量获取整合为一条聊天指令,可在群聊或私聊中完成。
工具定位
koishi-plugin-sexy-pic-lizard 是一款基于 Koishi 框架的随机图片插件,主要能力如下:
| 能力 | 说明 |
|---|---|
| 随机图片 | 随机获取一张图片 |
| 标签筛选 | 按指定标签获取对应分类的图片 |
| 批量获取 | 一次获取多张图片,数量可配置 |
| 分类开关 | 可按 SFW / NSFW / 重口味 / BL 分类控制可用标签 |
| 合并转发 | 在 onebot 平台可将多张图片合并转发 |
当前版本为 2.1.1,依赖 Koishi ^4.18.0。
安装
前置条件
- 已搭建并可正常运行的 Koishi 项目(
koishi-app) - 部署环境具备访问第三方图片接口的网络条件(必要时配置代理)
方式一:通过插件市场安装(推荐)
- 启动 Koishi 项目,打开控制台(默认地址
http://localhost:5140)。 - 进入左侧「插件市场」。
- 在搜索框中输入
sexy-pic-lizard。 - 找到插件后点击「添加」,Koishi 会自动完成依赖安装与配置写入。
方式二:通过 npm 安装
在 Koishi 项目根目录执行:
1 | npm install koishi-plugin-sexy-pic-lizard |
随后在 koishi.yml 中手动添加配置:
1 | plugins: |
方式三:通过 yarn / pnpm 安装
若项目使用 yarn 或 pnpm,可执行:
1 | # yarn |
验证安装
在任意已接入机器人的聊天窗口输入:
1 | pic |
若能返回一张图片,则说明安装成功。
配置
配置项
| 参数 | 类型 | 默认值 | 取值范围 | 说明 |
|---|---|---|---|---|
Sfw |
boolean | true | — | 是否启用 SFW 标签 |
Nsfw |
boolean | true | — | 是否启用 NSFW 标签 |
Extreme |
boolean | false | — | 是否启用重口味标签 |
Bl |
boolean | false | — | 是否启用 BL 标签 |
enableForward |
boolean | true | — | 是否合并转发(仅适配 onebot 平台,其他平台请勿开启) |
defaultCount |
number | 5 | ≥ 1 | 每次默认获取的图片数量(建议不超过 10 张) |
配置示例
1 | plugins: |
各分类开关用于控制可用标签范围。关闭某分类后,该分类下的标签将无法用于检索。
enableForward 仅在 onebot 平台有效。其他平台开启后可能导致发送失败,建议保持关闭。
支持的标签
插件按四个分类组织标签,通过配置项可分别启用或关闭。
SFW 标签
holo、neko、kemonomimi、kanna、coffee、food
NSFW 标签
hass、hmidriff、pgif、4k、hentai、hneko、hkitsune、hanalass、thigh、hthigh、paizuri、boobs、hboobs
重口味标签
anal、gonewild、pussy、tentacle
BL 标签
yaoi
重口味与 BL 分类默认关闭,需在配置中启用后方可使用。
使用流程
指令列表
| 指令 | 说明 | 示例 |
|---|---|---|
pic |
随机获取一张图片 | pic |
pic <标签> |
按标签获取图片 | pic boobs |
pic <标签> -c <数量> |
按标签批量获取图片 | pic boobs -c 5 |
pic -t <标签> |
通过选项指定标签 | pic -t neko |
流程一:随机获取图片
步骤 1:发送指令
1 | pic |
插件从已启用的标签中随机选取一个,并返回对应图片。
步骤 2:接收结果
若开启了 enableForward 且在 onebot 平台,多张图片将合并转发;否则依次发送。
流程二:按标签获取图片
步骤 1:指定标签
1 | pic boobs |
标签的实际可用性取决于配置中的分类开关。例如关闭 Nsfw 后,boobs 等标签将不可用。
步骤 2:接收结果
插件返回该标签下的图片。
流程三:批量获取图片
步骤 1:指定数量
1 | pic boobs -c 5 |
-c 用于指定获取数量。未输入时使用 defaultCount 配置值(默认 5 张)。建议单次不超过 10 张。
步骤 2:接收结果
多张图片按上述转发规则发送。
使用场景
场景一:群聊内随机分享
通过 pic 随机获取图片,用于活跃群内气氛。
场景二:按分类检索
通过 pic <标签> 获取指定分类的图片,例如 pic neko、pic coffee 等。
场景三:批量获取
通过 -c 参数一次性获取多张图片,配合合并转发便于浏览。
技术实现
技术栈
| 技术 | 用途 |
|---|---|
| Koishi | 机器人框架 |
| TypeScript | 开发语言 |
| 第三方图片接口 | 图片数据来源 |
接口调用
插件通过第三方接口获取图片地址,再将其下载并转为 base64:
1 | const apiUrl = `https://nekobot.xyz/api/image?type=${tagToUse}`; |
请求时携带 referer,避免部分图片因防盗链而下载失败。
核心设计
分类与标签
标签按分类组织在 tagCategories 中,通过 getEnabledTags 依据配置筛选可用标签:
1 | const enabledTags = Object.entries(tagCategories) |
getEnabledTags(config, true) 会额外随机返回一个标签,用于未指定标签时的随机抽取。
批量请求
批量获取通过 Promise.allSettled 并发请求,容忍部分请求失败:
1 | const requests = Array.from({ length: count }, () => { /* 构造请求 */ }); |
若全部请求失败,返回「全部请求失败,请检查 API 或网络连接。」
合并转发
在 onebot 平台,多张图片通过 forward 消息合并转发:
1 | const forwardMessage = h('message', { |
其他平台不支持合并转发时,插件会退化为逐条发送。
标签校验
指定的标签需在已启用列表内,否则返回提示与可用标签:
1 | if (selectedTag && !enabledTags.includes(selectedTag)) { |
注意事项
1. 平台选择
请勿将本插件配置于 QQ 或其他国内社交平台。建议部署于自建的、受控的机器人实例中。
2. 合并转发平台限制
enableForward 仅适配 onebot 平台。其他平台开启后可能无法发送,建议保持关闭。
3. 分类开关
重口味与 BL 分类默认关闭,需在配置中启用后方可使用。关闭分类后,其下标签将无法检索。
4. 图片数量
defaultCount 默认 5 张,建议单次不超过 10 张,以免发送缓慢或触发接口限流。
5. 接口稳定性
图片来源于第三方接口,可能出现限流或部分图片下载失败。插件会跳过失败的请求,若全部失败则返回错误提示。
6. 防盗链
部分图片存在防盗链限制,插件在下载时会携带 referer。若仍出现图片加载失败,可能是接口或图片源的问题。
常见问题
Q1:安装后输入指令无响应?
依次检查以下项:
- 插件是否已在控制台启用
- 机器人是否已成功连接至目标平台
- 指令是否完整输入
Q2:提示「不支持标签」?
说明该标签未被启用。可在配置中开启对应分类,或使用提示中列出的可用标签。
Q3:提示「全部请求失败」?
说明所有请求均未成功。可检查部署环境能否访问第三方图片接口,以及接口是否响应缓慢或触发限流。
Q4:为什么部分图片没有发送?
插件会跳过下载失败的图片。若仅部分失败,属于接口或图片源的临时问题;若全部失败,则返回「全部请求失败」。
Q5:多张图片没有合并转发?
确认当前平台是否为 onebot,并检查 enableForward 是否开启。其他平台无法使用合并转发,插件会自动改为逐条发送。
Q6:如何控制可用标签范围?
通过 Sfw、Nsfw、Extreme、Bl 四个配置项分别控制各分类的启用状态。
获取工具
- npm 包:
koishi-plugin-sexy-pic-lizard - GitHub 仓库:lizard0126/sexy-pic-lizard
- 反馈建议:GitHub Issues
- 支持作者:请我喝可乐