首页 > 解决方案 > arguments.shift() 不是函数,Discord.js

问题描述

我正在尝试为某人制作一个不和谐的机器人,并且有一个我被卡住的命令,就是那个giverole。特别arguments.shift是它的一部分。

这是我的代码:

client.on('message', message => {
  if (message.content.startsWith(`${prefix}giverole`)) {
    if (!message.member.hasPermission("ADMINISTRATOR")) {
      message.channel.send("Vous n'avez pas la permission d'utiliser cette commande.")
      return;
    }
    const targetUser = message.mentions.users.first()
    if (!targetUser) {
      message.reply('Please specify someone to give a role to.')
      return
    }

    arguments.shift()

    const roleName = arguments.join(' ')
    const { guild } = message

    const role = guild.roles.cache.find((role) => {
      return role.name === roleName
    })
    if (!role) {
      message.reply(`There is no role with the name "${roleName}"`)
      return
    }

    const member = guild.members.cache.get(targetUser.id)
    member.roles.add(role)

    message.reply(`that user now has the "${roleName}" role`)
  }
}

我收到这个错误:

TypeError: arguments.shift is not a function

错误可能是参数没有在任何地方传递,但我不知道将它放在哪里。

标签: javascriptnode.jsdiscorddiscord.js

解决方案


似乎您从未定义过arguments(无论如何,这对于变量名来说都不是明智的选择,因为普通函数中有一个arguments 对象)。

您可以提及角色并使用message.mentions.roles. 这样您就不必切碎和清理它们message.content

client.on('message', async (message) => {
  if (message.content.startsWith(`${prefix}giverole`)) {
    if (!message.member.hasPermission('ADMINISTRATOR')) {
      return message.channel.send(
        "Vous n'avez pas la permission d'utiliser cette commande.",
      );
    }

    const user = message.mentions.users.first();
    const member = message.guild.member(user);
    const role = message.mentions.roles.first();

    if (!member) {
      return message.reply('Please mention someone to give a role to.');
    }

    if (!role) {
      return message.reply(`Please mention a role to add to ${member}.`);
    }

    try {
      await member.roles.add(role);
      message.reply(`${member} now has the "${role}" role`);
    } catch (error) {
      console.log(error);
      message.reply(`Role "${role}" is not added to ${member}.\n_${error}_`);
    }
  }
});

在此处输入图像描述

PS:确保将您的机器人角色拖到服务器设置中的所有其他角色之上,并授予它Manage Roles避免的权限DiscordAPIError: Missing Permissions


推荐阅读