如何从命令参数数组中删除提到的用户?

时间:2019-01-01 01:24:38

标签: javascript arrays discord.js

我希望能够从命令的arguments数组中删除所有用户提及。

我已经尝试遵循Discord JS官方指南提供的关于此主题here的帮助,但是该示例仅适用于处于特定参数数组位置的提及。

目的是允许用户在命令参数中的任何位置提及其他人(不限于那些必须是第一个,第二个,最后一个等参数的提及),并针对所提到的用户制定命令。

1 个答案:

答案 0 :(得分:1)

有几种方法可以做到,但是关键概念是:您想使用Message.mentions.USERS_PATTERN来检查参数数组中的字符串是否被提及;如果是这样,您可能要删除它们(或将它们存储在单独的阵列中)。

这里是一个例子:

// ASSUMPTIONS: 
// args is an array of arguments (strings)
// message is the message that triggered the command
// Discord = require('discord.js'); -> it's the module

let argsWithoutMentions = args.filter(arg => !Discord.MessageMentions.USERS_PATTERN.test(arg));

如果您需要使用提及内容,则可以使用Message.mentions.users来获得它们:请注意,它们与发送的顺序不符。如果您按此顺序需要它们,可以执行以下操作:

let argsWithoutMentions = [],
  mentions = [];

for (let arg of args) {
  if (Discord.MessageMentions.USERS_PATTERN.test(arg)) mentions.push(arg);
  else argsWithoutMentions.push(arg);
}

// In order to use those mentions, you'll need to parse them:
// This function is from the guide you previously mentioned (https://github.com/discordjs/guide/blob/master/guide/miscellaneous/parsing-mention-arguments.md)
function getUserFromMention(mention) {
  const matches = mention.match(/^<@!?(\d+)>$/);
  const id = matches[1];
  return client.users.get(id);
}

let mentionedUsers = [];
for (let mention of mentions) {
  let user = getUserFromMention(mention);
  if (user) mentionedUsers.push(user);
}