祈福签插件

December 8, 2025 · View on GitHub

基于 skyblessings-python-api 的祈福签 nonebot 插件移植版本。

功能特性

每日限制: 每个用户每天只能生成一次祈福签
缓存复用: 多次抽签同一天会返回当天的签
自动清理: 定时清理超过7天的过期签图(每6小时检查一次)
完全自含: 所有资源(字体、图片、数据)都包含在插件内
菜单集成: 已注册到 zhenxun 菜单系统

目录结构

nonebot_plugin_skyblessings/
├── __init__.py                # 插件入口、命令处理、定时任务
├── data_source.py             # 签图生成和缓存管理
├── utils.py                   # 工具函数(图片清理)
├── assets/                    # 资源目录(完全自含)
│   ├── font/                  # 字体文件
│   │   ├── LXGWWenKaiMono-Medium.ttf
│   │   └── LXGWWenKaiMono-Regular.ttf
│   └── image/                 # 签文和背景图片
│       ├── background.png
│       ├── background0-3.png
│       ├── text0-4.png
│       └── ...
└── src/                       # 核心渲染模块
    ├── __init__.py
    ├── draw_data.py           # 159项签文数据 + 45种颜色映射
    └── render.py              # 图片渲染引擎

使用方式

用户可以在群聊或私聊中使用以下任意命令:

祈福签
祈福
skyblessings
抽签

示例

  • 第一次抽签: 生成新的签图
  • 同日多次抽签: 返回当天已生成的签
  • 次日抽签: 生成新的签图

实现细节

签图存储位置

所有生成的签图存储在 {DATA_PATH}/blessing_sign/ 目录下,文件名格式为:

{user_id}_{date}.png

例如: 123456789_2025-12-07.png

自动清理机制

  • 启动时:清理过期图片
  • 运行时:每 6 小时自动清理一次超过 7 天的图片
  • 清理日志记录在 zhenxun 日志中(标签:祈福签

命令限制

通过 PluginCdBlock() 注册了标准的冷却时间限制,遵循 zhenxun 的全局 CD 配置。

依赖

  • pillow: 图片处理
  • pytz: 时区处理(zhenxun 依赖)
  • nonebot-plugin-apscheduler: 定时任务(可选,用于自动清理)

配置

无额外配置需求,开箱即用。

日志

插件会在以下事件生成日志(标签:祈福签):

  • 初始化完成
  • 抽签成功
  • 图片清理完成
  • 错误信息

技术特点

  1. 完全独立: 无需依赖原始 API 服务
  2. 高效缓存: 利用本地文件缓存,避免重复生成
  3. 优雅降级: 缺少 apscheduler 时仅禁用自动清理,其它功能正常
  4. 类型完整: 完整的 159 项签文数据和 45 种颜色映射
  5. 渲染高效: 图片生成大小约 120KB,渲染速度快

注意: 本插件基于 XingWo/skyblessings-python-api 项目移植,如需了解原始实现请访问原项目仓库。