So I am making a role add and role remove command using slash command options.
I have saved an argument called role which takes from the slash command option addRoleOption. Upon running the slash command and pointing in the role I am trying to add / remove from the user I have mentioned i get the error as shown below.
I set this option to string (but then only works with the role ID) and it works perfectly fine. But I would like it to be a role option so the user using the bot doesn’t have to try and find the role ID.
CODE:
const { Client, SlashCommandBuilder, PermissionFlagBits, EmbedBuilder, PermissionFlagsBits } = require("discord.js"); const ms = require("ms"); module.exports = { data: new SlashCommandBuilder() .setName("role") .addSubcommand(subcommand => subcommand.setName("add").setDescription('Adds a role to a member.').addUserOption(option => option.setName("target").setDescription("Select the user you wish to add the role to.").setRequired(true)).addRoleOption(option => option.setName("role").setDescription("The role (id) you want to add to the user."))) .addSubcommand(subcommand => subcommand.setName("remove").setDescription('Removes a role from a member.').addUserOption(option => option.setName("target").setDescription("Select the user you wish to remove the role from.").setRequired(true)).addRoleOption(option => option.setName("role").setDescription("The role (id) you want to from from the user."))) .setDescription("Roles") .setDefaultMemberPermissions(PermissionFlagsBits.ModerateMembers), async execute(interaction) { const { guild, options } = interaction const user = options.getUser("target") const member = guild.members.cache.get(user.id); const role = options.getString("role"); const errEmbed = new EmbedBuilder() .setDescription('Something went wrong. Please try again later.') .setColor(0xc72c3b) if(interaction.options.getSubcommand() === "add") { const successEmbed = new EmbedBuilder() .setTitle("**:white_check_mark: Added Role**") .setDescription(`Succesfully added the role to the ${user}.`) .setColor(0x5fb041) .setTimestamp(); if(!interaction.guild.members.me.permissions.has(PermissionFlagsBits.ModerateMembers)) return interaction.reply({ embeds: [errEmbed], ephemeral: true }); try { await member.roles.add(role); interaction.reply({ embeds: [successEmbed], ephemeral: true }); //await guild.channels.cache.get('1031302408934015016').send(`${interaction.member.name} has muted ${user} for the time ${time} for the reason ${reason}`) } catch (err) { console.log(err); } } else if(interaction.options.getSubcommand() === "remove") { const successEmbed = new EmbedBuilder() .setTitle("**:white_check_mark: Removed Role**") .setDescription(`Succesfully removed the role from the ${user}.`) .setColor(0x5fb041) .setTimestamp(); if(!interaction.guild.members.me.permissions.has(PermissionFlagsBits.ModerateMembers)) return interaction.reply({ embeds: [errEmbed], ephemeral: true }); try { await member.roles.remove(role); interaction.reply({ embeds: [successEmbed], ephemeral: true }); //await guild.channels.cache.get('1031302408934015016').send(`${interaction.member.name} has muted ${user} for the time ${time} for the reason ${reason}`) } catch (err) { console.log(err); } } } }
ERROR:
C:UsersRobinDocumentsMulti-Purpose Botnode_modulesdiscord.jssrcstructuresCommandInteractionOptionResolver.js:99 throw new DiscordjsTypeError(ErrorCodes.CommandInteractionOptionType, name, option.type, type); ^ TypeError [CommandInteractionOptionType]: Option "role" is of type: 8; expected 3. at CommandInteractionOptionResolver._getTypedOption (C:UsersRobinDocumentsMulti-Purpose Botnode_modulesdiscord.jssrcstructuresCommandInteractionOptionResolver.js:99:13) at CommandInteractionOptionResolver.getString (C:UsersRobinDocumentsMulti-Purpose Botnode_modulesdiscord.jssrcstructuresCommandInteractionOptionResolver.js:160:25) at Object.execute (C:UsersRobinDocumentsMulti-Purpose BotCommandsModerationrole.js:17:30) at Object.execute (C:UsersRobinDocumentsMulti-Purpose BotEventsinteractionsinteractionCreate.js:12:21) at Client.<anonymous> (C:UsersRobinDocumentsMulti-Purpose BotHandlerseventHandler.js:25:63) at Client.emit (node:events:527:28) at InteractionCreateAction.handle (C:UsersRobinDocumentsMulti-Purpose Botnode_modulesdiscord.jssrcclientactionsInteractionCreate.js:81:12) at Object.module.exports [as INTERACTION_CREATE] (C:UsersRobinDocumentsMulti-Purpose Botnode_modulesdiscord.jssrcclientwebsockethandlersINTERACTION_CREATE.js:4:36) at WebSocketManager.handlePacket (C:UsersRobinDocumentsMulti-Purpose Botnode_modulesdiscord.jssrcclientwebsocketWebSocketManager.js:352:31) at WebSocketShard.onPacket (C:UsersRobinDocumentsMulti-Purpose Botnode_modulesdiscord.jssrcclientwebsocketWebSocketShard.js:480:22) { code: 'CommandInteractionOptionType' } PS C:UsersRobinDocumentsMulti-Purpose Bot>
Advertisement
Answer
Found the issue and it is a very nooby issue. Not me checking my code properly.
I had copied and pasted code from my mute command and just adjusted things.
I had forgotten to change a bit of code.
Instead of it being.
const role options.getString("role");
It needs to be
const role options.getRole("role");