Este es mi primer bot de Discord y estoy tratando de silenciar a alguien. Según mi comprensión, creo que necesito invocar la [.setMute()][1] de VoiceState y estoy tratando de crear un objeto voiceState donde no entiendo qué significan los datos.
Aquí está mi función de ejecución para el comando. [ /mute <@USUARIO> <SEGUNDOS(opcional)> ]
async execute(interaction) { const targetUser = interaction.options.getUser('target'); if (interaction.options.getNumber('seconds') !== null) { const seconds = interaction.options.getNumber('seconds'); } else { const seconds = 60; } console.log(targetUser); const data = {} // APIVoiceState but idk what to put here const voiceState = new VoiceState(interaction.guild, data ); console.log(voiceState); voiceState.selfMute(true); await interaction.reply('supposed to mute!');Código de Command Builder si alguien lo necesita:
const data = new SlashCommandBuilder() .setName('mute') .setDescription('mute @user <seconds> server mutes the specified user for specified number of seconds') .addUserOption(option => option.setName('target') .setDescription('user to mute') .setRequired(true)) .addNumberOption(option => option.setName('seconds') .setDescription('Time in seconds the user stays muted (default: 60)'));No es necesario crear un nuevo objeto VoiceState , una vez que un GuildMember se une a un canal de voz, la API ofrece automáticamente el objeto, solo necesitamos editar los datos del GuildMember usando GuildMemberEditData pasándole la propiedad mute() , para utilizar GuildMemberEditData#mute() método podemos simplemente ir como:
const targetUser = interaction.options.getMember('target'); targetUser.edit({mute : true}) Tenga en cuenta que solo puede usarlo en un objeto GuildMember y no en un objeto de User como el usuario targetUser , le recomiendo que lo edite.
Puede continuar y obtener el estado de voz de GuildMember y usar voiceState setMute() en eso a través del método GuildMember#voice y luego usar el VoiceState#setMute() en él, en ese caso nuestro código sería algo como esto:
const targetUser = interaction.options.getMember('target'); targetUser.voice.setMute(true);