【问题标题】:向用户发送私人消息
【发布时间】:2017-06-04 08:17:45
【问题描述】:

我正在使用 discord.js 库和 node.js 创建一个有助于扑克的 Discord 机器人。除了向所有人展示手之外,它还可以正常工作,我需要循环播放玩家并用他们的手向他们发送 DM。

bot.on("message", message => {
  message.channel.sendMessage("string");
});

这是当任何用户发送消息时向频道发送消息的代码。我需要机器人在私人频道中回复;我见过dmChannel,但我不明白如何使用它。我有要向其发送消息的成员的用户名。 一个例子将不胜感激。

编辑: 在四处寻找用户对象后,我发现我可以使用客户端(机器人)的.users 属性获取所有用户。我会尽快尝试使用user.sendMessage("string") 方法。

【问题讨论】:

  • 我还没有使用 discord.js。你能创建一个用户对象吗?如果是这样,您可以使用UserObject.sendMessage("string");
  • 机器人是客户端,这里是文档页面:discord.js.org/#/docs/main/stable/class/Client。您的代码将不起作用,因为 sendMessage 不是客户端的方法。我要看看我是否可以创建一个用户对象。
  • 你试过message.author.sendMessage("XXX")吗?我在 lib 的 10.0.1 版本中使用它。
  • @JulCh 我会选择你作为答案。非常感谢,我得到了它的工作!还有一件事,如果您有时间,我如何检查(用户,而不是机器人)消息是否是通过直接消息发送的?
  • @adapap 你可以检查message.channel对象是DMChannel(私信频道)的实例,还是经典频道的TextChannel :)

标签: javascript node.js discord.js


【解决方案1】:

要向用户发送消息,您首先需要获取User 实例。

获取用户实例

  • 使用用户发送的消息的message.author 属性。
  • 使用用户 ID 调用 client.users.fetch

获得用户实例后,您可以使用.send 发送消息

示例

client.on('message', (msg) => {
 if (!msg.author.bot) msg.author.send('ok ' + msg.author.id);
});
client.users.fetch('487904509670337509', false).then((user) => {
 user.send('hello world');
});

【讨论】:

  • <client>.fetchUser() 不再是有效函数...
  • @ATR 现在是client.users.fetch
【解决方案2】:

现在只是 v12 的仅供参考

client.users.fetch('487904509670337509', false).then((user) => {
 user.send('heloo');
});

'487904509670337509' 是一个 ID 号。

【讨论】:

    【解决方案3】:

    如果您希望输入消息,然后您的机器人会将其发送给用户,这里是代码。它也有角色限制:)

    case 'dm':
      mentiondm = message.mentions.users.first();
      message.channel.bulkDelete(1);
      if (!message.member.roles.cache.some(role => role.name === "Owner")) return message.channel.send('Beep Boing: This command is way too powerful for you to use!');
      if (mentiondm == null) return message.reply('Beep Boing: No user to send message to!');
      mentionMessage = message.content.slice(3);
      mentiondm.send(mentionMessage);
      console.log('Message Sent!')
      break;

    【讨论】:

      【解决方案4】:

      这很简单,这里是一个例子

      在此处添加您的命令代码,例如:

      if (cmd === `!dm`) {
       let dUser =
        message.guild.member(message.mentions.users.first()) ||
        message.guild.members.get(args[0]);
       if (!dUser) return message.channel.send("Can't find user!");
       if (!message.member.hasPermission('ADMINISTRATOR'))
        return message.reply("You can't you that command!");
       let dMessage = args.join(' ').slice(22);
       if (dMessage.length < 1) return message.reply('You must supply a message!');
      
       dUser.send(`${dUser} A moderator from WP Coding Club sent you: ${dMessage}`);
      
       message.author.send(
        `${message.author} You have sent your message to ${dUser}`
       );
      }
      

      【讨论】:

        【解决方案5】:

        以上答案也可以,但我发现您通常可以只使用message.author.send("blah blah") 而不是message.author.sendMessage("blah blah")

        -EDIT-:这是因为从 Discord Js 的 v12 开始,sendMessage 命令已经过时了

        .send 通常比 .sendMessage 更适合我,后者有时会遇到问题。 希望对您有所帮助!

        【讨论】:

        • 确实,sendMessage() 已被弃用。
        【解决方案6】:

        如果您想将消息发送给预定的人,例如您自己,您可以将其设置为发送消息的频道将是他们(您)自己的用户 ID。因此,例如,如果您使用 Digital Trends 的不和谐机器人教程,其中显示“to:”,您将继续使用他们(或您的)用户 ID。例如,通过设置特定代码的方式,您可以执行“to:userID”,它会向该人发送消息。或者,如果您希望机器人在有人使用特定命令时向您发送消息,您可以执行“to:'12345678890'”,这些数字是实际用户 ID 的填充符。希望这会有所帮助!

        【讨论】:

          【解决方案7】:

          为了让机器人发送消息,您需要 &lt;client&gt;.send()client 是机器人将消息发送到的位置(一个频道,服务器中的任何地方,或一个 PM)。由于您希望机器人 PM 某个用户,您可以使用 message.author 作为您的 client。 (您可以将author 替换为消息或其他内容中提到的用户)

          因此,答案是:message.author.send("Your message here.")

          我建议您在遇到问题时查找有关特定对象属性的 Discord.js 文档,您可能会找到可以作为解决方案的特定函数。

          【讨论】:

          【解决方案8】:

          让代码写成if (msg.content === ('trigger') msg.author.send('text')}

          【讨论】:

          • 语法错误.. 应该是if (msg.content === 'trigger') msg.author.send('text')。一个(和}太多
          猜你喜欢
          • 2020-09-10
          • 1970-01-01
          • 2019-10-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-05
          • 2012-09-21
          • 2019-10-28
          相关资源
          最近更新 更多