📖 介绍
这是由 nonebot-plugin-capoo 插件衍生而来的随机发送图片的插件,从使用上来看,这个插件远优于 nonebot-plugin-capoo 插件。
你可以很方便地直接通过在配置文件里设置好触发指令(支持多个触发指令)后,在群聊中发送对应指令,从而使 Bot 随机发送出你所存储的图片。
插件除了能随机发送图片,还能在群聊内直接通过指令存储图片,同时为了避免重复加入同一张图片,该插件添加了图片感知哈希算法,相似的图片无法重复添加。
随机发送图片并不是完全随机,而是发送次数少的图片触发的概率更大。
该插件的运行逻辑是:
- 自动在 Bot 所设路径下创建一个
randpic文件夹; - 在你预设指令(可以是多个)后,插件会检索指令,并在
randpic/img目录下生成所有你预设命令作为名字的文件夹,同时在randpic/database目录下生成一个data.db的数据库文件; - 之后你可以通过 Bot 存储图片,也可以直接在
<预设命令>文件夹下存储图片。
例如你设置了其中一个触发指令为capoo,并且你设置了存储路径为/data(若不设置存储路径,则由 nonebot-plugin-localstore 来指定存储路径),你可以自己直接给bot运行的服务器的/data/randpic/img/capoo/文件夹上传你想要的图片,并且你在群聊中通过指令让bot存储的图片也会存储在/data/randpic/img/capoo/里。
你可以在bot未启动期间任意修改图片文件夹内的所有内容,因为在启动bot后插件会自动做图片配置检查,因此你不用担心自己修改图片后会导致数据库与文件夹内容不同步。
由于发送大储存的图片对于服务器来说压力很大,因此,图片大于1MB的将压缩至1MB以内再储存,请有高清图片保存需求的慎用!!!(毕竟发在群里的图片,画质太高也是浪费嘛)
在启动bot后不建议修改、删除以及添加图片,否则可能会造成一些未知bug。
不建议你存储过多图片(指几万张甚至更多),因为没做过存储大量图片的测试。
静态网页生成的方案
图片太多太杂,上服务器查看图片太过麻烦,你是不是想通过网页直接看到目前已经存储了哪些图片?自v1.0.0版本后,本插件可以配置生成静态网页,目前已有两种生成方案。
fastapi生成静态网页
Bot启动后,会尝试构建静态网页,如果drivers中没有配置fastapi,将无法生效。
启动完成后,访问 http://<hots>:<port>/randpic 即可查看到内容。
阿里云OSS对象存储
适用对象:1、服务器配置较低的用户:部署一个Bot后,再拉起一个web服务,服务器吃不消;2、服务器没有公网IP的用户:没有公网IP的话,在服务器上拉起web服务,其他人也无法访问(内网还是能访问的)。
配置阿里云OSS对象存储,如果你自己手里有已备案的域名,可以用来搭建静态网页,方便 自己/群友 点击链接查看图片列表。
如何配置阿里云OSS对象存储?请自行百度搜索步骤。
想要在插件里启用阿里云OSS功能,你需要准备好以下数据,便于之后配置到.env文件中:
- randpic_endpoint:自定义域名。你的OSS bucket捆绑的哪个域名就填哪个。注意尾部不加
/; - randpic_bucket:阿里云OSS存储空间的名称;
- randpic_region:bucket所在的地域,例如
cn-beijing,各个地域ID可见OSS地域和访问域名; - randpic_oss_access_key_id、randpic_oss_access_key_secret:阿里云用户的AccessKey ID和AccessKey Secret。
以上的配置项不配齐的话静态网页功能将不生效。
bucket的访问权限至少要设置为公共读,否则通过域名也无法访问到图片。为了能网页访问,你需要给bucket配置好你自己的域名。
另外还需要如下图这样设置bucket的静态页面,跟下图一样地配置即可:
注意:静态页面要通过 上传oss 指令后才会构建页面,但是每次通过 添加 指令添加图片时,无需重复发送 上传oss 指令,图片会自动上传。构建静态页面的时间可能比较长,因此要尽可能减少构建频率。
若有不明白的地方可以尝试联系我。
💿 安装
使用 nb-cli 安装
在 nonebot2 项目的根目录下打开命令行, 输入以下指令即可安装nb plugin install nonebot-plugin-randpic
使用包管理器安装
在 nonebot2 项目的插件目录下, 打开命令行, 根据你使用的包管理器, 输入相应的安装命令pip
pip install nonebot-plugin-randpic
pdm
pdm add nonebot-plugin-randpic
poetry
poetry add nonebot-plugin-randpic
conda
conda install nonebot-plugin-randpic
打开 nonebot2 项目根目录下的 pyproject.toml 文件, 在 [tool.nonebot] 部分追加写入
plugins = ["nonebot_plugin_randpic"]
⚙️ 配置
在 nonebot2 项目的.env文件中添加下表中的配置,非必填配置不添加也能正常使用。
| 配置项 | 必填 | 默认值 | 说明 |
|---|---|---|---|
| randpic_store_dir_path | 否 | get_data_dir("nonebot_plugin_randpic") | 图片存储的路径,用户自定义路径,不定义路径则由localstore插件定义路径 |
| randpic_banner_group | 否 | [] | 不触发发图功能的群聊 |
| randpic_endpoint | 否 | None | 填写自定义域名,域名尾部不用加/ |
| randpic_bucket | 否 | None | 阿里云OSS对象存储空间名称(bucket) |
| randpic_region | 否 | None | 阿里云OSS对象存储bucket所在地域 |
| randpic_oss_access_key_id | 否 | None | 阿里云用户AccessKey ID |
| randpic_oss_access_key_secret | 否 | None | 阿里云用户AccessKey Secret |
| randpic_oss_no_upload_list | 否 | [] | 不上传到OSS的指令文件夹列表,该列表中对应的指令均不上传至OSS |
在插件的本地存储目录下会有 randpic_commands.json 文件,该文件存储了对应指令以及每个指令的分群禁用配置。群里添加新指令、@bot 禁用<指令>、@bot 启用<指令> 都会修改这个文件,你也可以自己改完后重启 bot。
文件结构是「指令名 → 在该群号集合中被禁用」,例如:
{
"capoo": [],
"马哥": [123456789]
}
上面表示 capoo 指令对所有群启用,马哥 指令仅在群号 123456789 中被禁用。
旧版(v1.4.0 及更早)的纯数组格式
["capoo", "马哥"]仍可识别:插件启动时会自动迁移为上述字典格式并回写文件。
在 .env 中,例如这样配置(这是例子,不代表你也需要这样配置):
randpic_store_dir_path="data/randpic"
randpic_banner_group=[574145050]
randpic_endpoint="https://xxx.huparry.cn"
randpic_bucket="randpic"
randpic_region="cn-beijing"
randpic_oss_access_key_id="xxxxxxxxxxxxxxxxxxxxxx"
randpic_oss_access_key_secret="xxxxxxxxxxxxxxxxxxxxx"
randpic_oss_no_upload_list=["capoo"]
🎉 使用
指令表
| 指令 | 权限 | 需要@ | 范围 | 说明 |
|---|---|---|---|---|
<你设置的指令> |
群员 | 否 | 群聊 | 随机发送一张对应指令的图片 |
添加<指令> |
群管 | 否 | 群聊 | 让 bot 存储图片到对应文件夹下 |
禁用<指令> |
群管 | 是 | 群聊 | 在本群禁用该指令,之后该指令在本群将不再触发发图 |
启用<指令> |
群管 | 是 | 群聊 | 恢复本群被禁用的指令 |
上传oss |
群管 | 否 | 群聊 | 若配置了阿里云OSS,则通过该指令生成静态网页上传至OSS |
效果图
capoo 指令
添加capoo 指令
马哥 指令
添加马哥 指令
上传oss 指令
禁用马哥 指令
启用马哥 指令
静态页面网页效果(仅在正确配置OSS情况下生效)
TODO
- 指令触发 bot 发送图片
- 在 QQ 上让 bot 存储对应指令的图片
- 每次存储图片,判断相似图片是否已经存在,避免重复加入
- 由capoo插件衍生成一个模板插件,即仅需修改参数就能发送别的图片
- 添加图片压缩功能,避免图片文件夹空间过大
- 以阿里云OSS对象存储搭建静态网页,便于浏览器查看图片
- Bot使用期间也能在群内直接添加新指令。
- 完善权限管理机制,采用更详细的权限管理,避免插件滥用
- 添加智能识图选项(调用api),避免添加违禁图导致被风控
鸣谢
感谢以下开发者作出的贡献:
Metadata
Release files for nonebot-plugin-randpic 1.8.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| nonebot_plugin_randpic-1.8.0.tar.gz | 28.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| nonebot_plugin_randpic-1.8.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 55.9 kB
Release files / nonebot_plugin_randpic-1.8.0.tar.gz
| Download URL | nonebot_plugin_randpic-1.8.0.tar.gz |
|---|---|
| Size | 28.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
60278d22d80badb994bb2b88c2572b6ff4fb4958e92c29b540629fc6fb665402
|
|
BLAKE2b-256 checksum How to use checksums |
08c71e73bf5f002ead4555384e0622498f3fef557e8dbd8fd5fbaa7953bcb399
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / nonebot_plugin_randpic-1.8.0-py3-none-any.whl
| Download URL | nonebot_plugin_randpic-1.8.0-py3-none-any.whl |
|---|---|
| Size | 27.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f2e800633f2ffe534272c3c18c99a54929f45c6e9ef9ff14e819c56bc5ca5303
|
|
BLAKE2b-256 checksum How to use checksums |
b62f8d69616bce0e46dc0967767d3f9f131408afec16107c873b3ffbbfd22a66
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|