xfgil/dsh-onebot-companion ↗★ 0

dsh-onebot-companion

One DSH plugin that gives a dsh-onebot-qq channel its manners back: outbound silence guard, per-turn behaviour rules, inbound coalescing plus outbound burst delivery, and a persona layer with mood, proactive talk and style learning. 适合需要优化QQ通道机器人回复礼仪、控制发言节奏和人设的用户。

パッケージ
dsh-onebot-companion
互換性
未検証
バージョン
0.1.0
ライセンス
MIT
最終更新
2026/10/13

インストール

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:xfgil/dsh-onebot-companion

ドキュメント

README 全文を読む ↗

配置

配置写在 profile 的 bundle 配置段里(宿主会把它透传给 apply(ctx, config))。 本插件刻意不导出 Config schema —— 沿用实测结论:profile 侧解析不到宿主的 schemastery,导出非 schema 对象会让 loader 投影 config 时报错。

dsh-onebot-companion:
  enabled: true
  packageName: dsh-onebot-qq     # 要挂的 QQ 通道插件
  profileDir: ''                 # 留空则多路自动探测
  pollMs: 3000                   # 补挂扫描周期;目标包被升级换目录后靠它自愈
  stateFile: ''                  # 留空用 $DSH_HOME/onebot-companion/state.json

  guard:
    enabled: true
    stripAside: true             # 是否连「整行一对括号」的旁白一起剥
    logHits: true

  prompt:
    enabled: true
    rules: {}                    # 按 id 单独开关,如 { quarrel: false };缺省全开
    firstStepOnly: true          # 仅第一步注入(推荐);关掉会撑大上下文
    sourceName: onebot-prompt

  rhythm:
    enabled: true
    inbound:
      enabled: true
      quietMs: 8000              # 私聊安静窗口
      groupQuietMs: 3000         # 群聊安静窗口
      maxWaitMs: 30000           # 攒批硬上限
      mentionPierces: true       # 被 @ 立刻穿透
    burst:
      enabled: true
      maxChars: 36               # 每条消息字数预算
      maxChunks: 4               # 一次回复最多几条(尾巴折叠进最后一条)
      delayMs: 300               # 分条基础停顿
      perCharMs: 45              # 按上一条字数折算的打字时间
    typing: true

  persona:
    enabled: true
    mediaDir: ''                 # 情绪/风格状态目录;留空从 bridge 配置取
    moodEnabled: true
    styleEnabled: true
    proactiveEnabled: true
    moodDriftMinutes: 20
    energyDecayPerHour: 7
    nightRecoveryPerHour: 14
    nightStartHour: 0
    nightEndHour: 8
    affinityDecayPerHour: 0.8
    affinityGraceHours: 6
    warmthBaseline: 30
    warmthRegressPerHour: 10
    warmthJitter: 8
    proactiveChance: 0.45
    proactiveMinMinutes: 25
    proactiveMaxMinutes: 150
    proactiveIdleMinutes: 20
    proactiveMaxPerDay: 6
    proactiveQuietStart: 1
    proactiveQuietEnd: 8
    # 「主动只对我,我才是管理员」——allowAllUsers: true 时陌生人也能私聊,
    # 不设白名单她就会去主动搭话陌生人。写纯 QQ 号或完整 chatId 都认。
    proactiveOnlyChats: []

  voice:
    enabled: true
    program: python              # 装了 edge-tts 的解释器(可写绝对路径)
    voice: zh-CN-XiaoxiaoNeural  # 音色,见上表
    rate: -5%                    # 语速(edge-tts 语法)
    pitch: -10Hz                 # 音调
    maxChars: 120                # 每次最多念多少字
    timeoutMs: 45000
    retries: 3                   # 偶发失败重试次数(含首次)
    retryDelayMs: 800            # 重试退避基数
    mediaDir: ''                 # 语音文件目录;留空用 config.mediaDir

packageName / profileDir 会自动下发到五个模块段,不需要在每个段里重复写。

状态文件放在哪

文件内容位置
state.json本插件运行态(挂了哪些闸、扫了几次、命中多少)$DSH_HOME/onebot-companion/
mood-state.json情绪四变量(每 chat 一条)config.persona.mediaDir
style-state.json风格画像(每 chat 一条)config.persona.mediaDir
media_*.mp3qq_say 合成的语音config.voice.mediaDir

情绪与风格刻意不放在 state.json 里:mediaDir 是那批历史数据本来的家, 换插件/重写插件都能继承,亲密度和风格画像攒了几天的东西不该因为换插件清零。