首页 > 解决方案 > 如何通过 USER ID 和@Mention 发送 DM 消息?

问题描述

如何让机器人通过指定的USER ID给用户写私信,并提及

例子:

!private 660033203473743873 Hello
!private @User Hello

我的代码

client.on('message', message => {

  if (!message.content.startsWith(prefix) || message.author.bot) return;

  const args = message.content.slice(prefix.length).trim().split(' ');
  const command = args.shift().toLowerCase();
  const member = message.mentions.members.first() || message.guild.members.cache.get(args[0]);

  if (command === 'private') {

      member.send({
      content: `${args[1]}`,
    });
}
});

标签: javascriptdiscorddiscord.js

解决方案


看来您使用args不正确。
args是整个消息的数组,因此args[0]!private在您的情况下返回。
工作示例:

client.on('message', async message => {
    if (!message.content.startsWith(prefix) || message.author.bot) return; //If message is sent by a bot or does not start with the prefix
    const args = message.content.slice(prefix.length).trim().split(/ +/g); //Getting the message arguments
    const command = args.shift().toLowerCase(); //Receiving the command

    if (!args[1]) return message.channel.send("Please provide a user to message."); //If user was not provided
    const member = message.mentions.members.first() || message.guild.members.cache.get(args[1]); //Get the member
    if (!member) return message.channel.send("I could not find the user you provided"); //If the member was not found
    if (!member.id || !member.tag) member = member.user; //Making sure the user is correct

    try {
        member = await message.guild.members.fetch(user); //Getting the guild member
    } catch() {
        member = null;
    }
    if (!member) return message.channel.send("The user you mentioned is not in this server."); //Double checking the user is in the server

    if (command.toLowerCase() == "private") { //Command is equal to private
        member.send(args.slice(1).join(" ")); //Send the member a message
    }
});

推荐阅读