【问题标题】:In discord.js, Can I send DirectMessage to user With DiscordBot?在 discord.js 中,我可以使用 Discord Bot 向用户发送直接消息吗?
【发布时间】:2018-08-27 17:25:59
【问题描述】:

我想通过 Discord Bot 向用户发送私人消息。

用户与机器人不在同一台服务器上。

如果我可以使用 author.sendMessage,我该如何初始化(查找)作者变量?

我可以找到具有用户 ID 的用户吗?

感谢您的阅读。

【问题讨论】:

    标签: discord discord.js


    【解决方案1】:

    您的Client 对象有一个users 属性,其中包含与机器人共享服务器的所有缓存用户。 所以你可以使用<Client>.users.get('id')通过他们的id来获取用户。

    此外,您应该考虑改用<User>.send('Hi'),因为sendMessage 已被弃用。

    【讨论】:

    • 我犯了一个错误,我想将 Privatemessage 发送给与我添加的机器人不在同一台服务器中的用户..
    • 不,那是不可能的。对于机器人,您至少需要一个共同的服务器来发送消息。
    • 好的,我明白了...我想我需要使用另一种方式向用户发送 pm
    【解决方案2】:

    首先,sendMessage 已被弃用,并将在进一步的更新中删除。要发送消息,您可以使用send。要通过用户 ID 查找用户并私信他们,您只需 Client.users.get("User ID here").send("Message to Send")。我希望这个答案对你有用。

    【讨论】:

      【解决方案3】:

      并且用户与机器人不在同一台服务器上。

      和

      我犯了一个错误,我想将 Privatemessage 发送给与我添加的机器人不在同一服务器中的用户..[source]

      这是不可能做到的。
      机器人需要与用户至少有 1 个公共服务器才能发送直接消息。
      如果用户与机器人在同一台服务器上,那么您只能使用本文中的任何其他方法发送 DM。
      client.users.get("someID").send("someMessage");

      【讨论】:

      • 频道!= 服务器
      • stackoverflow.com/questions/49358108/… "我犯了一个错误,我想将 Privatemessage 发送给与我添加的机器人不在同一服务器的用户.."
      • 这个答案已经过时,并假设用户被缓存(这不是 100% 的时间,尤其是现在有意图)
      【解决方案4】:

      我发现你应该试试这个。它应该工作!使用时去掉空格!

      client.on('message', msg => {    
        if (msg.content === `"Your message!"`) {      
          msg.channel.type === (`"dm"`) + msg.author.sendMessage(`"Your other message"`) 
        }
      }
      

      【讨论】:

        【解决方案5】:

        对于任何对如何使用 Discord.js v12 执行此操作感兴趣的人,方法如下:

        client.users.cache.get('<id>').send('<message>');
        

        希望这对某人有所帮助!

        【讨论】:

          【解决方案6】:

          使用:mesage.author.send("your message!")

          【讨论】:

          • 这没有使用用户的 ID。
          【解决方案7】:

          这些答案很好,但你不能保证用户被 client.users.cache.get 缓存,尤其是意图更新会限制 Discord 发送给你的数据量。

          一个完整的证明解决方案是这样的(假设环境是异步的):

          const user = await client.users.fetch("<id>").catch(() => null);
          
          if (!user) return message.channel.send("User not found:(");
          
          await user.send("message").catch(() => {
              message.channel.send("User has DMs closed or has no mutual servers with the bot:(");
          });
          

          这个答案不仅可以完成这项工作,而且如果用户存在,它会首先尝试从缓存中获取用户,如果不存在,库将尝试从完全关闭缓存的 Discord API 中获取用户从破坏一切。我还添加了一些 .catch 声明以防止未经处理的拒绝并提供更好的响应!

          与向消息作者发送 DM 类似(假设消息对象被命名为“消息”):

          await message.author.send("message").catch(() => {
              message.channel.send("User has DMs closed or has no mutual servers with the bot:(");
          });
          

          现在请不要过多依赖缓存(获取公会和频道时除外,因为它们总是由库缓存),正如其他答案已经说明的那样,机器人必须至少有一个相互服务器用户和用户必须打开他们的 DM 并解除对机器人的阻止。

          【讨论】:

            【解决方案8】:

            在新版本的 discord.js 中只有这样的工作方式:

            bot.users.fetch('User ID').then(dm => {
                dm.send('Message to send')
            })
            

            【讨论】:

              猜你喜欢
              • 2020-09-10
              • 1970-01-01
              • 2020-02-07
              • 2020-12-05
              • 2018-12-16
              • 2021-01-07
              • 2017-05-16
              • 2012-02-05
              • 2021-01-10
              相关资源
              最近更新 更多