我正在尝试在discord.js机器人中创建一个命令,通过该命令,当使用 d!noattention成员时,它将获取服务器中所有在用户名或昵称开头带有特殊字符的用户并将其昵称更改为成员 我的代码是:
const options = [
"!",
"?",
'/',
'\'',
'~',
'#',
'@',
'+',
'=',
'(',
'*',
'&',
'^',
'%',
'$',
'[',
'`',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'_',
'-',
'.',
'¿'
];
module.exports = {
name: "noattention",
aliases: ["attentionnick", "anick"],
description: "Change nickname of all the attentions seekers to something you want.",
category: "moderation",
usage: "<new nickname>",
run: async(client, message, args) => {
if(!message.member.hasPermission(["MANAGE_NICKNAMES"])) return message.reply("You do not have permission to use this command.").then(m => m.delete(15000));
const name = args.join(" ");
if(!name) return message.reply("Also provide the new nickname you want for attention seekers.").then(m => m.delete(15000));
for (i = 0; i < options.length; i++) {
const user = message.guild.members.filter(m => m.displayName.startsWith(options[i]));
user.forEach(u => u.setNickname(name));
}
message.channel.send(`Successfully changed nicknames of all attention seeking members`);
}
}
它运行良好,但我也希望它发送给我,并告诉您更改了多少用户的昵称。当我尝试将message.channel.send
代码放在for (i = 0; i < options.length; i++)
下,以便可以获取user
的值时,该漫游器开始向该邮件发送垃圾邮件,并且没有说明用户数。
user.length
在这里不起作用。
答案 0 :(得分:1)
您必须在for循环外放置一些var,然后从for循环中添加user.length
。然后,变量将具有最终编号。当您直接从循环发送消息时,由于没有求和运算,因此它将成为垃圾邮件,因此它将把循环中的每个值记录到通道中。当您将行放置在循环之外时,用户变量将是未定义的,因为您在循环内定义了用户。