# 其他机制

# 钩子问答

对于特定的事件,Koishi 还提供了钩子问答机制。

# 署名机制

为了方便管理,教学系统中的每个问答都是可以被署名的。当一个问答被添加时,添加者将被默认标记为问答的作者。作者可以完全控制自己所署名的问答(修改和删除),但想要控制其他用户署名的问答就必须拥有 3 级权限

如果想要手动设置作者,可以使用 -w uid 或者 -w @user 的方式。除此以外,Koishi 也允许匿名教学。任何用户都可以通过 -W 来设置匿名问答(但是如果没有 3 级权限,即使是作者本人也无法修改)。这两个选项在搜索中也可以使用,例如用 -W 表示只搜索匿名添加的问答。

除此以外,还有极少数的题目被标记为锁定。标记为锁定的问题无论是否匿名,必须 4 级权限才能修改。可以使用 -f 将一个问答标记为锁定,使用 -F 进行解锁。不过这个功能只是为了保护核心问答不被篡改而设计的,使用这两个选项本身的最低权限也是 4 级,绝大部分玩家都不会有这个权限。

# 设置触发时段

我们有时也希望问答仅在一定的时间段被触发。此时,可以使用 -t-T 来控制触发的时段。下面给出一些简单的示例:

命令效果
# 问题 回答 -t 10:00 -T 12:30添加在每天 10:00~12:30 触发的问答
# 问题 回答 -t 22 -T 4添加在每天 22 时到次日 4 时触发的问答
#123 -t 12:00将问题 123 的触发时段起始时间设置为每天 12:00

同样与好感度类似,上述定义为前闭后开区间,且如果 t=T 则认为所有时间都允许触发。在搜索时,我们也用 -t-T 表示允许触发和不允许触发的时间节点。例如,t=15, T=1 可以匹配 t=10, T=20 的问题,但是不能匹配 t=10, T=4 或 t=23, T=11 的问题。

# 防刷屏机制

为了控制机器人在单一群触发教学问答的频率,我们可以设定当机器人在 1 分钟内在某个群中触发过超过 10 次问答,则 Koishi 将忽略该群内的消息直到这个数字降低到 10 以下为止。这里的数值都是可以配置的:

koishi.config.js
module.exports = {
  plugins: {
    teach: {
      throttle: {
        responses: 10,
        interval: 60000,
      },
    },
  }
}

为了防止多个机器人之间的循环触发,以及部分用户的攻击性刷屏行为,我们可以设定如果最近的 5 次教学问答都由某 1 个用户触发,则 Koishi 将不会继续响应来自该用户的教学问答。该效果会在该用户没有发送除指令调用以外消息之后的 5 分钟内被解除。这里的数值也都是可以配置的:

koishi.config.js
module.exports = {
  plugins: {
    teach: {
      preventLoop: {
        length: 5,
        participants: 1,
        debounce: 300000,
      },
    },
  }
}

# 使用静态图片服务