Compare commits
13 Commits
master
...
music-cmds
Author | SHA1 | Date |
---|---|---|
rhearmas | 738d11854c | |
rhearmas | a7f2e66a5a | |
rhearmas | 15bde0a757 | |
rhearmas | c313706656 | |
rhearmas | f336ef46f9 | |
rhearmas | 18456643ec | |
rhearmas | cde00aead2 | |
rhearmas | 3cc54aa6e1 | |
rhearmas | a07f715a8c | |
rhearmas | 704def74a5 | |
rhearmas | f08b46c8ab | |
unknown | aeb16aad84 | |
carol | 96566b89f7 |
|
@ -6,12 +6,12 @@ exports.run = async (client, message, args, level) => {
|
|||
let responsePlace = message.channel;
|
||||
await message.delete();
|
||||
|
||||
const messages = await message.channel.fetchMessages({ limit: Math.min(count, 100), before: message.id });
|
||||
const messages = await message.channel.messages.fetch({ limit: Math.min(count, 100), before: message.id });
|
||||
const deleted = messages.size;
|
||||
|
||||
message.channel.bulkDelete(messages.size);
|
||||
|
||||
(await responsePlace.send(`:white_check_mark: **Cleared \`${messages.size}\` message${deleted === 1 ? '' : 's'}.**`)).delete(2000);
|
||||
(await responsePlace.send(`:white_check_mark: **Cleared \`${messages.size}\` message${deleted === 1 ? '' : 's'}.**`)).delete({timeout: 2000});
|
||||
};
|
||||
|
||||
exports.conf = {
|
||||
|
|
|
@ -0,0 +1,342 @@
|
|||
const ytdl = require("ytdl-core-discord");
|
||||
|
||||
async function play(connection, message) {
|
||||
var server = client.servers[message.guild.id];
|
||||
|
||||
server.dispatcher = connection.play(await ytdl(server.queue[0]), {filter: "audioonly"}, {type: opus});
|
||||
|
||||
server.queue.shift();
|
||||
|
||||
server.dispatcher.on("end", function() {
|
||||
if(server.queue[0]) play(connection, message);
|
||||
else connection.disconnect();
|
||||
});
|
||||
}
|
||||
|
||||
exports.run = async (client, message, args, level) => {
|
||||
if(!args[0]) return message.reply("please provide a valid URL.");
|
||||
if(!message.member.voice.channel) return message.reply("you must be in a voice channel to use this command.");
|
||||
|
||||
if(!client.servers[message.guild.id]) client.servers[message.guild.id] = {
|
||||
queue: []
|
||||
};
|
||||
|
||||
var server = client.servers[message.guild.id];
|
||||
|
||||
server.queue.push(args[0]);
|
||||
|
||||
if(!message.guild.voiceConnection) message.member.voice.channel.join().then(function(connection) {
|
||||
play(connection, message);
|
||||
});
|
||||
|
||||
/*
|
||||
const queue = client.queue;
|
||||
const serverQueue = client.queue.get(message.guild.id);
|
||||
|
||||
const voiceChannel = message.member.voiceChannel;
|
||||
if(!voiceChannel) return message.reply("you need to be in a voice channel to use this command!");
|
||||
|
||||
const permissions = voiceChannel.permissionsFor(client.user);
|
||||
if(!permissions.has("CONNECT") || !permissions.has("SPEAK")) return message.reply("I don't have the valid permissions to connect and speak in the channel you're in!");
|
||||
|
||||
const songInfo = await ytdl.getInfo(args[0]);
|
||||
const song = {
|
||||
title: songInfo.title,
|
||||
url: songInfo.video_url
|
||||
};
|
||||
|
||||
if(!serverQueue) {
|
||||
const queueConstruct = {
|
||||
textChannel: message.channel,
|
||||
voiceChannel: voiceChannel,
|
||||
connection: null,
|
||||
songs: [],
|
||||
volume: 5,
|
||||
playing: true
|
||||
};
|
||||
|
||||
queue.set(message.guild.id, queueConstruct);
|
||||
queueConstruct.songs.push(song);
|
||||
|
||||
try {
|
||||
var connection = await voiceChannel.join();
|
||||
queueConstruct.connection = connection;
|
||||
this.play(message, queueConstruct.songs[0]);
|
||||
} catch(err) {
|
||||
client.logger.error(err);
|
||||
queue.delete(message.guild.id);
|
||||
return message.channel.send(`Uh oh! Looks like I hit a snag. Here's the error that Node picked up: \`${err}\``);
|
||||
}
|
||||
} else {
|
||||
serverQueue.songs.push(song);
|
||||
return message.channel.send(`**${song.title}** has been added to the queue!`);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
const query = args[0];
|
||||
|
||||
var voiceChannel = message.author.voiceChannel;
|
||||
if (!voiceChannel) return message.reply("you need to be in a voice channel to use this command!");
|
||||
|
||||
if(query.match(/^(?!.*\?.*\bv=)https:\/\/www\.youtube\.com\/.*\?.*\blist=.*%/)) {
|
||||
try {
|
||||
const playlist = await youtube.getPlaylist(query);
|
||||
const videosObj = await playlist.getVideos();
|
||||
|
||||
for (let i = 0; i < videosObj.length; i++) {
|
||||
const video = await videosObj[i].fetch();
|
||||
|
||||
const url = `https://www.youtube.com/watch?v=${video.raw.id}`;
|
||||
const title = video.raw.snippet.title;
|
||||
let duration = this.formatDuration(video.duration);
|
||||
const thumbnail = video.thumbnails.high.url;
|
||||
if (duration == "00:00") duration = "Live Stream";
|
||||
|
||||
const song = {
|
||||
url,
|
||||
title,
|
||||
duration,
|
||||
thumbnail,
|
||||
voiceChannel
|
||||
};
|
||||
|
||||
message.guild.musicData.push(song);
|
||||
}
|
||||
if(message.guild.musicData.isPlaying == false) {
|
||||
message.guild.musicData.isPlaying == true;
|
||||
return this.playSong(message.guild.musicData.queue, message);
|
||||
} else if (message.guild.musicData.isPlaying == true) {
|
||||
return message.channel.send(`Playlist - :musical_note: ${playlist.title} :musical_note: has been added to the queue.`);
|
||||
}
|
||||
} catch (err) {
|
||||
client.logger.error(err);
|
||||
return message.reply("that playlist is either private or doesn't exist!");
|
||||
}
|
||||
}
|
||||
if(query.match(/^(http(s)?:\/\/)?((w){3}.)?youtu(be|.be)?(\.com)?\/.+/)) {
|
||||
const url = query;
|
||||
try {
|
||||
query = query.replace(/(>|<)/gi, "").split(/(vi\/|v=|\/v\/|youtu\.be\/|\/embed\/)/);
|
||||
|
||||
const id = query[2].split(/[^0-9a-z_\-]/i)[0];
|
||||
const video = await youtube.getVideoByID(id);
|
||||
const title = video.title;
|
||||
let duration = this.formatDuration(video.duration);
|
||||
const thumbnail = video.thumbnails.high.url;
|
||||
if(duration == "00:00") duration = "Live Stream";
|
||||
const song = {
|
||||
url,
|
||||
title,
|
||||
duration,
|
||||
thumbnail,
|
||||
voiceChannel
|
||||
};
|
||||
message.guild.musicData.queue.push(song);
|
||||
if(message.guild.musicData.isPlaying == false || typeof message.guild.musicData.isPlaying == "undefined") {
|
||||
message.guild.musicData.isPlaying = true;
|
||||
return this.playSong(message.guild.musicData.queue, message);
|
||||
} else if(message.guild.musicData.isPlaying == true) {
|
||||
return message.channel.send(`${song.title} has been added to the queue.`);
|
||||
}
|
||||
} catch (err) {
|
||||
client.logger.error(err);
|
||||
return message.channel.send("Uh oh! Looks like I hit a snag. Ask a bot administrator to check the console.");
|
||||
}
|
||||
}
|
||||
try {
|
||||
const videos = await youtube.searchVideos(query, 5);
|
||||
if(videos.length < 5) {
|
||||
return message.reply("it seems I had some trouble finding what you requested. Please try again or be more specific.");
|
||||
}
|
||||
const vidNameArr = [];
|
||||
for(let i = 0; i < videos.length; i++) {
|
||||
vidNameArr.push(`${i + 1}: ${videos[i].title}`);
|
||||
}
|
||||
vidNameArr.push("exit");
|
||||
|
||||
const embed = new client.embed("Top 5 songs found", "Please select a song from the list below.", [
|
||||
{
|
||||
name: "**__Song 1__**",
|
||||
value: vidNameArr[0]
|
||||
}
|
||||
{
|
||||
name: "**__Song 2__**",
|
||||
value: vidNameArr[1]
|
||||
}
|
||||
{
|
||||
name: "**__Song 3__**",
|
||||
value: vidNameArr[2]
|
||||
}
|
||||
{
|
||||
name: "**__Song 4__**",
|
||||
value: vidNameArr[3]
|
||||
}
|
||||
{
|
||||
name: "**__Song 5__**",
|
||||
value: vidNameArr[4]
|
||||
}
|
||||
],
|
||||
{
|
||||
author: message.author.tag,
|
||||
authorIcon: message.author.avatarURL
|
||||
});
|
||||
var songEmbed = await message.channel.send({ embed });
|
||||
|
||||
try {
|
||||
var response = await message.channel.awaitMessages(
|
||||
msg => (msg.content > 0 && msg.content < 6) || msg.content === "exit",
|
||||
{
|
||||
max: 1,
|
||||
maxProcessed: 1,
|
||||
time: 20000,
|
||||
errors: ["time"]
|
||||
}
|
||||
);
|
||||
|
||||
var videoIndex = parseInt(response.first().content)
|
||||
} catch (err) {
|
||||
client.logger.error(err);
|
||||
songEmbed.delete();
|
||||
return message.reply("Please try again, and enter a valid number from 1 to 5.\n*(Hint: you can exit this menu by responding with \`exit\`)*");
|
||||
}
|
||||
const url = `https://www.youtube.com/watch?v=${video.raw.id}`;
|
||||
const title = video.title;
|
||||
let duration = this.formatDuration(video.duration);
|
||||
const thumbnail = video.thumbnails.high.url;
|
||||
if(duration == "00:00") duration = "Live Stream";
|
||||
const song = {
|
||||
url,
|
||||
title,
|
||||
duration,
|
||||
thumbnail,
|
||||
voiceChannel
|
||||
};
|
||||
|
||||
message.guild.musicData.queue.push(song);
|
||||
|
||||
if(message.guild.musicData.isPlaying == false) {
|
||||
message.guild.musicData.isPlaying = true;
|
||||
songEmbed.delete();
|
||||
this.playSong(message.guild.musicData.queue, message);
|
||||
} else if(message.guild.musicData.isPlaying == true) {
|
||||
songEmbed.delete();
|
||||
return message.channel.send(`${song.title} has been added to queue.`);
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
if (songEmbed) {
|
||||
songEmbed.delete();
|
||||
}
|
||||
return message.channel.send("Something went wrong playing one of the songs, is its source private?");
|
||||
}
|
||||
*/
|
||||
};
|
||||
|
||||
exports.conf = {
|
||||
enabled: true,
|
||||
guildOnly: true,
|
||||
aliases: ["yt"],
|
||||
permLevel: "Moderator"
|
||||
};
|
||||
|
||||
exports.help = {
|
||||
name: "play",
|
||||
category: "Music",
|
||||
description: "Play a song/playlist, or queue it if something's already playing.",
|
||||
usage: "play [url]"
|
||||
};
|
||||
|
||||
/*
|
||||
function play(message, song) {
|
||||
const queue = client.queue;
|
||||
const guild = message.guild;
|
||||
const serverQueue = queue.get(message.guild.id);
|
||||
|
||||
if (!song) {
|
||||
serverQueue.voiceChannel.leave();
|
||||
queue.delete(guild.id);
|
||||
return;
|
||||
}
|
||||
|
||||
const dispatcher = serverQueue.connection
|
||||
.playStream(ytdl(song.url, { fliter: "audioonly" }))
|
||||
.on("end", () => {
|
||||
console.log("Music ended!");
|
||||
serverQueue.songs.shift();
|
||||
this.play(message, serverQueue.songs[0]);
|
||||
})
|
||||
.on("error", error => {
|
||||
console.error(error);
|
||||
});
|
||||
dispatcher.setVolumeLogarithmic(serverQueue.volume / 5);
|
||||
};
|
||||
*/
|
||||
|
||||
/*
|
||||
function playSong(queue, message) {
|
||||
let voiceChannel;
|
||||
queue[0].voiceChannel
|
||||
.join()
|
||||
.then(connection => {
|
||||
const dispatcher = connection
|
||||
.play(
|
||||
ytdl(queue[0].url, {
|
||||
quality: "highestaudio",
|
||||
highWaterMark: 1024 * 1024 * 10
|
||||
})
|
||||
)
|
||||
.on("start", () => {
|
||||
message.guild.musicData.songDispatcher = dispatcher;
|
||||
voiceChannel = queue[0].voiceChannel;
|
||||
|
||||
const videoEmbed = client.embed("", "", [
|
||||
{
|
||||
name: "**__Now Playing__**",
|
||||
value: queue[0].title
|
||||
},
|
||||
{
|
||||
name: "**__Duration__**",
|
||||
value: queue[0].duration
|
||||
}
|
||||
],
|
||||
{
|
||||
thumbnail: queue[0].thumbnail
|
||||
});
|
||||
if (queue[1]) videoEmbed.addField("Next Up:", queue[1].title);
|
||||
message.channel.send(videoEmbed);
|
||||
return queue.shift();
|
||||
})
|
||||
.on("finish", () => {
|
||||
if (queue.length >= 1) {
|
||||
return this.playSong(queue, message);
|
||||
} else {
|
||||
message.guild.musicData.isPlaying = false;
|
||||
return voiceChannel.leave();
|
||||
}
|
||||
})
|
||||
.on("error", e => {
|
||||
message.channel.send("I couldn't play that song!");
|
||||
console.error(e);
|
||||
return voiceChannel.leave();
|
||||
});
|
||||
})
|
||||
.catch(e => {
|
||||
console.error(e);
|
||||
return voiceChannel.leave();
|
||||
});
|
||||
}
|
||||
|
||||
function formatDuration(durationObj) {
|
||||
const duration = `${durationObj.hours ? durationObj.hours + ":" : ""}${
|
||||
durationObj.minutes ? durationObj.minutes : "00"
|
||||
}:${
|
||||
durationObj.seconds < 10
|
||||
? "0" + durationObj.seconds
|
||||
: durationObj.seconds
|
||||
? durationObj.seconds
|
||||
: "00"
|
||||
}`;
|
||||
return duration;
|
||||
}
|
||||
*/
|
|
@ -0,0 +1,20 @@
|
|||
exports.run = async (client, message, args, level) => {
|
||||
var server = client.servers[message.guild.id];
|
||||
|
||||
if(server.dispatcher) server.dispatcher.end();
|
||||
message.channel.send(`${message.author.mention} has skipped the current song.`);
|
||||
};
|
||||
|
||||
exports.conf = {
|
||||
enabled: true,
|
||||
guildOnly: true,
|
||||
aliases: [],
|
||||
permLevel: "Moderator"
|
||||
};
|
||||
|
||||
exports.help = {
|
||||
name: "skip",
|
||||
category: "Music",
|
||||
description: "Skip an unwanted track.",
|
||||
usage: "skip"
|
||||
};
|
|
@ -0,0 +1,45 @@
|
|||
exports.run = async (client, message, args, level) => {
|
||||
/*
|
||||
var server = client.servers[message.guild.id];
|
||||
if(message.guild.voiceConnection) {
|
||||
for(var i = server.queue.length -1; i >= 0; i--) {
|
||||
server.queue.splice(i, 1);
|
||||
}
|
||||
|
||||
if(server.dispatcher) server.dispatcher.end();
|
||||
message.channel.send(`${message.author} has stopped the music.`);
|
||||
}
|
||||
|
||||
if(message.guild.voiceConnection) message.guild.voiceConnection.disconnect();
|
||||
*/
|
||||
|
||||
/*
|
||||
const serverQueue = client.queue.get(message.guild.id);
|
||||
if (!message.member.voiceChannel) return message.channel.send('You have to be in a voice channel to stop the music!');
|
||||
|
||||
serverQueue.songs = [];
|
||||
if(serverQueue.connection.dispatcher) serverQueue.connection.dispatcher.end();
|
||||
message.channel.send(`${message.author} has stopped the music.`);
|
||||
|
||||
if(message.guild.voiceConnection) message.guild.voiceConnection.disconnect();
|
||||
*/
|
||||
|
||||
var server = client.servers[message.guild.id];
|
||||
|
||||
if(message.guild.voice.connection) message.guild.voice.connection.disconnect();
|
||||
message.channel.send(`${message.author} has stopped the music.`);
|
||||
};
|
||||
|
||||
exports.conf = {
|
||||
enabled: true,
|
||||
guildOnly: true,
|
||||
aliases: [],
|
||||
permLevel: "Moderator"
|
||||
};
|
||||
|
||||
exports.help = {
|
||||
name: "stop",
|
||||
category: "Music",
|
||||
description: "Stops playing music, clears the queue, and disconnects from the voice channel.",
|
||||
usage: "stop"
|
||||
};
|
|
@ -3,20 +3,20 @@ const got = require("got");
|
|||
exports.run = async (client, message, args, level) => {
|
||||
const pgAmount = args[0] || 2;
|
||||
const out = await got(`https://loripsum.net/api/${pgAmount}/decorate/code`);
|
||||
|
||||
|
||||
let final = out.body;
|
||||
final = final.then(
|
||||
.replace("<b>", "**")).then(
|
||||
.replace("</b>", "**")).then(
|
||||
.replace("<p>", "")).then(
|
||||
.replace(" </p>", "")).then(
|
||||
.replace("<i>", "_")).then(
|
||||
.replace("</i>", "_")).then(
|
||||
.replace("<mark>", "||").then(
|
||||
.replace("</mark>", "||").then(
|
||||
.replace("<pre>","```").then(
|
||||
final = final
|
||||
.replace("<b>", "**")
|
||||
.replace("</b>", "**")
|
||||
.replace("<p>", "")
|
||||
.replace(" </p>", "")
|
||||
.replace("<i>", "_")
|
||||
.replace("</i>", "_")
|
||||
.replace("<mark>", "||")
|
||||
.replace("</mark>", "||")
|
||||
.replace("<pre>","```")
|
||||
.replace("</pre>","```");
|
||||
|
||||
|
||||
message.channel.send(final);
|
||||
};
|
||||
|
||||
|
@ -32,4 +32,4 @@ exports.help = {
|
|||
category: "",
|
||||
description: "Sends randomly-generated Lorem Ipsum demo text.",
|
||||
usage: "test [paragraphCount:2]"
|
||||
};
|
||||
};
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
module.exports = async client => {
|
||||
client.logger.log(`${client.user.tag}, ready to serve ${client.users.filter(user => !user.bot).size} users in ${client.guilds.size} ${client.guilds.size > 1 ? "servers" : "server"}.`, "ready");
|
||||
client.logger.log(`Looks like I'm ready! My tag is ${client.user.tag}, and I'm ready to serve ${client.users.cache.some(user => !user.bot).size} users in ${client.guilds.cache.size} ${client.guilds.cache.size > 1 ? "servers" : "server"}.`, "ready");
|
||||
|
||||
client.user.setActivity(`${client.users.filter(user => !user.bot).size} humans | ${client.settings.get("default").prefix}help`, {type: "WATCHING"});
|
||||
client.user.setActivity(`${client.users.cache.filter(user => !user.bot).size} humans | ${client.settings.get("default").prefix}help`, {type: "WATCHING"});
|
||||
client.user.setStatus("online");
|
||||
};
|
||||
|
|
23
index.js
23
index.js
|
@ -1,6 +1,7 @@
|
|||
if (Number(process.version.slice(1).split(".")[0]) < 8) throw new Error("Node 8.0.0 or higher is required. Update Node on your system.");
|
||||
|
||||
const Discord = require("discord.js");
|
||||
const { Structures } = require("discord.js");
|
||||
|
||||
const { promisify } = require("util");
|
||||
const readdir = promisify(require("fs").readdir);
|
||||
|
@ -16,9 +17,25 @@ client.commands = new Enmap();
|
|||
client.aliases = new Enmap();
|
||||
client.settings = new Enmap({name: "settings"});
|
||||
|
||||
/*
|
||||
Structures.extend("Guild", Guild => {
|
||||
class MusicGuild extends Guild {
|
||||
constructor(client, data) {
|
||||
super(client, data);
|
||||
this.musicData = {
|
||||
queue: [],
|
||||
isPlaying: false,
|
||||
songDispatcher: null
|
||||
};
|
||||
}
|
||||
}
|
||||
return MusicGuild;
|
||||
});
|
||||
*/
|
||||
|
||||
async function crawl(directory, filesArray) {
|
||||
const dirs = await readdir(directory, {
|
||||
withFileTypes: true
|
||||
withFileTypes: true
|
||||
});
|
||||
|
||||
for (let i = 0; i < dirs.length; i++) {
|
||||
|
@ -51,13 +68,13 @@ const init = async () => {
|
|||
const event = require(`./events/${file}`);
|
||||
client.on(eventName, event.bind(null, client));
|
||||
});
|
||||
|
||||
|
||||
client.levelCache = {};
|
||||
for (let i = 0; i < client.config.permLevels.length; i++) {
|
||||
const thisLevel = client.config.permLevels[i];
|
||||
client.levelCache[thisLevel.name] = thisLevel.level;
|
||||
}
|
||||
|
||||
|
||||
client.login(client.config.token);
|
||||
};
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ module.exports = (client) => {
|
|||
}
|
||||
return permlvl;
|
||||
};
|
||||
|
||||
|
||||
const defaultSettings = {
|
||||
"prefix": "b&",
|
||||
"modLogChannel": "mod-log",
|
||||
|
@ -29,14 +29,14 @@ module.exports = (client) => {
|
|||
"welcomeMessage": "Say hello to {{user}}, everyone! We all need a warm welcome sometimes :D",
|
||||
"welcomeEnabled": "false"
|
||||
};
|
||||
|
||||
|
||||
client.getSettings = (guild) => {
|
||||
client.settings.ensure("default", defaultSettings);
|
||||
if(!guild) return client.settings.get("default");
|
||||
const guildConf = client.settings.get(guild.id) || {};
|
||||
return ({...client.settings.get("default"), ...guildConf});
|
||||
};
|
||||
|
||||
|
||||
client.awaitReply = async (msg, question, limit = 60000) => {
|
||||
const filter = m => m.author.id === msg.author.id;
|
||||
await msg.channel.send(question);
|
||||
|
@ -47,22 +47,22 @@ module.exports = (client) => {
|
|||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
client.caseNumber = async (client, modlog) {
|
||||
|
||||
client.caseNumber = async (client, modlog) => {
|
||||
const messages = await modlog.fetchMessages({limit:5});
|
||||
|
||||
|
||||
const log = messages.filter(m => m.author.id === client.user.id &&
|
||||
m.embeds[0] &&
|
||||
m.embeds[0].type === 'rich' &&
|
||||
m.embeds[0].footer &&
|
||||
m.embeds[0].footer.text.startsWith('Case')
|
||||
).first();
|
||||
|
||||
|
||||
if (!log) return 1;
|
||||
const thisCase = /Case\s(\d+)/.exec(log.embeds[0].footer.text);
|
||||
return thisCase ? parseInt(thisCase[1]) + 1 : 1;
|
||||
};
|
||||
|
||||
|
||||
client.clean = async (client, text) => {
|
||||
if (text && text.constructor.name == "Promise")
|
||||
text = await text;
|
||||
|
@ -94,41 +94,41 @@ module.exports = (client) => {
|
|||
}
|
||||
};
|
||||
|
||||
client.unloadCommand = async (commandName) => {
|
||||
let command;
|
||||
if (client.commands.has(commandName)) {
|
||||
command = client.commands.get(commandName);
|
||||
} else if (client.aliases.has(commandName)) {
|
||||
command = client.commands.get(client.aliases.get(commandName));
|
||||
}
|
||||
if (!command) return `The command \`${commandName}\` doesn\'t seem to exist, nor is it an alias. Try again!`;
|
||||
client.unloadCommand = async (commandName) => {
|
||||
let command;
|
||||
if (client.commands.has(commandName)) {
|
||||
command = client.commands.get(commandName);
|
||||
} else if (client.aliases.has(commandName)) {
|
||||
command = client.commands.get(client.aliases.get(commandName));
|
||||
}
|
||||
if (!command) return `The command \`${commandName}\` doesn\'t seem to exist, nor is it an alias. Try again!`;
|
||||
|
||||
if (command.shutdown) {
|
||||
await command.shutdown(client);
|
||||
}
|
||||
const mod = require.cache[require.resolve(`../commands/${command.help.category}/${command.help.name}`)];
|
||||
delete require.cache[require.resolve(`../commands/${command.help.category}/${command.help.name}.js`)];
|
||||
for (let i = 0; i < mod.parent.children.length; i++) {
|
||||
if (mod.parent.children[i] === mod) {
|
||||
mod.parent.children.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
if (command.shutdown) {
|
||||
await command.shutdown(client);
|
||||
}
|
||||
const mod = require.cache[require.resolve(`../commands/${command.help.category}/${command.help.name}`)];
|
||||
delete require.cache[require.resolve(`../commands/${command.help.category}/${command.help.name}.js`)];
|
||||
for (let i = 0; i < mod.parent.children.length; i++) {
|
||||
if (mod.parent.children[i] === mod) {
|
||||
mod.parent.children.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
|
||||
Object.defineProperty(String.prototype, "toProperCase", {
|
||||
value: function() {
|
||||
return this.replace(/([^\W_]+[^\s-]*) */g, (txt) => txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase());
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Object.defineProperty(Array.prototype, "random", {
|
||||
value: function() {
|
||||
return this[Math.floor(Math.random() * this.length)];
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
client.wait = require("util").promisify(setTimeout);
|
||||
|
||||
client.randomSelection = choices => choices[Math.floor(Math.random() * choices.length)];
|
||||
|
@ -346,9 +346,11 @@ module.exports = (client) => {
|
|||
client.quoteRegex = input => `${input}`.replace(/[.?*+^$[\]\\(){}|-]/g, '\\$&');
|
||||
|
||||
client.fetchURL = (url, options = {}) => {
|
||||
options.headers = options.headers ? { ...options.headers, "User-Agent": client.user } : { "User-Agent": client.user };
|
||||
return fetch(url, options, options.type || "json").catch(error => {
|
||||
client.Logger.error(error);
|
||||
});
|
||||
}
|
||||
};
|
||||
options.headers = options.headers ? { ...options.headers, "User-Agent": client.user } : { "User-Agent": client.user };
|
||||
return fetch(url, options, options.type || "json").catch(error => {
|
||||
client.Logger.error(error);
|
||||
});
|
||||
}
|
||||
|
||||
client.servers = {};
|
||||
}
|
||||
|
|
|
@ -9,6 +9,24 @@
|
|||
"resolved": "https://registry.npmjs.org/@cush/relative/-/relative-0.1.0.tgz",
|
||||
"integrity": "sha512-pnF2c2hhHyC520CmYYKq3hGOS0kipkGBgRnp3z7wx7lDzykaUwQW3wPQmiX9YtbHUcgUu1qQtzstixmeYMwQoA=="
|
||||
},
|
||||
"@discordjs/collection": {
|
||||
"version": "0.1.4",
|
||||
"resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.4.tgz",
|
||||
"integrity": "sha512-AwCjNahVqASGv5mxnZCC0DfcV/hkAV/U7edUB0K+20xx7v0ZfQ3/o02bNROzpNjvfak5pM8KO5SCmJVK90e3lQ=="
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "13.7.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-13.7.4.tgz",
|
||||
"integrity": "sha512-oVeL12C6gQS/GAExndigSaLxTrKpQPxewx9bOcwfvJiJge4rr7wNaph4J+ns5hrmIV2as5qxqN8YKthn9qh0jw=="
|
||||
},
|
||||
"abort-controller": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
|
||||
"integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
|
||||
"requires": {
|
||||
"event-target-shim": "^5.0.0"
|
||||
}
|
||||
},
|
||||
"ansi-escapes": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
|
||||
|
@ -27,10 +45,10 @@
|
|||
"color-convert": "^1.9.0"
|
||||
}
|
||||
},
|
||||
"async-limiter": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
|
||||
"integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
|
||||
"asynckit": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
|
||||
},
|
||||
"better-sqlite3": {
|
||||
"version": "5.4.0",
|
||||
|
@ -125,6 +143,14 @@
|
|||
"resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
|
||||
"integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA=="
|
||||
},
|
||||
"combined-stream": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||
"requires": {
|
||||
"delayed-stream": "~1.0.0"
|
||||
}
|
||||
},
|
||||
"common-tags": {
|
||||
"version": "1.8.0",
|
||||
"resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz",
|
||||
|
@ -137,7 +163,7 @@
|
|||
"requires": {
|
||||
"colors": ">= 0.6.0-1",
|
||||
"first": "0.0.x",
|
||||
"mime": ">=1.4.1",
|
||||
"mime": "1.2.x",
|
||||
"node_hash": "0.2.x",
|
||||
"optimist": "0.3.x",
|
||||
"prettyjson": "0.7.x",
|
||||
|
@ -174,21 +200,28 @@
|
|||
"resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
|
||||
"integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q=="
|
||||
},
|
||||
"delayed-stream": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
|
||||
},
|
||||
"discord-emoji": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/discord-emoji/-/discord-emoji-1.1.1.tgz",
|
||||
"integrity": "sha1-GoJyxqohshyOdRddp1g1rvCT9xY="
|
||||
},
|
||||
"discord.js": {
|
||||
"version": "11.5.1",
|
||||
"resolved": "https://registry.npmjs.org/discord.js/-/discord.js-11.5.1.tgz",
|
||||
"integrity": "sha512-tGhV5xaZXE3Z+4uXJb3hYM6gQ1NmnSxp9PClcsSAYFVRzH6AJH74040mO3afPDMWEAlj8XsoPXXTJHTxesqcGw==",
|
||||
"version": "github:discordjs/discord.js#f85230812ff6de4f1ba1c021c93fe308fb0685e6",
|
||||
"from": "github:discordjs/discord.js",
|
||||
"requires": {
|
||||
"long": "^4.0.0",
|
||||
"prism-media": "^0.0.3",
|
||||
"snekfetch": "^3.6.4",
|
||||
"tweetnacl": "^1.0.0",
|
||||
"ws": "^6.0.0"
|
||||
"@discordjs/collection": "^0.1.1",
|
||||
"abort-controller": "^3.0.0",
|
||||
"form-data": "^2.3.3",
|
||||
"node-fetch": "^2.3.0",
|
||||
"prism-media": "^1.0.0",
|
||||
"setimmediate": "^1.0.5",
|
||||
"tweetnacl": "^1.0.1",
|
||||
"ws": "^7.2.0"
|
||||
}
|
||||
},
|
||||
"dom-serializer": {
|
||||
|
@ -245,6 +278,11 @@
|
|||
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
|
||||
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
|
||||
},
|
||||
"event-target-shim": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
|
||||
"integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
|
||||
},
|
||||
"external-editor": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz",
|
||||
|
@ -268,6 +306,16 @@
|
|||
"resolved": "https://registry.npmjs.org/first/-/first-0.0.3.tgz",
|
||||
"integrity": "sha1-EpqTHr+B01BdhffAXHti0MTOag4="
|
||||
},
|
||||
"form-data": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
|
||||
"integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
|
||||
"requires": {
|
||||
"asynckit": "^0.4.0",
|
||||
"combined-stream": "^1.0.6",
|
||||
"mime-types": "^2.1.12"
|
||||
}
|
||||
},
|
||||
"fs-minipass": {
|
||||
"version": "1.2.6",
|
||||
"resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz",
|
||||
|
@ -309,6 +357,11 @@
|
|||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
|
||||
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
|
||||
},
|
||||
"html-entities": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
|
||||
"integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8="
|
||||
},
|
||||
"htmlparser2": {
|
||||
"version": "3.10.1",
|
||||
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
|
||||
|
@ -450,30 +503,53 @@
|
|||
"resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz",
|
||||
"integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0="
|
||||
},
|
||||
"long": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
|
||||
"integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
|
||||
},
|
||||
"lowercase-keys": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
|
||||
"integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA=="
|
||||
},
|
||||
"m3u8stream": {
|
||||
"version": "0.6.5",
|
||||
"resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.6.5.tgz",
|
||||
"integrity": "sha512-QZCzhcfUliZfsOboi68QkNcMejPKTEhxE+s1TApvHubDeR8ythm4ViWuYFqgUwZeoHe8q0nsPxOvA3lQvdSzyg==",
|
||||
"requires": {
|
||||
"miniget": "^1.6.1",
|
||||
"sax": "^1.2.4"
|
||||
}
|
||||
},
|
||||
"math-expression-evaluator": {
|
||||
"version": "1.2.17",
|
||||
"resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz",
|
||||
"integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw="
|
||||
},
|
||||
"mime": {
|
||||
"version": ">=1.4.1",
|
||||
"version": "1.2.11",
|
||||
"resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz",
|
||||
"integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA="
|
||||
},
|
||||
"mime-db": {
|
||||
"version": "1.43.0",
|
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz",
|
||||
"integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ=="
|
||||
},
|
||||
"mime-types": {
|
||||
"version": "2.1.26",
|
||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz",
|
||||
"integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==",
|
||||
"requires": {
|
||||
"mime-db": "1.43.0"
|
||||
}
|
||||
},
|
||||
"mimic-fn": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
|
||||
"integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ=="
|
||||
},
|
||||
"miniget": {
|
||||
"version": "1.6.1",
|
||||
"resolved": "https://registry.npmjs.org/miniget/-/miniget-1.6.1.tgz",
|
||||
"integrity": "sha512-I5oBwZmcaOuJrjQn7lpS29HM+aAZDbzKbX5ouxVyhFYdg6fA6YKOTwOCgzZQwlHuMek3FlCxz6eNrd4pOXbwOA=="
|
||||
},
|
||||
"minimist": {
|
||||
"version": "0.0.8",
|
||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
|
||||
|
@ -553,6 +629,11 @@
|
|||
"wordwrap": "~0.0.2"
|
||||
}
|
||||
},
|
||||
"opusscript": {
|
||||
"version": "0.0.7",
|
||||
"resolved": "https://registry.npmjs.org/opusscript/-/opusscript-0.0.7.tgz",
|
||||
"integrity": "sha512-DcBadTdYTUuH9zQtepsLjQn4Ll6rs3dmeFvN+SD0ThPnxRBRm/WC1zXWPg+wgAJimB784gdZvUMA57gDP7FdVg=="
|
||||
},
|
||||
"os-tmpdir": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
|
||||
|
@ -579,9 +660,9 @@
|
|||
}
|
||||
},
|
||||
"prism-media": {
|
||||
"version": "0.0.3",
|
||||
"resolved": "https://registry.npmjs.org/prism-media/-/prism-media-0.0.3.tgz",
|
||||
"integrity": "sha512-c9KkNifSMU/iXT8FFTaBwBMr+rdVcN+H/uNv1o+CuFeTThNZNTOrQ+RgXA1yL/DeLk098duAeRPP3QNPNbhxYQ=="
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.0.tgz",
|
||||
"integrity": "sha512-zjcO/BLVlfxWqFpEUlDyL1R9XXMquasNP4xpeYDPPZi/Zcz0i6OXoqcvxOLgbRVPsJXVd29vlYmRx2bts+hzEw=="
|
||||
},
|
||||
"readable-stream": {
|
||||
"version": "3.4.0",
|
||||
|
@ -643,6 +724,16 @@
|
|||
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
||||
},
|
||||
"sax": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
|
||||
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
|
||||
},
|
||||
"setimmediate": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
|
||||
"integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
|
||||
},
|
||||
"signal-exit": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
|
||||
|
@ -653,11 +744,6 @@
|
|||
"resolved": "https://registry.npmjs.org/simplecrawler/-/simplecrawler-0.0.10.tgz",
|
||||
"integrity": "sha1-1EzZFb3cyO4fCSDXpbxHuClwvuk="
|
||||
},
|
||||
"snekfetch": {
|
||||
"version": "3.6.4",
|
||||
"resolved": "https://registry.npmjs.org/snekfetch/-/snekfetch-3.6.4.tgz",
|
||||
"integrity": "sha512-NjxjITIj04Ffqid5lqr7XdgwM7X61c/Dns073Ly170bPQHLm6jkmelye/eglS++1nfTWktpP6Y2bFXjdPlQqdw=="
|
||||
},
|
||||
"string-width": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
|
||||
|
@ -753,9 +839,9 @@
|
|||
"integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ=="
|
||||
},
|
||||
"tweetnacl": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.1.tgz",
|
||||
"integrity": "sha512-kcoMoKTPYnoeS50tzoqjPY3Uv9axeuuFAZY9M/9zFnhoVvRfxz9K29IMPD7jGmt2c8SW7i3gT9WqDl2+nV7p4A=="
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz",
|
||||
"integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="
|
||||
},
|
||||
"underscore": {
|
||||
"version": "1.4.4",
|
||||
|
@ -795,17 +881,35 @@
|
|||
"integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
|
||||
},
|
||||
"ws": {
|
||||
"version": "6.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
|
||||
"integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
|
||||
"requires": {
|
||||
"async-limiter": "~1.0.0"
|
||||
}
|
||||
"version": "7.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.2.1.tgz",
|
||||
"integrity": "sha512-sucePNSafamSKoOqoNfBd8V0StlkzJKL2ZAhGQinCfNQ+oacw+Pk7lcdAElecBF2VkLNZRiIb5Oi1Q5lVUVt2A=="
|
||||
},
|
||||
"yallist": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
|
||||
"integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A=="
|
||||
},
|
||||
"ytdl-core": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-1.0.8.tgz",
|
||||
"integrity": "sha512-GX6DHLonG6RIFVCDUxJF0754EkXTjsh0fqp5vGTmp6Ang7nGCaooEWDYrfXm5U32dTJ83TVp1c92QKehQGPlxQ==",
|
||||
"requires": {
|
||||
"html-entities": "^1.1.3",
|
||||
"m3u8stream": "^0.6.3",
|
||||
"miniget": "^1.6.0",
|
||||
"sax": "^1.1.3"
|
||||
}
|
||||
},
|
||||
"ytdl-core-discord": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/ytdl-core-discord/-/ytdl-core-discord-1.1.0.tgz",
|
||||
"integrity": "sha512-uiaZWa9UG+he1F9p7Si9H6Tieyxd9dEhLi4958mHuebudQSEEPaaJHUEbFikcpB++5ogzynVOcvdeC+LFJGgEw==",
|
||||
"requires": {
|
||||
"@types/node": "^13.5.3",
|
||||
"prism-media": "^1.0.1",
|
||||
"ytdl-core": "^1.0.3"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,16 +26,19 @@
|
|||
"crawl": "^0.3.1",
|
||||
"dateformat": "^3.0.3",
|
||||
"discord-emoji": "^1.1.1",
|
||||
"discord.js": "^11.5.1",
|
||||
"discord.js": "github:discordjs/discord.js",
|
||||
"enmap": "^5.0.0",
|
||||
"inquirer": "^6.3.1",
|
||||
"math-expression-evaluator": "^1.2.17",
|
||||
"moment": "^2.24.0",
|
||||
"moment-duration-format": "^2.3.2",
|
||||
"node-fetch": "^2.6.0",
|
||||
"opusscript": "0.0.7",
|
||||
"recrawl": "^2.0.0",
|
||||
"roll": "^1.2.0",
|
||||
"webdict": "^0.3.0"
|
||||
"webdict": "^0.3.0",
|
||||
"ytdl-core": "^1.0.8",
|
||||
"ytdl-core-discord": "^1.1.0"
|
||||
},
|
||||
"publishConfig": {
|
||||
"registry": "https://npm.pkg.github.com/"
|
||||
|
|
Loading…
Reference in New Issue