DM 提到的用户的命令

时间:2021-02-22 11:37:45

标签: javascript node.js discord discord.js

这是我给上述成员发送消息的代码。

const { MessageEmbed } = require("discord.js");

module.exports = {
  name: "dm",
  category: "moderation",
  usage: "DM <@mention> <message>",
  description: "DM server members!",
  run: async (client, message, args) => {
    if (!message.member.hasPermission("MANAGE_ROLES")) {
      return message.channel.send(
        "Access restricted!"
      );
    }

    const targets = message.mentions.members;

    if (!targets) {
      return message.channel.send(
        "Please Mention the person to who you want to DM!"
      );
    }

    if (message.mentions.users.bot) {
      return message.channel.send("You cannot DM bots");
    }

    const reason = args.slice(0).join(" ");

    if (!reason) {
      return message.channel.send(
        "Place provide the message to send!"
      );
    }

    message.channel.send(`DM sent succesfully!`);
      
      let embed = new MessageEmbed()
.setColor('#0099ff')
    .setTitle(`Message from ${message.guild.name}`)
    .setDescription(`${reason}`)
    .setThumbnail('https://i.ibb.co/PCnBZ8w/IMG-20210205-191207.jpg')
    .setFooter(`Sent by ${message.member.user.tag}`)
    
      targets.forEach(target => target.send(embed));
      message.delete();
  }
};

它的用法如下:prefixdm the message @mention1 @mention2 ...。 但是在用户收到的 DM 中,由于我的 reason 声明,他们也提到了该命令。我该如何解决才能让他们看不到消息中的提及内容?

1 个答案:

答案 0 :(得分:0)

您可以使用正则表达式清理消息。 MessageMentions 有一个 USERS_PATTERN 属性,它包含匹配用户提及的正则表达式(如 <@82043902196179341>)。您可以将它与 JavaScript 的 .replaceAll() 方法一起使用,用空字符串替换所有出现的提及:

const reason = args
  .slice(0)
  .join(' ')
  .replaceAll(MessageMentions.USERS_PATTERN, '')
  .trim();

不要忘记从 MessageMentions 导入 discord.js

const { MessageEmbed, MessageMentions } = require("discord.js");

更新:您还可以使用 .replace() 代替 .replaceAll(),因为正则表达式全局匹配用户提及。 Source

enter image description here

enter image description here