Skip to content

插件系统

Shit Bot 支持插件化扩展,插件有三种来源:

插件生命周期

每个插件遵循以下生命周期:

加载 → init() → onConfigLoaded() → onBeforeInit() → onAfterInit() → 运行中 → onBeforeShutdown()
  • init(api):插件初始化,接收 PluginAPI 实例
  • onConfigLoaded(config):配置加载完成后
  • onBeforeInit():各模块初始化前
  • onAfterInit():所有初始化完成后(适合注册监听器)
  • onBeforePoll() / onAfterPoll():每次轮询前后
  • onBeforeShutdown():进程关闭前

钩子列表

钩子触发时机参数
onConfigLoaded配置加载完成AppConfig
onBeforeInit各模块初始化前-
onAfterInit初始化完成-
onBeforeShutdown进程关闭前-
onBeforePoll每次轮询前-
onAfterPoll每次轮询后Tweet[]
onBeforeApproval审批发送前Tweet, GroupConfig
onBeforeTweetSend推文发送前GroupConfig
onAfterTweetSend推文发送后Tweet, GroupConfig
onApprovalResult审批完成Tweet, GroupConfig, approved, adminName, targetTag
onDiscordMessageDiscord 消息Messageboolean(是否拦截)
onTelegramMessageTelegram 消息Contextboolean(是否拦截)

插件配置

yaml
plugins:
  - name: ai-chat              # 插件名,对应 src/plugins/<name>/
    enabled: true
    options:
      key: value                # 插件自定义配置

  - name: translate             # 从 GitHub 源加载
    github: someuser/translate-plugin
    ref: main
    enabled: true
    options:
      targetLang: zh

pluginsDir: /app/data/plugins   # 外部插件目录(可选)

PluginAPI

插件 init() 接收的 API 对象:

typescript
interface PluginAPI {
  logger: {
    info(msg: string): void
    warn(msg: string): void
    error(msg: string): void
  }
  getConfig(): AppConfig
  getStorage(): Database
  getDiscordClient(): Client | null
  getTelegramBot(): Telegraf | null
}