禁用 say 命令中的提及 (discord.js)

时间:2021-01-20 13:02:41

标签: node.js discord discord.js

我写了一个简单的“say”命令,但我试图禁止提及任何角色和/或用户。 例如,我输入“!say @everyone”,机器人应该回复“你没有权限!”而不是“@everyone”,标记每个人。或者它应该只发送消息但删除“每个人”之前的@。
这是我的代码:

module.exports = {
  name: "say",
  description: "Say command",
  usage: "<msg>",
  run: async (bot, message, args) => {
    if (!message.member.permissions.has("MANAGE_MESSAGES")) return;
    let MSG = message.content.split(`${bot.prefix}say `).join("");
    if (!MSG)
      return message.channel.send(`Non hai specificato il messaggio da inviare!`);
    message.channel.send(MSG);
    message.delete();
  },
};

有人可以帮我吗?提前谢谢你。
附注最后抱歉英语不好。

2 个答案:

答案 0 :(得分:1)

或者,如果您想从消息中删除提及,则可以使用 RegExp:

// If Message Content Includes Mentions
if (message.content.includes(/<@.?[0-9]*?>/g)) {
  //Replace All Message Mentions Into Nothing
  message = message.replace(/<@.?[0-9]*?>/g, "");
};

说明:
我们检查消息内容是否包含提及,如果是,则将所有提及替换为空

链接:
Learn About RegExp
RegExp Source

答案 1 :(得分:0)

您可以使用简单的 #includes 语句。

if (message.content.includes('@')) {
   return message.channel.send(':x: You do not have permission'); // if you want to deny completely

   let cleanedContent = message.content.replace('@', ''); // if you want to replace the @
};

注意:我不知道您的 args 在您的处理程序中的结构如何,因此您可能需要稍微更改我的代码,但这将适用于您的要求。

function myFunction() {
  var str = document.getElementById("demo").innerHTML; 
  var res = str.replace("@", "");
  document.getElementById("demo").innerHTML = res;
}
<!DOCTYPE html>
<html>
<body>

<p id="demo">!say @everyone</p>

<button onclick="myFunction()">Try it</button>

</body>
</html>