Skip to content

Repository files navigation

随机猫猫与兽耳酱

一个简单、克制、开箱即用的 AstrBot 随机图片插件:发送真实猫猫照片,或发送指定角色“兽耳酱(Kemomimi-chan)”图片。

默认回复只有图片本体,不附加多余文案,聊天效果接近“发出命令 → 机器人直接回图”。插件不包含本地图片包,安装体积很小。

功能

  • 随机真实猫猫图:支持 TheCatAPI 与 CATAAS,自动按配置选择主源和备用源。
  • 随机兽耳酱图:从 MoeHu 与 jsDelivr 两个公共源中随机首选,只返回指定角色兽耳酱。
  • 图片下载后再发送:机器人平台无需自行访问第三方图片链接。
  • 自动检查响应确实是受支持的图片格式,拒绝 HTML 错误页等异常内容。
  • 限制单张图片大小,避免异常响应占用过多内存。
  • 可配置超时、重试、并发、用户冷却和近期图片去重。
  • 复用异步 HTTP 会话,插件卸载时自动释放网络资源。
  • 支持 HTTP/HTTPS 代理与系统代理环境变量。

安装

通过 AstrBot

在 AstrBot 插件管理页中,使用仓库地址安装:

https://github.com/Whereis-Alice/astrbot_plugin_random_cat

安装后重载插件即可。运行依赖会由 AstrBot 根据 requirements.txt 安装。

手动安装

将本仓库目录放入 AstrBot 的插件目录,确保目录名为:

astrbot_plugin_random_cat

然后重启 AstrBot 或在管理面板中重载插件。

使用方法

以下示例使用 AstrBot 默认命令前缀 /。如果你的实例修改过命令前缀,请使用实例自己的前缀。

功能 主命令 可用别名
真实猫猫图 /猫图 /cat/rcat/猫猫图/来点猫猫/随机猫猫
兽耳酱图 /兽耳酱 /kemomimi/狐狸图/狐图/小狐狸

例如:

/猫图
/狐狸图

默认情况下,机器人直接回复一张图片。若希望同时显示图源,可在插件配置中开启 show_source

图片源如何选择

真实猫猫图

插件采用双源设计:

配置情况 主源 备用源
已填写 thecatapi_key TheCatAPI CATAAS
未填写 API Key CATAAS TheCatAPI 匿名接口

CATAAS 无需注册即可使用,目前公开接口可直接查询随机真实猫图。TheCatAPI 的图库和尺寸元数据更丰富;建议请求量较大的公开机器人申请免费 API Key,并填入插件配置。

若主源超时、返回错误、图片过大或内容不是有效图片,插件会自动尝试备用源。

兽耳酱图

每次执行 /兽耳酱 时,插件会等概率随机选择以下一个首选源:

图源 当前公开范围 访问方式
MoeHu 服务页面标注 581 张 kemomimi JSON API
JackEasons/emoticon 固定编号 001~354 固定提交的 jsDelivr CDN

MoeHu 请求示例:

https://img.moehu.org/pic.php?id=kemomimi&return=json&num=1&cdn=wp

jsDelivr 请求格式:

https://cdn.jsdelivr.net/gh/JackEasons/emoticon@<固定提交>/packages/兽耳酱/<编号>.png

如果本次随机到 MoeHu 而 MoeHu 请求失败,插件会自动回退到 jsDelivr;反过来,若首选 jsDelivr 失败,也会尝试 MoeHu。两个公共源都不可用时,插件才会使用 TheresaQWQ/kemomimi 的固定提交图片清单进行最后兜底。

MoeHu 的 581 张与 jsDelivr 的 354 张可能存在重合,因此不能简单相加为 935 张不同图片。插件会记录近期图片 URL,尽量减少短时间内连续重复。

每个图源的失败原因、重试次数和自动切换目标都会写入 AstrBot 后台警告日志。固定提交让 jsDelivr 与 Raw GitHub 的图片路径可复现,在第三方随机 API 临时不可用时仍能正常回图。

插件显式使用 MoeHu 文档公开的 wp CDN 分流,避免其默认分流可能返回的 JavaScript 验证页面;即便上游行为再次变化,图片签名校验也会拒绝异常 HTML,并触发 jsDelivr 回退。

兽耳酱角色与原画作者为 ながユー(Pixiv 2509595)。远程图片版权归原作者所有。

配置说明

所有选项都可以在 AstrBot 插件配置页中修改。

