【问题标题】:Handle error sending DM to users in discord.js在 discord.js 中处理向用户发送 DM 的错误
【发布时间】:2021-07-13 00:23:45
【问题描述】:

例如,我想从数组中向用户发送直接消息。 Discord 不允许我为某些用户发送消息,我想处理错误并继续发送消息。但我得到错误,机器人每次都停止。我可以帮忙吗?

for (let i = 0; i < arrayOfUsersIDs.length; i++) {
    const element = arrayOfUsersIDs[i]
    const user = client.users.cache.get(element)
    try {
        user.send('My Message')
    }
    catch (error) {
        console.log(error)
    }
}

我收到此错误:

DiscordAPIError: Cannot send messages to this user
    at RequestHandler.execute (C:\Users\Thetr\Desktop\tour\node_modules\discord.js\src\rest\RequestHandler.js:154:13)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async RequestHandler.push (C:\Users\Thetr\Desktop\tour\node_modules\discord.js\src\rest\RequestHandler.js:39:14) {
  method: 'post',
  path: '/channels/861307827499040778/messages',
  code: 50007,
  httpStatus: 403
}

【问题讨论】:

  • 使用 try/catch 像现在一样运行它会发生什么?
  • @Alex Collette 机器人崩溃
  • 请提供它给出的错误,没有上下文很难调试!
  • @Alex Collette 已编辑

标签: javascript node.js discord.js


【解决方案1】:

这是因为发送失败是一个异步错误。您必须添加 await 以便它可以处理错误。

for (let i = 0; i < arrayOfUsersIDs.length; i++) {
    const element = arrayOfUsersIDs[i]
    const user = client.users.cache.get(element)
(async () => {
    try {

       await user.send('My Message')
    }
    catch (error) {
        console.log(error)
    }

})
}

另外,因为它一个承诺,你可以用.catch()来处理它。

user.send('My Message').catch(console.log);

【讨论】:

  • 另外,您可以执行for…of 循环来遍历数组。只是为了让它更容易。 for(const element of arrayOfUsersIDs) {} 和元素将是用户 ID
  • 我收到此代码错误:client.users.cache.get(...) is not a function
  • 奇怪,如果客户端不是真正的客户端,它会说无法读取未定义的属性缓存。目前还是个谜
【解决方案2】:

使用异步函数解决它:

async function sendDM (user, messageContent) {
  try {
    await user.send(messageContent)
    return true
  }
  catch (error) {
    return false
  }
}

// In my command

for (const element of arrayOfUsersIDs) {
  const user = client.users.cache.get(element)
  sendDM(user, 'My Message').then(result => {
    console.log(result) // true or false
  })
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-03
    • 2021-11-09
    • 2021-04-02
    • 2021-02-24
    • 2021-04-24
    • 2016-10-27
    • 1970-01-01
    • 2021-04-04
    相关资源
    最近更新 更多