随机获取 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)
  • 部署环境具备访问第三方图片接口的网络条件(必要时配置代理)

方式一:通过插件市场安装(推荐)

  1. 启动 Koishi 项目,打开控制台(默认地址 http://localhost:5140)。
  2. 进入左侧「插件市场」。
  3. 在搜索框中输入 sexy-pic-lizard。
  4. 找到插件后点击「添加」,Koishi 会自动完成依赖安装与配置写入。

方式二:通过 npm 安装

在 Koishi 项目根目录执行:

1
npm install koishi-plugin-sexy-pic-lizard

随后在 koishi.yml 中手动添加配置:

1
2
3
4
5
6
7
8
plugins:
sexy-pic-lizard:
Sfw: true
Nsfw: true
Extreme: false
Bl: false
enableForward: true
defaultCount: 5

方式三:通过 yarn / pnpm 安装

若项目使用 yarn 或 pnpm,可执行:

1
2
3
4
5
# yarn
yarn add koishi-plugin-sexy-pic-lizard

# pnpm
pnpm add koishi-plugin-sexy-pic-lizard

验证安装

在任意已接入机器人的聊天窗口输入:

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
2
3
4
5
6
7
8
plugins:
sexy-pic-lizard:
Sfw: true
Nsfw: true
Extreme: false
Bl: false
enableForward: true
defaultCount: 5

各分类开关用于控制可用标签范围。关闭某分类后,该分类下的标签将无法用于检索。

enableForward 仅在 onebot 平台有效。其他平台开启后可能导致发送失败,建议保持关闭。


支持的标签

插件按四个分类组织标签,通过配置项可分别启用或关闭。

SFW 标签

  • holo、neko、kemonomimi、kanna、coffee、food

NSFW 标签

  • hass、hmidriff、pgif、4k、hentai、hneko、hkitsune、hanal
  • ass、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
2
3
const apiUrl = `https://nekobot.xyz/api/image?type=${tagToUse}`;
const imageBuffer = await ctx.http.get(url, { headers: { referer }, responseType: 'arraybuffer' });
return `data:image/jpeg;base64,${Buffer.from(imageBuffer).toString('base64')}`;

请求时携带 referer,避免部分图片因防盗链而下载失败。

核心设计

分类与标签

标签按分类组织在 tagCategories 中,通过 getEnabledTags 依据配置筛选可用标签:

1
2
3
const enabledTags = Object.entries(tagCategories)
.filter(([key]) => { /* 依据配置判断 */ })
.flatMap(([, tags]) => tags);

getEnabledTags(config, true) 会额外随机返回一个标签,用于未指定标签时的随机抽取。

批量请求

批量获取通过 Promise.allSettled 并发请求,容忍部分请求失败:

1
2
3
const requests = Array.from({ length: count }, () => { /* 构造请求 */ });
const results = await Promise.allSettled(requests);
const images = results.filter(r => r.status === 'fulfilled').map(r => r.value);

若全部请求失败,返回「全部请求失败,请检查 API 或网络连接。」

合并转发

在 onebot 平台,多张图片通过 forward 消息合并转发:

1
2
3
4
const forwardMessage = h('message', {
forward: true,
children: forwardMessages
});

其他平台不支持合并转发时,插件会退化为逐条发送。

标签校验

指定的标签需在已启用列表内,否则返回提示与可用标签:

1
2
3
if (selectedTag && !enabledTags.includes(selectedTag)) {
return `不支持标签「${selectedTag}」。\n可用标签:${enabledTags.join(', ')}`;
}

注意事项

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 四个配置项分别控制各分类的启用状态。


获取工具