es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Bot – DisTubeError [INVALID_TYPE] : Se esperaba ‘Discord.Message’

Hice un bot de música, pero estoy buscando convertir esto en interacciones, pero tengo un problema al llamar a la función de reproducción.

Con “message” funciona, pero con “interaction” no. Intenté pasar alguna información, pero busqué y no pude encontrarla.

Incluso encontré una manera diferente, pero no funcionó.

El error que devuelve es el siguiente:

DisTubeError [INVALID_TYPE]: Se esperaba ‘Discord.Message’ para ‘message’, pero se obtuvo undefined (undefined)

Play.js

const { SlashCommandBuilder } = require('@discordjs/builders');

module.exports = {
  data: new SlashCommandBuilder()
        .setName('play')
        .setDescription('¡Reproducir una canción!')
    .addStringOption(option => option.setName('song').setDescription('Ingresa el nombre de la canción.')),

  async execute (interaction, client){
    // if(!interaction.member.voice.channel) return interaction.reply("¡Por favor, únete a un canal de voz!");

    const music = interaction.options.getString('song');
    if(!music) return interaction.reply("¡Por favor, proporciona una canción!");

    await client.distube.play(interaction, music);

    // await client.distube.playVoiceChannel(
    //   interaction.member.voice.channel,
    //   music,
    //   { 
    //     textChannel: interaction.channel,
    //     member: interaction.member
    //   }
    // );
  }
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema parece estar en la forma en que se ejecuta el comando. La función play espera un objeto Discord.Message como su primer parámetro, pero cuando se usan interacciones, el primer parámetro en la función execute es la propia interacción.

    Para solucionar esto, puedes pasar el objeto interaction y el objeto client a la función play de la siguiente manera:

    await client.distube.play(interaction, interaction.options.getString('song'));
    

    Esto debería pasar los parámetros correctos a la función play y reproducir la música solicitada.

    Alternativamente, puedes usar la función playVoiceChannel para reproducir la música, pasando el canal de voz del miembro y otra información relevante:

    await client.distube.playVoiceChannel(interaction.member.voice.channel, music, {
      textChannel: interaction.channel,
      member: interaction.member,
    });
    

    Recuerda descomentar las líneas relevantes de código y comentar la otra llamada a la función.

Comments are closed.