Skip to content

[enhancement] 增加拟人感、防止刷屏的回复模式设计 #63

@madoka-chann

Description

@madoka-chann

目标

  • 通过简单的逻辑和实现方式来配置表情的延迟和带图的回复模式,有效增加bot发送表情包时的拟人感。
  • 以及有效防止各种情境下的刷屏

是否启用延迟发表情(仅对非“回复带图”场景生效)

enable_delayed_dispatch: true

消息分类策略

可以设计一组互斥的概率策略参数,支持三种模式:

  1. auto(默认)
    不设置概率

    • 短消息:100% inline
    • 长消息:100% 延迟表情
  2. global_probability(统一概率)
    所有消息统一概率触发表情

  3. separate_probability(长短消息分别概率)
    分别配置短消息与长消息概率

下面是一份结构清晰且兼容当前配置的示例

emotion_dispatch:

  # =========================
  # 概率策略
  # =========================

  # auto | global | separate
  # auto:
  #   短消息 100% 带图
  #   长消息 100% 不带图
  #
  # global:
  #   所有消息统一概率
  #
  # separate:
  #   分别设置短消息和长消息概率
  probability_mode: auto


  # =========================
  # 统一概率模式
  # =========================

  # 仅在 probability_mode = global 时生效
  # 表情触发概率 (0.0 - 1.0)
  emotion_probability: 0.35


  # =========================
  # 分离概率模式
  # =========================

  # 仅在 probability_mode = separate 时生效

  # 短消息带图概率
  short_message_probability: 0.9

  # 长消息带图概率
  long_message_probability: 0.25

逻辑:

if probability_mode == "auto":
    if short_message:
        send_emotion = True
    else:
        send_emotion = False

elif probability_mode == "global":
    send_emotion = random() < emotion_probability

elif probability_mode == "separate":
    if short_message:
        send_emotion = random() < short_message_probability
    else:
        send_emotion = random() < long_message_probability

延迟计算参数

# 基础延迟

base_delay_ms: 900


# 每个字符增加的延迟
# 用于模拟用户的阅读速度,读完再发个表情

delay_per_char_ms: 10ms

# 最小延迟限制/最大延迟限制

min_delay_ms: 700 / max_delay_ms: 3500


# 随机扰动范围 最终延迟会增加 [-jitter, +jitter] 的随机值

delay_jitter_ms: 300

防刷屏控制

表情发送冷却时间
在该时间内不会再次发送表情
可以缓解因为群聊与bot聊天消息较少、所以设置的触发概率较高、但又避免某个时间段连续发很多表情的情况。

cooldown_seconds: 20

防抖机制

如果延迟期间用户再次 @bot
是否取消本次待发送表情

cancel_on_user_followup: true

监听用户追问的时间窗口
此项配置在群内多个人@bot时能有效防止表情包刷屏
在此时间内Bot被其他用户@取消发送表情包,改为下一次必定触发。

cancel_on_user_followup_delay_ms: 1000

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions