0

Okay so my question is how do I access functions from my play.js file in my skip.js file. I really new to javascript so you might have to really dumb it down for me to understand. But my main goal is in skip.js to use my play.getQueue() function. I think I will understand the rest.

This is the play.js file.

const commando = require('discord.js-commando');
var YoutubeDL = require('youtube-dl');
const ytdl = require('ytdl-core');
var bot;
let queues = {};

let MAX_QUEUE_SIZE = 20;
let DEFAULT_VOLUME = 50;
let ALLOW_ALL_SKIP = true;
let CLEAR_INVOKER = false;
class playCommand extends commando.Command {
constructor(client) {
    bot = client;
    super(client, {
        name: 'play',
        group: 'music',
        memberName: 'play',
        description: 'Plays x Song'
    });
}



async run(msg, args) {
    msg.delete(5000);

    // Make sure the user is in a voice channel.
    if (msg.member.voiceChannel === undefined) return msg.channel.sendMessage(wrap('You\'re not in a voice channel.')).then(msg => {
        msg.delete(5000);
    });



    // Get the queue.
    const queue = getQueue(msg.guild.id);

    // Check if the queue has reached its maximum size.
    if (queue.length >= MAX_QUEUE_SIZE) {
        return msg.channel.sendMessage(wrap('Maximum queue size reached!')).then(msg => {
            msg.delete(5000);
        });
    }

    // Get the video information.
    msg.channel.sendMessage(wrap('Searching...')).then(response => {
        var searchstring = args

        if (!args.toLowerCase().startsWith('http')) {
            searchstring = 'gvsearch1:' + args;
        }

        YoutubeDL.getInfo(searchstring, ['-q', '--no-warnings', '--force-ipv4'], (err, info) => {
            // Verify the info.
            if (err || info.format_id === undefined || info.format_id.startsWith('0')) {
                return response.edit(wrap('Invalid video!'));
            }

            info.requester = msg.author.id;

            // Queue the video.
            response.edit(wrap('Queued: ' + info.title)).then(() => {
                queue.push(info);
                // Play if only one element in the queue.
                if (queue.length === 1) executeQueue(msg, queue);
            }).catch(console.log);
        });
    }).catch(console.log);

}


}


/**
 * Checks if a user is an admin.
 * 
 * @param {GuildMember} member - The guild member
 * @returns {boolean} - 
 */
function isAdmin(member) {
    return member.hasPermission("ADMINISTRATOR");
}

/**
 * Checks if the user can skip the song.
 * 
 * @param {GuildMember} member - The guild member
 * @param {array} queue - The current queue
 * @returns {boolean} - If the user can skip
 */
function canSkip(member, queue) {
    if (ALLOW_ALL_SKIP) return true;
    else if (queue[0].requester === member.id) return true;
    else if (isAdmin(member)) return true;
    else return false;
}


function getQueue (server) {

    // Return the queue.
    if (!queues[server]) queues[server] = [];
    return queues[server];
}



function queue(msg, args) {
    // Get the queue.
    const queue = getQueue(msg.guild.id);

    // Get the queue text.
    const text = queue.map((video, index) => (
        (index + 1) + ': ' + video.title
    )).join('\n');

    // Get the status of the queue.
    let queueStatus = 'Stopped';
    const voiceConnection = bot.voiceConnections.find(val => val.channel.guild.id == msg.guild.id);
    if (voiceConnection !== null) {
        const dispatcher = voiceConnection.player.dispatcher;
        queueStatus = dispatcher.paused ? 'Paused' : 'Playing';
    }

    // Send the queue and status.
    msg.channel.sendMessage(wrap('Queue (' + queueStatus + '):\n' + text));
}

