const { SlashCommandBuilder } = require('discord.js') const { joinVoiceChannel, createAudioPlayer, createAudioResource, AudioPlayerStatus, EndBehaviorType } = require('@discordjs/voice') const appDir = require('path').dirname(require.main.filename) module.exports = { data: new SlashCommandBuilder() .setName('parle') .setDescription('Fais moi parler par dessus quelqu\'un de chiant dans le vocal') .addUserOption(option => option.setName('user').setDescription('La personne en question').setRequired(true)), async execute(interaction) { if (interaction.user.id !== '223831938346123275') return await interaction.reply({ content: 'Tu n\'as pas le droit d\'utiliser cette commande !', ephemeral: true }) let user = interaction.options.getUser('user') let member = interaction.guild.members.cache.get(user.id) if (!interaction.member.voice.channel) return await interaction.reply({ content: 'You must be in a voice channel to use this command.', ephemeral: true }) if (!member.voice.channel) return await interaction.reply({ content: 'The member must be in a voice channel to use this command.', ephemeral: true }) if (interaction.member.voice.channelId !== member.voice.channelId) return await interaction.reply({ content: 'You must be in the same voice channel than the member to use this command.', ephemeral: true }) await interaction.reply({ content: 'Je vais parler par dessus cette personne !', ephemeral: true }) /* // Searches for audio files uploaded in the channel let messages = await interaction.channel.messages.fetch({ limit: 10, cache: false }) messages = messages.filter(m => m.attachments.size > 0) let files = [] await messages.forEach(m => m.attachments.forEach(a => { if (a.contentType === 'audio/mpeg') files.push(a) })) if (files.size === 0) return await interaction.editReply({ content: 'Aucun fichier audio trouvé dans ce channel.', ephemeral: true }) // Limit the number of files to the last 10 //files = files.sort((a, b) => b.createdTimestamp - a.createdTimestamp).first(10) // Ask the user to choose a file let file = await interaction.channel.send({ content: 'Choisissez un fichier audio :', files: files }) let filter = m => m.author.id === interaction.user.id && !isNaN(m.content) && parseInt(m.content) > 0 && parseInt(m.content) <= files.size let response = await interaction.channel.awaitMessages({ filter, max: 1, time: 30000, errors: ['time'] }) file = files.get(files.keyArray()[response.first().content - 1]) */ let playing = false let player = createAudioPlayer() player.on(AudioPlayerStatus.Idle, () => { playing = false }) let connection = joinVoiceChannel({ channelId: interaction.member.voice.channelId, guildId: interaction.guildId, adapterCreator: interaction.guild.voiceAdapterCreator, selfDeaf: false }) connection.subscribe(player) let stream = connection.receiver.subscribe(user.id, { end: { behavior: EndBehaviorType.Manual } }) stream.on('data', (chunk) => { if (connection.receiver.speaking.users.has(user.id) && !playing) { playing = true let resource = createAudioResource(appDir + '/parle.mp3', { inlineVolume: true }) //let resource = createAudioResource(file.attachments.first().url, { inlineVolume: true }) resource.volume.setVolume(0.2) player.play(resource) } }) interaction.client.on('voiceStateUpdate', (oldState, newState) => { if (oldState.id === member.id && newState.channelId !== interaction.member.voice.channelId) { stream.destroy() connection.disconnect() } }) } }