能否在未能匹配到指令的时候执行一段逻辑?

我希望我能在某个地方得知指令的解析是否成功,如果成功了就没事;如果不成功的话,我希望能够执行其他操作。

没太理解,能具体表达一下需求吗

1 个赞
  • 如果用户发送 help,该指令存在,则正常返回 help 的内容;
  • 如果用户发送 aaa,该指令不存在,则返回 我不知道 aaa 是什么意思,查看我的功能可以发送「help」哦
1 个赞

临 时 中 间 件 + 中间件(?(
但是无论如何都会建议这个消息吗?还是私聊?私聊会与(可能我没配置好)rr-su-chat冲突(它默认回复,未知优先级)

2 个赞

这个要怎么实现,有具体的例子吗?


冲突是使用者要解决的问题吧,不至于因为插件市场里有一个此功能的插件其他人就都不能再做这个功能

可以用blockly暴力搓一个出来吧,比方说现在有help和status两个指令,然后blockly里面填

如果接受到的消息不等于help或status:
输出:我不知道’接受到的消息’是什么意思哦

()

1 个赞

那要是接收到了help status呢?
blockly里还要再加上这个?暴力不可取

1 个赞

只检测首个单词)

1 个赞

就比如改一下官网文档

// In plugin async apply()
let cloger=/* GetLogger怎么写来着(*/ xxx.getLogger('command-fallback');
ctx.middleware(async (session, next) => {
    let fstcmd=session.content.split(' ')[0].split('.')[0].split('/')[0];
    if(fstcmd.length<8){ // 可配置,或删掉,或其他判断
        return next(async ()=>{ cloger.warn('Fallback nonmatched '+fstcmd);return '我不知道 '+fstcmd+' 是什么意思,查看我的功能可以发送「help」哦'});
    }
})

(((
这个中间件得尽量往后扔,毕竟要其他没匹配
看起来临时中间件就不错(

1 个赞

你说得很正确,我要试一试

抛砖引玉:

ctx.on('message', session => {
  let cmd = session.context
  // 首先要判断 Argv 解析以及比如指令前缀?懒得写了(
  // code ...
  if(!ctx.$commander.keys().includes(cmd))
    return `我不知道 ${cmd} 是什么意思,查看我的功能可以发送「help」哦`
})

感觉边缘情况会很多,可能需要有一个指令前缀才能正确工作。

1 个赞

这个楼里在说什么?中间件本来不就有这个功能嘛
参考文档【临时中间件】

ctx.middleware((session, next) => {
  return next(_ => {
    return `我不知道${session.content}是什么`
  })
})
1 个赞

是的,楼上也有提到