我希望能够从命令的arguments数组中删除所有用户提及。
我已经尝试遵循Discord JS官方指南提供的关于此主题here的帮助,但是该示例仅适用于处于特定参数数组位置的提及。
目的是允许用户在命令参数中的任何位置提及其他人(不限于那些必须是第一个,第二个,最后一个等参数的提及),并针对所提到的用户制定命令。
答案 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);
}