在 discord.js 中更改关注者的昵称

Posted

技术标签:

【中文标题】在 discord.js 中更改关注者的昵称【英文标题】:Change nickname of attention seekers in discord.js 【发布时间】:2020-08-22 19:24:27 【问题描述】:

我正在尝试在 discord.js 机器人中创建一个命令,当使用 d!noattention member 时,它会获取服务器中在其用户名或昵称开头具有特殊字符的所有用户并将他们的昵称更改为member 我的代码是:

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 &lt; options.length; i++) 下以便它可以获得user 的值时,机器人开始发送垃圾邮件并且没有说明用户数量。 user.length 在这里不工作。

【问题讨论】:

欢迎@Ronak。尝试确保您的代码易于阅读,并且仅包含与问题相关的部分。这样你更有可能得到好的答案。当我打开这个问题时,选项数组占据了大部分。它甚至似乎与问题无关。运行函数的几行需要水平滚动才能阅读。如果你让回答变得容易,你更有可能得到好的答案。 【参考方案1】:

您必须在 for 循环之外放置一些 var 并从 for 循环中添加 user.length。然后 var 将具有最终数字。当您直接从循环发送消息时,它会发送垃圾邮件,因为没有求和操作,因此它会将循环中的每个值记录到通道中。当您将行放在循环外时,用户变量将未定义,因为您在循环内定义了用户。

【讨论】:

你能告诉我你在说什么的代码吗?我不明白你的意思。如果我将 const user 代码放在 thr 循环代码之外,它将无法在 options[i]中获取 i 的值> @Ronak,在循环var userCount = 0; 之前放一些这样的东西,在循环里面做userCount = userCount + user.length,然后在循环之后,userCount var 将得到你需要的结果。 (对不起,我在手机上) 我试过了,还是不行。 bot 发送消息和应该有用户计数的地方,有 NaN :/ @doc。 Chocholoušek var usercount = 0; for (i = 0; i &lt; options.length; i++) const user = message.guild.members.filter(m =&gt; m.displayName.startsWith(options[i])); usercount = usercount + user.length; user.forEach(u =&gt; u.setNickname(name)); message.channel.send(`Successfully changed nicknames of $usercount attention seeking members`); (循环代码中的用户计数代码在新行中..我在打电话,所以它不允许我在新行中使用)跨度> 好的,谢谢。有效。我将 usercount 创建为一个数组,在代码 user.forEach() 中我推送了值并且 array.length() 起作用了!

以上是关于在 discord.js 中更改关注者的昵称的主要内容,如果未能解决你的问题,请参考以下文章

discord.js 更改服务器所有者的昵称

如何自动更改不和谐机器人的昵称。 (Javascript)(Discord.js)

它不会让我更改昵称 discord.js

Discord JS自我昵称命令

Discord.js 通过昵称获取用户

Discord.JS - Hypixel Discord 机器人