首页 > 解决方案 > 命令 DM 提到的用户

问题描述

这是我给提到的成员的 DM 代码。

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. 我该如何解决它,以便他们看不到消息中的提及?

标签: javascriptnode.jsdiscorddiscord.js

解决方案


您可以使用正则表达式清理消息。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()作为正则表达式全局匹配用户提及。来源

在此处输入图像描述

在此处输入图像描述


推荐阅读