How to Play Audio File Into Channel?

后端 未结 5 959
长发绾君心
长发绾君心 2020-12-23 23:17

How do you play an audio file from a Discord bot? Needs to play a local file, be in JS, and upon a certain message being sent it will join the user who typed the message, an

相关标签:
5条回答
  • 2020-12-23 23:45

    thanks so much!

    One thing I will say to help anyone else, is things like where it says ENTER CODE HERE on step 10, you put the code from step 11 IE:

    dispatcher.on("end", end => voiceChannel.leave());
    

    As a complete example, this is how I have used it in my message command IF block:

    if (command === "COMMAND") {
            var VC = message.member.voiceChannel;
            if (!VC)
                return message.reply("MESSAGE IF NOT IN A VOICE CHANNEL")
        VC.join()
            .then(connection => {
                const dispatcher = connection.playFile('c:/PAtH/TO/MP3/FILE.MP3');
                dispatcher.on("end", end => {VC.leave()});
            })
            .catch(console.error);
    };
    
    0 讨论(0)
  • 2020-12-23 23:46

    Update: If you want to detect if the Audio has stopped, you must subscribe to the speaking event.

    voiceChannel
        .join()
        .then((connection) => {
            const dispatcher = connection.play("./audio_files/file.mp3");
    
            dispatcher.on("speaking", (speaking) => {
                if (!speaking) {
                    voiceChannel.leave();
                }
            });
        })
    
    0 讨论(0)
  • 2020-12-23 23:47

    There's no need for the bloat of Visual Studio .. way overkill .. you just need node.js and the dependencies via npm.

    0 讨论(0)
  • 2020-12-23 23:52

    I went ahead an included Nicholas Johnson's Github bot code here, but I made slight modifications.

    1. He appears to be creating a lock; so I created a LockableClient that extends the Discord Client.
    2. Never include an authorization token in the code

    auth.json

    {
      "token" : "your-token-here"
    }
    

    lockable-client.js

    const { Client } = require('discord.js')
    
    /**
     * A lockable client that can interact with the Discord API.
     * @extends {Client}
     */
    class LockableClient extends Client {
      constructor(options) {
        super(options)
        this.locked = false
      }
      lock() {
        this.setLocked(true)
      }
      unlock() {
        this.setLocked(false)
      }
      setLocked(locked) {
        return this.locked = locked
      }
      isLocked {
        return this.locked
      }
    }
    
    module.exports = LockableClient;
    

    index.js

    const auth = require('./auth.json')
    const { LockableClient } = require('./lockable-client.js')
    
    const bot = new LockableClient()
    
    bot.on('message', message => {
      if (!bot.isLocked() && message.content === 'Gotcha Bitch') {
        bot.lock()
        var voiceChannel = message.member.voiceChannel
        voiceChannel.join().then(connection => {
          const dispatcher = connection.playFile('./assets/audio/gab.mp3')
          dispatcher.on('end', end => voiceChannel.leave());
        }).catch(err => console.log(err))
        bot.unlock()
      }
    })
    
    bot.login(auth.token)
    
    0 讨论(0)
  • 2020-12-23 23:53

    GitHub Project: LINK

    In order to do this there are a few things you have to make sure of first.

    1. Have FFMPEG installed & the environment path set for it in Windows [link]
    2. Have Microsoft Visual Studio (VS) installed [link]
    3. Have Node.js installed.[link]
    4. Have Discord.js installed in VS.

    From there the steps are quite simple. After making your project index.js you will start typing some code. Here are the steps:

    1. Add the Discord.js dependency to the project;

    var Discord = require('discord.js');

    1. Create out client variable called bot;

    var bot = new Discord.Client(); 3. Create a Boolean variable to make sure that the system doesn't overload of requests;

    var isReady = true;

    1. Next make the function to intercept the correct message;

    bot.on('message', message =>{ENTER CODE HERE});

    1. Create an if statement to check if the message is correct & if the bot is ready;

    if (isReady && message.content === 'MESSAGE'){ENTER CODE HERE}

    1. Set the bot to unready so that it cannot process events until it finishes;

    isReady = false;

    1. Create a variable for the channel that the message-sender is currently in;

    var voiceChannel = message.member.voice.channel;

    1. Join that channel and keep track of all errors;

    voiceChannel.join().then(connection =>{ENTER CODE HERE}).catch(err => console.log(err));

    1. Create a refrence to and play the audio file;

    const dispatcher = connection.play('./audiofile.mp3');

    1. Slot to wait until the audio file is done playing;

    dispatcher.on("end", end => {ENTER CODE HERE});

    1. Leave channel after audio is done playing;

    voiceChannel.leave();

    1. Login to the application;

    bot.login('CLIENT TOKEN HERE');

    After you are all finished with this, make sure to check for any un-closed brackets or parentheses. i made this because it took my hours until I finally found a good solution so I just wanted to share it with anybody who is out there looking for something like this.

    0 讨论(0)
提交回复
热议问题