function executeQueue(msg, queue) {
    // If the queue is empty, finish.
    if (queue.length === 0) {
        msg.channel.sendMessage(wrap('Playback finished.')).then(msg => {
            msg.delete(5000);
        });

        // Leave the voice channel.
        const voiceConnection = bot.voiceConnections.find(val => val.channel.guild.id == msg.guild.id);
        if (voiceConnection !== null) return voiceConnection.disconnect();
    }

    new Promise((resolve, reject) => {
        // Join the voice channel if not already in one.
        const voiceConnection = bot.voiceConnections.find(val => val.channel.guild.id == msg.guild.id);
        if (voiceConnection === null) {
            // Check if the user is in a voice channel.
            if (msg.member.voiceChannel) {
                msg.member.voiceChannel.join().then(connection => {
                    resolve(connection);
                }).catch((error) => {
                    console.log(error);
                });
            } else {
                // Otherwise, clear the queue and do nothing.
                queue.splice(0, queue.length);
                reject();
            }
        } else {
            resolve(voiceConnection);
        }
    }).then(connection => {
        // Get the first item in the queue.
        const video = queue[0];

        console.log(video.webpage_url);

        // Play the video.
        msg.channel.sendMessage(wrap('Now Playing: ' + video.title)).then(msg => {
            msg.delete(5000);
            let dispatcher = connection.playStream(ytdl(video.webpage_url, {
                filter: 'audioonly'
            }), {
                seek: 0,
                volume: (DEFAULT_VOLUME / 100)
            });

            connection.on('error', (error) => {
                // Skip to the next song.
                console.log(error);
                queue.shift();
                executeQueue(msg, queue);
            });

            dispatcher.on('error', (error) => {
                // Skip to the next song.
                console.log(error);
                queue.shift();
                executeQueue(msg, queue);
            });

            dispatcher.on('end', () => {
                // Wait a second.
                setTimeout(() => {
                    if (queue.length > 0) {
                        // Remove the song from the queue.
                        queue.shift();
                        // Play the next song in the queue.
                        executeQueue(msg, queue);
                    }
                }, 1000);
            });
        }).catch((error) => {
            console.log(error);
        });
    }).catch((error) => {
        console.log(error);
    });
}

function wrap(text) {
    return '```\n' + text.replace(/`/g, '`' + String.fromCharCode(8203)) + '\n```';
}


module.exports = playCommand;

This is the skip.js file

const commando = require('discord.js-commando');
var YoutubeDL = require('youtube-dl');
const ytdl = require('ytdl-core');
var bot;
var play = require('./play');
class skipCommand extends commando.Command {
constructor(client) {
    bot = client;
    super(client, {
        name: 'skip',
        group: 'music',
        memberName: 'skip',
        description: 'skips song'
    });
}

async run(msg, suffix) {
    // Get the voice connection.
    const voiceConnection = bot.voiceConnections.find(val => val.channel.guild.id == msg.guild.id);
    if (voiceConnection === null) return msg.channel.sendMessage(wrap('No music being played.'));

    // Get the queue.
    const queue = play.getQueue(msg.guild.id);

    if (!canSkip(msg.member, queue)) return msg.channel.sendMessage(wrap('You cannot skip this as you didn\'t queue it.')).then((response) => {
        response.delete(5000);
    });

    // Get the number to skip.
    let toSkip = 1; // Default 1.
    if (!isNaN(suffix) && parseInt(suffix) > 0) {
        toSkip = parseInt(suffix);
    }
    toSkip = Math.min(toSkip, queue.length);

    // Skip.
    queue.splice(0, toSkip - 1);

    // Resume and stop playing.
    const dispatcher = voiceConnection.player.dispatcher;
    if (voiceConnection.paused) dispatcher.resume();
    dispatcher.end();

    msg.channel.sendMessage(wrap('Skipped ' + toSkip + '!'));
}



}

function canSkip(member, queue) {
return true;
}

function getQueue(server) {

    // Return the queue.
    if (!queues[server]) queues[server] = [];
    return queues[server];
}


function queue(msg, args) {
// Get the queue.
const queue = play.getQueue(msg.guild.id);

// Get the queue text.
const text = queue.map((video, index) => (
    (index + 1) + ': ' + video.title
)).join('\n');

// Get the status of the queue.
let queueStatus = 'Stopped';
const voiceConnection = bot.voiceConnections.find(val => val.channel.guild.id == msg.guild.id);
if (voiceConnection !== null) {
    const dispatcher = voiceConnection.player.dispatcher;
    queueStatus = dispatcher.paused ? 'Paused' : 'Playing';
}

// Send the queue and status.
msg.channel.sendMessage(wrap('Queue (' + queueStatus + '):\n' + text));
}

function wrap(text) {
return '```\n' + text.replace(/`/g, '`' + String.fromCharCode(8203)) + '\n```';
}

module.exports = skipCommand;
1
  • search about exports and imports Commented May 27, 2017 at 12:57

1 Answer 1

1

You can use export module for this

lets assume you have greetings.js file

exports.hello = function(){
  console.log("HELLO");
}

you can access this hello function in other files (main.js) like this

var greetings = require("./greetings.js");
greetings.hello();

output : HELLO

you can check this link for reference

https://www.sitepoint.com/understanding-module-exports-exports-node-js/

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.