配置项 默认值 说明
show_source false 是否在图片后附上图源信息。
cooldown_seconds 3 同一用户两次请求之间的冷却秒数;设为 0 关闭。
request_timeout_seconds 20 单次网络请求总超时,代码会限制在 5~60 秒。
retry_count 2 每个图片源的尝试次数,代码会限制在 1~4。
max_image_size_mb 12 单张图片最大下载体积,代码会限制在 1~25 MB。
recent_cache_size 20 内存中记录的近期图片 URL 数量,用于减少连续重复;设为 0 关闭。
max_concurrency 4 同时处理的图片请求数,代码会限制在 1~8。
thecatapi_key 可选。填写后优先使用 TheCatAPI。
use_moehu_kemomimi_source true 是否让 MoeHu 与 jsDelivr 等概率成为兽耳酱首选源。
use_github_kemomimi_fallback true 两个公共源均异常时,是否启用固定 Raw GitHub 备用清单。
proxy_url 可选 HTTP/HTTPS 代理,如 http://127.0.0.1:7890
trust_env_proxy true 是否读取 HTTP_PROXYHTTPS_PROXYNO_PROXY

当前 proxy_url 不直接支持 socks5://。如需 SOCKS5,可在本机使用能够提供 HTTP 代理入口的代理客户端,再把该 HTTP 地址填入配置。

相比参考插件做了哪些调整

本项目参考了上游 nonebot-plugin-random-cat 的随机图片交互思路,但没有直接照搬 NoneBot/OneBot 实现。

  • 上游猫图接口 aws.random.cat 目前已经无法解析,改为 TheCatAPI + CATAAS。
  • 删除了本项目不需要的狗图、定时群推送和群号白名单逻辑,功能只保留真实猫猫与兽耳酱。
  • 使用 AstrBot 原生消息组件,不拼接 CQ 码,不依赖特定 QQ 适配器。
  • 不再用正则处理 Base64,也不为每一步重复创建 HTTP 客户端。
  • 增加有限超时、受控重试、主备切换、图片签名校验、体积上限、并发限制、冷却和近期去重。
  • 下载图片字节后交给 AstrBot 发送,降低平台侧远程 URL 拉取失败或防盗链导致的发送问题。
  • nekos.best 等普通狐娘源做过调研,但最终按插件定位排除,确保 /兽耳酱 返回的是指定角色。
  • 兽耳酱使用 MoeHu 581 张随机 API 与 jsDelivr 354 张固定图集随机首选,并保留 Raw GitHub 最后兜底。
  • 增加图源失败、重试与自动回退的 AstrBot 后台警告日志。

常见问题

命令没有触发

先确认插件已启用,再确认当前 AstrBot 实例使用的命令前缀。默认示例是 /猫图,不是所有实例都允许省略 /

为什么没有直接发送远程 URL

部分平台无法访问外部 URL,或者目标站点存在重定向、防盗链和请求头要求。插件先在 AstrBot 侧下载并验证图片,再通过 Image.fromBytes 发送,跨平台表现更稳定。

为什么连续请求会提示太快

公开图片接口需要被友善使用。默认每个用户有 3 秒冷却,可在配置中调整,但不建议在公开群关闭冷却后高频刷图。

TheCatAPI Key 是否必需

不是。零配置时会优先使用无需密钥的 CATAAS。填写 Key 后可优先使用图库更丰富的 TheCatAPI,也更适合请求量较大的机器人。

插件会把图片保存到磁盘吗

不会。图片只在内存中短暂存在,发送完成后由 Python 回收;插件只在内存里保存少量近期 URL 用于去重。

如何确认图源发生了回退

查看 AstrBot 后台日志。图源异常时会看到类似记录:

[astrbot_plugin_random_cat] kemomimi 图源 MoeHu 兽耳酱 API 第 1/2 次失败:ImageServiceError: HTTP 503
[astrbot_plugin_random_cat] kemomimi 图源 MoeHu 兽耳酱 API 不可用,切换到 jsDelivr 兽耳酱图集。

正常请求不会写入警告日志,避免后台被每次随机结果刷屏。

隐私与网络说明

  • 调用远程图片源时,对方服务器能够看到 AstrBot 所在服务器的出口 IP 和本插件的 User-Agent
  • 插件不会上传聊天内容、用户昵称、QQ 号或群号。
  • API Key 由 AstrBot 配置系统保存;插件不会把 Key 写入额外日志或缓存,也不会发送给 TheCatAPI 以外的服务。
  • 若启用代理,请自行确认代理服务的隐私与安全性。

致谢与上游

更完整的第三方说明见 THIRD_PARTY_NOTICES.md

许可证

插件代码使用 MIT License

MIT License 只覆盖本仓库中的插件代码和文档,不代表远程图片被重新授权。猫图与兽耳酱图片分别遵循其图片源、上传者和原作者的版权条款;请勿将本插件用于侵权用途。

About

AstrBot 随机图片插件:真实猫猫与兽耳酱,支持 MoeHu/jsDelivr 随机图源、自动回退、校验、去重与冷却。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages