aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTrey-Server <trey6979@gmail.com>2018-03-10 01:32:41 +0000
committerTrey-Server <trey6979@gmail.com>2018-03-10 01:32:41 +0000
commit897ec0b5b50ddeafd09602c7424c5e2aa377241f (patch)
tree8e870772ae6e9632e1c93402d38f3b75daeb5cee
parent435dc9902a732c0cb3d3367359910670fc65f9f2 (diff)
parente214e6e6f17294acc88e80d57cd90a878e71c5e6 (diff)
downloadPokeBot-897ec0b5b50ddeafd09602c7424c5e2aa377241f.tar.gz
PokeBot-897ec0b5b50ddeafd09602c7424c5e2aa377241f.tar.bz2
PokeBot-897ec0b5b50ddeafd09602c7424c5e2aa377241f.zip
Merge branch 'master' of https://github.com/PokeWorld/PokeBot
-rw-r--r--.travis.yml3
-rw-r--r--LICENSE.md2
-rw-r--r--README.md1
-rw-r--r--commands/Moderation/timeout.js57
-rw-r--r--commands/Pokemon/forcedrop.js43
-rw-r--r--commands/Pokemon/join.js40
-rw-r--r--events/guildMemberAdd.js8
-rw-r--r--package-lock.json14
-rw-r--r--package.json2
-rw-r--r--test.js72
10 files changed, 218 insertions, 24 deletions
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..2197832
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,3 @@
+language: node_js
+node_js:
+ - "node"
diff --git a/LICENSE.md b/LICENSE.md
index 5dc6b42..9a5549b 100644
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -653,7 +653,7 @@ Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
- {project} Copyright (C) {year} {fullname}
+ PokeBot Copyright (C) 2018 TheEdge, jtsshieh, Alee
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
diff --git a/README.md b/README.md
index 2290849..520cc8b 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,6 @@
[![Discord](https://img.shields.io/discord/417088992329334792.svg?colorB=7289DA&label=discord&style=flat-square)](https://discord.gg/YqEUBGr)
[![Github commits (since latest release)](https://img.shields.io/github/commits-since/PokeWorld/PokeBot/latest.svg?style=flat-square)]()
+[![Build Status](https://travis-ci.org/PokeWorld/PokeBot.svg?branch=master)](https://travis-ci.org/PokeWorld/PokeBot)
# Pokebot
diff --git a/commands/Moderation/timeout.js b/commands/Moderation/timeout.js
new file mode 100644
index 0000000..fca7bed
--- /dev/null
+++ b/commands/Moderation/timeout.js
@@ -0,0 +1,57 @@
+/** **************************************
+ *
+ * Time Out: Plugin for PokeBot that punishes bad boys..
+ * Copyright (C) 2018 TheEdge, jtsshieh, Alee
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * *************************************/
+
+exports.run = async (bot, msg, args) => {
+ if (!msg.member.hasPermission('BAN_MEMBERS')) return msg.reply('You don\'t have permission to put members in time-out..');
+ if (!msg.guild.member(bot.user).hasPermission('MANAGE_ROLES')) return msg.reply('I cannot put anyone in time-out.');
+
+ const member = msg.mentions.members.first();
+ if (!member) return await msg.reply('Who do I put in time-out?');
+
+ msg.member.addRole(msg.guild.roles.find('name', 'Timeout'));
+
+ const { RichEmbed } = require('discord.js');
+ try {
+ const embed = new RichEmbed()
+ .setColor(0x00ae86)
+ .setAuthor(member.user.tag, member.user.avatarURL)
+ .setTitle(`Time Out: **${member.user.tag}**`)
+ .setDescription(`*${member.user.tag}* was placed in time-out by *${msg.author.tag}*.`)
+ .addField('Moderator', msg.author.tag)
+ .setTimestamp()
+ .setFooter(`${msg.author.tag} put ${member.user.tag} in time-out.`, msg.author.avatarURL);
+ msg.guild.channels.find('name', 'logs').send({ embed });
+ }
+ catch (err) {
+ console.error(err.stack);
+ }
+ };
+
+ exports.conf = {
+ aliases: [],
+ guildOnly: true,
+ };
+
+ exports.help = {
+ name: 'timeout',
+ description: 'Put a user in time-out',
+ usage: '@user',
+ };
+ \ No newline at end of file
diff --git a/commands/Pokemon/forcedrop.js b/commands/Pokemon/forcedrop.js
new file mode 100644
index 0000000..1c2131f
--- /dev/null
+++ b/commands/Pokemon/forcedrop.js
@@ -0,0 +1,43 @@
+/** **************************************
+ *
+ * Ban: Plugin for PokeBot that powers the PokeWorld gym system.
+ * Copyright (C) 2018 TheEdge, jtsshieh, Alee
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * *************************************/
+
+exports.run = async (bot, msg) => {
+ if (!msg.member.hasPermission('MANAGE_MESSAGES')) return msg.reply('You don\'t have permssion to ban members.');
+
+ if (msg.guild.id != '417088992329334792') return msg.reply ('This is a PokeWorld exclusive command. Sorry!');
+ if (!msg.channel.name.startsWith('gym-')) return msg.reply('Go into one of the gym channels and try again.');
+ if (msg.channel.topic == 'Current Owner: *none*') {
+ msg.reply('This gym does not have an owner.');
+ }
+ else {
+ msg.channel.setTopic('Current Owner: *none*');
+ msg.channel.send('You have dropped the gym.');
+ }
+};
+
+exports.conf = {
+ aliases: [],
+ guildOnly: true,
+};
+
+exports.help = {
+ name: 'forcedrop',
+ description: 'Force a gym to have no owner.',
+};
diff --git a/commands/Pokemon/join.js b/commands/Pokemon/join.js
index 99640d1..6be75be 100644
--- a/commands/Pokemon/join.js
+++ b/commands/Pokemon/join.js
@@ -24,27 +24,27 @@ exports.run = async (bot, msg, args) => {
if (args.length < 1) return msg.reply('Please choose a team to join');
const team = findTeam(msg, args[0]);
- switch(args[0])
+ switch (args[0])
{
- case 'aqua': {
- msg.member.addRole(msg.guild.roles.find('name', 'Aqua'));
- msg.reply(`Alright, ${team ? 'you have left team ' + team + ' and ' : 'you have '}joined team Aqua.`);
- break;
- }
- case 'rocket' : {
- msg.member.addRole(msg.guild.roles.find('name', 'Rocket'));
- msg.reply(`Alright, ${team ? 'you have left team ' + team + ' and ' : 'you have '}joined team Rocket.`);
- break;
- }
- case 'magma' : {
- msg.member.addRole(msg.guild.roles.find('name', 'Magma'));
- msg.reply(`Alright, ${team ? 'you have left team ' + team + ' and ' : 'you have '}joined team Magma.`);
- break;
- }
- default : {
- msg.reply('You have to pick, aqua, rocket, or magma.');
- break;
- }
+ case 'aqua': {
+ msg.member.addRole(msg.guild.roles.find('name', 'Aqua'));
+ msg.reply(`Alright, ${team ? 'you have left team ' + team + ' and ' : 'you have '}joined team Aqua.`);
+ break;
+ }
+ case 'rocket' : {
+ msg.member.addRole(msg.guild.roles.find('name', 'Rocket'));
+ msg.reply(`Alright, ${team ? 'you have left team ' + team + ' and ' : 'you have '}joined team Rocket.`);
+ break;
+ }
+ case 'magma' : {
+ msg.member.addRole(msg.guild.roles.find('name', 'Magma'));
+ msg.reply(`Alright, ${team ? 'you have left team ' + team + ' and ' : 'you have '}joined team Magma.`);
+ break;
+ }
+ default : {
+ msg.reply('You have to pick, aqua, rocket, or magma.');
+ break;
+ }
}
};
diff --git a/events/guildMemberAdd.js b/events/guildMemberAdd.js
index 2c3d21f..f324e73 100644
--- a/events/guildMemberAdd.js
+++ b/events/guildMemberAdd.js
@@ -33,4 +33,12 @@ module.exports = (bot, member) => {
);
const role = member.guild.roles.find('name', 'Trainers');
member.addRole(role);
+
+ const DMMember = 'Hello, Alee is still working on this feature...';
+ member.user.send(
+ new RichEmbed()
+ .setColor(0x00ae86)
+ .setTitle('Pokebot')
+ .setDescription(DMMember)
+ );
};
diff --git a/package-lock.json b/package-lock.json
index e66f31a..b01e7d4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -29,9 +29,19 @@
}
},
"discord.js-lavalink": {
- "version": "github:mrjacz/discord.js-lavalink#1ed9dfb75a5753519c4ed2f1d8a32a2e349d7c5d",
+ "version": "github:mrjacz/discord.js-lavalink#e82983ac398ab3aaf7b1a9d65dc0ccd7a06eacd7",
"requires": {
- "ws": "4.1.0"
+ "ws": "5.0.0"
+ },
+ "dependencies": {
+ "ws": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-5.0.0.tgz",
+ "integrity": "sha512-XXG4S0b771C68AeTHebBsJJBZMguxj7Em+D657RViuj6ppRd3tfuOhIK8eGwZGNb76C8MjQfCTfH2NN50rJN4w==",
+ "requires": {
+ "async-limiter": "1.0.0"
+ }
+ }
}
},
"long": {
diff --git a/package.json b/package.json
index 3660393..dd8cc47 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
"description": "",
"main": "bot.js",
"scripts": {
- "test": "echo \"Error: no test specified\" && exit 1"
+ "test": "node test.js"
},
"author": "Alee, Justin, and Trey",
"license": "GPL-3.0",
diff --git a/test.js b/test.js
new file mode 100644
index 0000000..69b8e71
--- /dev/null
+++ b/test.js
@@ -0,0 +1,72 @@
+const Discord = require('discord.js');
+const bot = new Discord.Client();
+const fs = require('fs');
+
+bot.commands = new Discord.Collection();
+bot.aliases = new Discord.Collection();
+bot.categories = new Discord.Collection();
+bot.queue = new Discord.Collection();
+bot.plugins = { music : require('./Plugins/Music.js') };
+cmdLoader();
+
+async function cmdLoader() {
+ const categories = await fs.readdirSync('./commands');
+ console.log(`Loading ${categories.length} categories(s) into memory\n`);
+ categories.forEach(x => {
+ loadGroup(x);
+ });
+}
+async function loadGroup(name) {
+ const files = await fs.readdirSync(`./commands/${name}`);
+
+ console.log(`Loading the category '${name}' into memory with a total of ${files.length} command(s)`);
+
+ bot.commands.set(name, new Map());
+ bot.aliases.set(name, new Map());
+
+ const commands = [];
+ files.forEach(x => {
+ loadCmd(name, x);
+ commands.push(x.split('.')[0]);
+ });
+
+ bot.categories.set(name, commands);
+ console.log(`The category ${name} has been loaded.\n`);
+}
+
+async function loadCmd(category, cmd) {
+ try {
+ console.log(`Loading the Command ${cmd.split('.')[0]}`);
+ const command = require(`./commands/${category}/${cmd}`);
+ bot.commands.get(category).set(command.help.name, command);
+ command.conf.aliases.forEach(alias => {
+ console.log(`Loading the alias ${alias} for the command ${command.help.name}`);
+ bot.aliases.get(category).set(alias, command.help.name);
+ });
+ }
+ catch (err) {
+ console.log(`An error has occured trying to load the command '${cmd.split('.')[0]}'`);
+ console.log(err.stack);
+ }
+}
+
+
+fs.readdir('./events', (err, files) => {
+ if (err) console.error(err);
+ console.log(`Attempting to load a total of ${files.length} events into the memory.`);
+ files.forEach(file => {
+ try {
+ const eventName = file.split('.')[0];
+ const event = require(`./events/${file}`);
+ console.log(`Attempting to load the event "${eventName}".`);
+ bot.on(eventName, event.bind(null, bot));
+ delete require.cache[require.resolve(`./events/${file}`)];
+ }
+ catch (err) {
+ console.log('An error has occured trying to load a event. Here is the error.');
+ console.log(err.stack);
+ }
+ });
+ console.log('Event Loading complete!');
+ console.log('\n');
+});