Add new music commands

This commit is contained in:
Emily 2020-04-30 14:44:23 +10:00
parent 42df6b71c7
commit 59084b07cb
7 changed files with 275 additions and 0 deletions

30
src/commands/fixmusic.js Normal file
View file

@ -0,0 +1,30 @@
const { getGuild } = require('../modules/music')
module.exports.run = async (client, message, args, level) =>{
guild = getGuild(message.guild.id)
guild.queue = []
guild.playing = false
guild.paused = false
guild.skippers = []
if (guild.dispatcher) {
guild.dispatcher.end('silent')
}
message.channel.send('<:success:466995111885144095> Music has been fixed (hopefully)')
}
exports.conf = {
enabled: true,
guildOnly: true,
aliases: [],
permLevel: "Moderator",
requiredPerms: []
};
exports.help = {
name: "fixmusic",
category: "Music",
description: 'Fixes music if it breaks.',
usage: 'fixmusic',
};

33
src/commands/movehere.js Normal file
View file

@ -0,0 +1,33 @@
const { getGuild } = require('../modules/music')
const Discord = require("discord.js")
module.exports.run = async (client, message, args, level) =>{
const guild = getGuild(message.guild.id)
if (!guild.playing) {
return message.channel.send('<:error:466995152976871434> Nothing is playing.')
}
if (guild.channel.id === message.channel.id) {
return message.channel.send('<:error:466995152976871434> Music messages are already being sent to this channel.')
}
guild.channel = message.channel
message.channel.send('<:success:466995111885144095> Music messages will now be sent to this channel.')
}
exports.conf = {
enabled: true,
guildOnly: true,
aliases: [],
permLevel: "Moderator",
requiredPerms: []
};
exports.help = {
name: 'movehere',
category: 'Music',
description: 'Moves music related messages to the channel the this command is ran in.',
usage: 'movehere',
};

56
src/commands/movesong.js Normal file
View file

@ -0,0 +1,56 @@
const { getGuild } = require('../modules/music')
exports.run = async (client, message, args) => {
const queue = getGuild(message.guild.id).queue
if (queue.length < 3) {
return message.channel.send('<:error:466995152976871434> Not enough songs are in the queue for this command to work!')
}
if (!args[0]) {
return client.userError(message, exports, 'Missing argument, the `current position` argument is required!')
}
if (!args[1]) {
return client.userError(message, exports, 'Missing argument, the `new position` argument is required!')
}
const oldPosition = +args[0]
const newPosition = +args[1]
if (isNaN(oldPosition) === true) {
return message.channel.send('<:error:466995152976871434> That isn\'t a number! You need to tell me the songs position in the queue (1, 2, etc.)')
}
if (isNaN(newPosition) === true) {
return message.channel.send('<:error:466995152976871434> That isn\'t a number! You need to tell me the songs position in the queue (1, 2, etc.)')
}
if (oldPosition < 1 || oldPosition >= queue.length) {
return message.channel.send('<:error:466995152976871434> Old position is not a valid song ID.')
}
if (newPosition < 1 || newPosition >= queue.length) {
return message.channel.send('<:error:466995152976871434> New position is not a valid song ID.')
}
const songName = queue[oldPosition].video.title
queue.splice(newPosition, 0, queue.splice(oldPosition, 1)[0])
message.channel.send(`<:success:466995111885144095> Moved **${songName}** from position \`${oldPosition}\` to \`${newPosition}\``)
}
exports.conf = {
enabled: true,
guildOnly: true,
aliases: [],
permLevel: "Moderator",
requiredPerms: []
}
exports.help = {
name: 'movesong',
category: 'Music',
description: 'Moves a song to a new position in the queue.',
usage: 'movesong [current position] [new position]'
}

23
src/commands/playnext.js Normal file
View file

@ -0,0 +1,23 @@
const { play } = require('../modules/music')
exports.run = async (client, message, args) => {
if (!args[0]) {
return message.channel.send(`<:error:466995152976871434> You didn't give me a song name or YouTube URL! Usage: \`${client.commands.get('play').help.usage}\``)
}
await play(client, message, args.join(' '), true)
}
exports.conf = {
enabled: true,
guildOnly: true,
aliases: [],
permLevel: "Moderator",
requiredPerms: []
}
exports.help = {
name: 'playnext',
category: 'Music',
description: 'Similar to play, but adds it to the start of the queue instead of the end.',
usage: 'playnext [song]'
}

