Estoy tratando de hacer un comando de ben parlante para mi bot, y simplemente no funciona. Quiero que el bot envíe un clip de audio como respuesta cada vez que alguien haga una pregunta y, si no especifican una pregunta, el bot enviará un efecto de sonido "ben". No hay respuesta al comando en Discord en absoluto.
Aquí está el código:
ben.js :
const Discord = require('discord.js'); const yes = new Discord.MessageAttachment( 'https://soundboardguy.com/sounds/talking-ben-yes_scachnw/', ); const no = new Discord.MessageAttachment( 'https://soundboardguy.com/sounds/talking-ben-no/', ); const laugh = new Discord.MessageAttachment( 'https://soundboardguy.com/sounds/talking-ben-laugh/', ); const uhh = new Discord.MessageAttachment( 'https://www.101soundboards.com/sounds/726466-uhh', ); const ben = new Discord.MessageAttachment( 'https://www.101soundboards.com/sounds/726450-ben', ); module.exports = { name: 'ben', description: 'talking ben command', async execute(client, message, args) { if (!args[0]) return ben; let benreplies = [yes, no, laugh, uhh]; let result = Math.floor(Math.random() * benreplies.length); message.channel.send(replies[result]); }, }; main.js :
const Discord = require('discord.js'); const client = new Discord.Client({ intents: ['GUILDS', 'GUILD_MESSAGES'] }); const prefix = '.'; const fs = require('fs'); client.commands = new Discord.Collection(); const commandFiles = fs .readdirSync('./commands/') .filter((file) => file.endsWith('.js')); for (const file of commandFiles) { const command = require(`./commands/${file}`); client.commands.set(command.name, command); } client.once('ready', () => { console.log('Blueberry bot is online!'); }); client.on('messageCreate', (message) => { if (!message.content.startsWith(prefix) || message.author.bot) return; const args = message.content.slice(prefix.length).split(/ + /); const command = args.shift().toLowerCase(); // ... else if (command === 'ben') { client.commands.get('ben').execute(message, args, Discord); } });Primero, debe asegurarse de que los enlaces a los archivos de sonido sean válidos. Actualmente está utilizando enlaces que apuntan a una página HTML, no a los archivos mp3.
En segundo lugar, debe usar un objeto con una propiedad de files para enviar un archivo. Consulte las opciones de MessageOptions . los files también deberán ser una matriz. Lo siguiente funcionará:
let sounds = [ { id: 'ben', link: 'https://soundboardguy.com/wp-content/uploads/2022/03/talking-ben-ben.mp3', }, { id: 'laugh', link: 'https://soundboardguy.com/wp-content/uploads/2022/02/Talking-Ben-Laughing-Sound-Effect-1.mp3', }, { id: 'no', link: 'https://soundboardguy.com/wp-content/uploads/2022/03/Talking-Ben-No-Sound-Effect.mp3', }, { id: 'uhh', link: 'https://soundboardguy.com/wp-content/uploads/2021/06/huh-uhh.mp3', }, { id: 'yes', link: 'https://soundboardguy.com/wp-content/uploads/2022/03/talking-ben-yes_SCacHNW.mp3', }, ]; let randomSound = sounds[Math.floor(Math.random() * sounds.length)]; message.channel.send({ files: [new MessageAttachment(randomSound.link, `${randomSound.id}.mp3`)], });Los enlaces son incorrectos, usó los enlaces que tienen una interfaz de usuario, donde el usuario puede ver el audio, iniciar sesión, ver audios "relacionados", etc., no el archivo mp3 de audio fuente real.
Por ejemplo, ese enlace: https://www.101soundboards.com/sounds/726450-ben es incorrecto. Reemplácelo con https://www.101soundboards.com/storage/board_sounds_rendered/726450.mp3 ¡Haga exactamente lo mismo con cada archivo y estará listo para empezar!