这是我给上述成员发送消息的代码。
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
声明,他们也提到了该命令。我该如何解决才能让他们看不到消息中的提及内容?
答案 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。