如何更改上下文为特定用户的私聊

ctx.exclude(ctx.guild())可以更改上下文为私聊,但我用ctx.user(userid).exclude(ctx.guild())却在沙盒里没有响应了(userid已赋值为前面发送某消息的用户id),求解惑!

1 个赞

你是希望只对沙盒里的单个用户响应吗?


另外推荐使用 过滤器配置,这样用户可以自己选择对哪个上下文过滤

希望在用户在群聊发送特定信息后,bot在私聊和该用户进行交互

1 个赞
  ctx.guild().middleware((session,next)=>{
    if(session.content==='1'){
      hostid = session.userId
    }
    else{
      return next()
    }
  })
  ctx.user(hostid).exclude(ctx.guild()).middleware(async(session,next)=>{
    await session.send('请输入:')
    item = await session.prompt(600000)
    if (!item) return('输入超时。')
    else return next()
  })

类似这样的

1 个赞

不要使用上下文存储暂时的状态信息,上下文是用来定义 机器人功能 的。首先定义 机器人能与用户进行私聊,然后在实现这项功能的时候再判断 此时是否该响应用户

1 个赞
const 可以私聊的用户列表 = []

ctx.guild().command('开始私聊')
   .action(({ userId }) => {
      可以私聊的用户列表.push(userId)
   })

ctx.exclude(ctx.guild())
   .middleware(async (session, next) => {

      // 不是可以私聊的用户的话就什么也不做
      if (!可以私聊的用户列表.contains(session.userId)) return // 什么也不做

      // 对可以私聊的用户执行操作
      await session.send('请输入:')
      const item = await session.prompt(600000)
      if (!item) return '输入超时。'
      // 使用 item 继续操作
      return next()
})

1 个赞

受教,谢谢!

1 个赞