34
src/commands/shuffle.js Normal file
View file

@ -0,0 +1,34 @@
const { getGuild } = require('../modules/music')
exports.run = async (client, message) => {
var queue = getGuild(message.guild.id).queue
if (queue.length < 4) {
return message.channel.send('<:error:466995152976871434> There aren\'t enough songs are in the queue for this command to work!')
}
const max = queue.length - 1
const min = 1
for (let i = max; i >= min; i--) {
const randomIndex = Math.floor(Math.random() * (max - min + 1)) + min
const itemAtIndex = queue[randomIndex]
queue[randomIndex] = queue[i]
queue[i] = itemAtIndex
}
message.channel.send('<:success:466995111885144095> Queue shuffled!')
}
exports.conf = {
enabled: true,
guildOnly: true,
aliases: [],
permLevel: "Moderator",
requiredPerms: []
}
exports.help = {
name: 'shuffle',
category: 'Music',
description: 'Mixes up the songs in the queue',
usage: 'shuffle'
}

42
src/commands/songinfo.js Normal file
View file

@ -0,0 +1,42 @@
const { getGuild, createTimestamp } = require('../modules/music')
const { MessageEmbed } = require('discord.js')
exports.run = async (client, message, args) => {
const guild = getGuild(message.guild.id)
if (guild.queue.length < 1) {
return message.channel.send(client.config.emojis.error + ' Nothing is in the queue!')
}
const songID = +args[0]
if (isNaN(songID) === true) {
return message.channel.send('<:error:466995152976871434> That isn\'t a number! You need to tell me the songs position in the queue (1, 2, etc.)')
}
const s = guild.queue[songID]
const embed = new MessageEmbed()
embed.setThumbnail(s.video.videoThumbnails[1].url)
embed.setColor(client.embedColour(message))
embed.setDescription(`**[${s.video.title}](https://www.youtube.com/watch?v=${s.video.videoId})**`)
embed.addField('Channel:', s.video.author, true)
embed.addField('Length:', '`[' + createTimestamp(s.video.lengthSeconds) + ']`', true)
embed.setFooter('Requested by ' + s.requestedBy.tag, s.requestedBy.avatarURL({ format: 'png', dynamic: true, size: 2048 }))
message.channel.send(embed)
}
exports.conf = {
enabled: true,
guildOnly: true,
aliases: [],
permLevel: "User",
requiredPerms: []
}
exports.help = {
name: "songinfo",
category: "Music",
description: "Sends you information about a song in the queue. Song ID is the song's position in the queue.",
usage: "songinfo [songID]"
}

57
src/commands/volume.js Normal file
View file

@ -0,0 +1,57 @@
const { getGuild, setVolume } = require('../modules/music')
exports.run = async (client, message, args) => {
if (!args[0]) {
return message.channel.send(`<:error:466995152976871434> No input! Usage: \`${client.commands.get('volume').help.usage}\``)
}
const guild = getGuild(message.guild.id)
if (guild.queue.length < 1 || !guild.playing || !guild.dispatcher) {
return message.channel.send(
'<:error:466995152976871434> Nothing is playing.'
)
}
let userVolume = args[0]
if (userVolume.includes('%')) {
userVolume = userVolume.replace('%', '')
}
userVolume = +userVolume
if (isNaN(userVolume) === true) {
return message.channel.send('<:error:466995152976871434> Input must be a number!')
}
if (userVolume > 100 || userVolume < 1) {
return message.channel.send('<:error:466995152976871434> Invalid input, input must be between 1-100')
}
if (userVolume) {
userVolume = Number(userVolume)
userVolume = userVolume / 100
if (userVolume <= 1) {
setVolume(message.guild, userVolume)
message.channel.send('<:success:466995111885144095> Set volume to ' + userVolume * 100 + '%')
}
}
}
exports.conf = {
enabled: true,
guildOnly: true,
aliases: [],
permLevel: "Moderator",
requiredPerms: []
}
exports.help = {
name: 'volume',
category: 'Music',
description: 'Sets volume of currently playing music. (100% = 25% of the actual volume)',
usage: 'volume [volume]'
}