This commit is contained in:
Emily 2020-04-22 22:57:25 +10:00
commit 7a3035e00b
6 changed files with 125 additions and 27 deletions

View file

@ -20,33 +20,48 @@ exports.help = {
const { getGuild } = require('../utils/music') const { getGuild } = require('../utils/music')
module.exports.run = (client, message, args, level) => { module.exports.run = (client, message, args, level) => {
const queue = getGuild(message.guild.id).queue const queue = getGuild(message.guild.id).queue
const oldPosition = +args[0]
const newPosition = +args[1]
const songName = queue[oldPosition].video.title
if (queue.length < 3) { if (queue.length < 3) {
return message.channel.send('<:error:466995152976871434> Not enough songs are in the queue for this command to work!') return message.channel.send('<:error:466995152976871434> Not enough songs are in the queue for this command to work!')
} }
if (!args[0]) { if (!args[0]) {
return message.channel.send(`<:error:466995152976871434> You didn't tell me what song to move! Usage: \`${client.commands.get('removesong').help.usage}\``) return client.userError(message, exports, 'Missing argument, the `current position` argument is required!')
} }
if (!args[1]) { if (!args[1]) {
return message.channel.send(`<:error:466995152976871434> You didn't tell me what position in the queue you want to move this song to! Usage: \`${client.commands.get('removesong').help.usage}\``) return client.userError(message, exports, 'Missing argument, the `new position` argument is required!')
} }
if (isNaN(oldPosition) === true || isNaN(newPosition) === true) { const oldPosition = +args[0]
const newPosition = +args[1]
if (isNaN(oldPosition) === true) {
return message.channel.send('That isn\'t a number! You need to tell me the songs position in the queue (1, 2, etc.)') return message.channel.send('That isn\'t a number! You need to tell me the songs position in the queue (1, 2, etc.)')
} }
if (newPosition >= queue.length) { if (isNaN(newPosition) === true) {
var k = newPosition - queue.length + 1 return message.channel.send('That isn\'t a number! You need to tell me the songs position in the queue (1, 2, etc.)')
while (k--) {
queue.push(undefined)
}
} }
if (oldPosition < 1) {
return message.channel.send('This number is too low!')
}
if (newPosition < 1) {
return message.channel.send('This number is too low!')
}
if (oldPosition >= queue.length) {
return message.channel.send('This number is too high!')
}
if (newPosition >= queue.length) {
return message.channel.send('This number is too high!')
}
const songName = queue[oldPosition].video.title
queue.splice(newPosition, 0, queue.splice(oldPosition, 1)[0]) queue.splice(newPosition, 0, queue.splice(oldPosition, 1)[0])
message.channel.send(`Moved **${songName}** from position \`${oldPosition}\` to \`${newPosition}\``) message.channel.send(`Moved **${songName}** from position \`${oldPosition}\` to \`${newPosition}\``)

32
commands/reload.js Normal file
View file

@ -0,0 +1,32 @@
exports.conf = {
enabled: true,
guildOnly: false,
aliases: [],
permLevel: 'Developer',
requiredPerms: [],
cooldown: 2000
}
exports.help = {
name: 'reload',
category: 'Developer',
description: 'Reloads a command without having to restart the whole bot.',
usage: 'reload [command]',
parameters: '[command] - command you want to reload'
}
exports.run = async (client, message, args) => { // eslint-disable-line no-unused-vars
if (!args || args.length < 1) {
return message.channel.send(
`<:error:466995152976871434> You must provide a command to reload! Usage: \`${client.commands.get('reload').help.usage}\``
)
}
let response = await client.unloadCommand(args[0])
if (response) return message.channel.send(`<:error:466995152976871434> Error unloading: ${response}`)
response = client.loadCommand(args[0])
if (response) return message.channel.send(`<:error:466995152976871434> Error loading: ${response}`)
message.channel.send(`<:success:466995111885144095> \`${args[0]}\` has been reloaded!`)
}

View file

@ -25,16 +25,13 @@ module.exports.run = (client, message, args, level) => {
return message.channel.send('Not enough songs are in the queue for this command to work!') return message.channel.send('Not enough songs are in the queue for this command to work!')
} }
let j, x, i const max = queue.length - 1
const min = 1
for (i = queue.length - 1; i > 0; i--) { for (let i = max; i >= min; i--) {
if (i > 1) { const randomIndex = Math.floor(Math.random() * (max - min + 1)) + min
console.log(i) const itemAtIndex = queue[randomIndex]
j = Math.floor(Math.random() * (i + 1)) queue[randomIndex] = queue[i]
x = queue[i] queue[i] = itemAtIndex
queue[i] = queue[j]
queue[j] = x
}
} }
message.channel.send('Queue shuffled!') message.channel.send('Queue shuffled!')

View file

@ -24,11 +24,12 @@ exports.run = async (client, message) => {
if (guild.queue.length < 1 || !guild.playing || !guild.dispatcher) return message.channel.send('Nothing is playing.') if (guild.queue.length < 1 || !guild.playing || !guild.dispatcher) return message.channel.send('Nothing is playing.')
if (!message.member.voice.channel) return message.channel.send('You need to be in voice channel to use this command!') if (!message.member.voice.channel) return message.channel.send('You need to be in voice channel to use this command!')
guild.dispatcher.end('silent')
guild.queue = []
guild.playing = false guild.playing = false
guild.paused = false guild.paused = false
guild.queue = [] guild.skippers = []
guild.dispatcher.end('silent')
message.channel.send('Playback stopped!') message.channel.send('Playback stopped!')
} }

View file

@ -0,0 +1,48 @@
// Copyright 2020 Emily J. / mudkipscience and contributors. Subject to the AGPLv3 license.
const music = require('../utils/music')
module.exports = (client, oldState, newState) => {
if (newState.channelID !== oldState.channelID) {
const guild = music.getGuild(newState.guild.id)
// Reset queue, dispatcher, etc if Woomy is forcibly disconnected from the queue
if (!guild.voiceChannel.members.get(client.user.id) && guild.queue.length > 0) {
guild.queue = []
guild.playing = false
guild.paused = false
guild.skippers = []
}
// Auto-disconnect feature
if (guild.playing && guild.voiceChannel.id === oldState.channelID) {
if (guild.voiceChannel.members.filter(member => !member.user.bot).size < 1) {
guild.autoDisconnect = true
guild.message.channel.send(`The music will end in 2 minutes if nobody rejoins **${guild.voiceChannel.name}**`)
.then(msg => {
msg.delete({ timeout: 120000 })
})
setTimeout(() => {
if (guild.dispatcher !== null && guild.voiceChannel.members.filter(member => !member.user.bot).size < 1 && guild.autoDisconnect) {
// Probably should be async? But no need here I think
guild.dispatcher.end('silent')
guild.queue = []
guild.playing = false
guild.paused = false
guild.dispatcher = null
guild.skippers = []
guild.message.channel.send('The music has ended because no one was listening to me ;~;')
} else {
guild.autoDisconnect = false
}
}, 120000)
} else {
guild.autoDisconnect = false
}
}
}
}

View file

@ -66,6 +66,7 @@ exports.getVideoByQuery = async function (client, query) {
exports.play = async function (client, message, query, ignoreQueue) { exports.play = async function (client, message, query, ignoreQueue) {
const guild = exports.getGuild(message.guild.id) const guild = exports.getGuild(message.guild.id)
guild.message = message
if (!message.member.voice.channel && !guild.voiceChannel) { if (!message.member.voice.channel && !guild.voiceChannel) {
return message.reply('You have to be connected to a voice channel to use this command!') return message.reply('You have to be connected to a voice channel to use this command!')
@ -92,8 +93,10 @@ exports.play = async function (client, message, query, ignoreQueue) {
// Fix the bot if somehow broken // Fix the bot if somehow broken
// music "playing", nothing in queue // music "playing", nothing in queue
if ((guild.playing || guild.dispatcher) && guild.queue.length === 0) { if ((guild.playing || guild.dispatcher) && guild.queue.length === 0) {
guild.queue = []
guild.playing = false guild.playing = false
guild.dispatcher = null guild.paused = false
guild.skippers = []
// music not playing, something is in queue // music not playing, something is in queue
} else if (!guild.playing && !guild.dispatcher && guild.queue.length > 0) { } else if (!guild.playing && !guild.dispatcher && guild.queue.length > 0) {
guild.queue = [] guild.queue = []
@ -169,7 +172,6 @@ exports.play = async function (client, message, query, ignoreQueue) {
guild.playing = true guild.playing = true
guild.voiceChannel = vc guild.voiceChannel = vc
console.log(vc)
const connection = await vc.join() const connection = await vc.join()
@ -188,7 +190,10 @@ exports.play = async function (client, message, query, ignoreQueue) {
if (guild.queue.length > 0) { if (guild.queue.length > 0) {
exports.play(client, message, null, true) exports.play(client, message, null, true)
} else { } else {
guild.dispatcher = null guild.queue = []
guild.playing = false
guild.paused = false
guild.skippers = []
connection.disconnect() connection.disconnect()
} }