summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlee <alee14498@gmail.com>2018-03-24 21:23:34 -0400
committerAlee <alee14498@gmail.com>2018-03-24 21:23:34 -0400
commit0424522824916a65e31535f04b0e8e3068de8ba9 (patch)
tree4e1d70364647acee4cb4bd2c04102b1f74ba0ed8
parent8dfcf2917c4ddebb701044c54dc73f3f72265eae (diff)
parenteab57f6d81f66fdf9b930854df7f382dc8b80642 (diff)
downloadAleeBot-0424522824916a65e31535f04b0e8e3068de8ba9.tar.gz
AleeBot-0424522824916a65e31535f04b0e8e3068de8ba9.tar.bz2
AleeBot-0424522824916a65e31535f04b0e8e3068de8ba9.zip
Merge branch 'beta'
-rw-r--r--absettings.json.example1
-rw-r--r--package-lock.json90
-rw-r--r--package.json4
-rw-r--r--src/bot_discord.js4
-rw-r--r--src/commands/ban.js23
-rw-r--r--src/commands/changelog.js9
-rw-r--r--src/commands/help.js2
-rw-r--r--src/commands/kick.js18
-rw-r--r--src/commands/play.js71
-rw-r--r--src/music.js68
10 files changed, 282 insertions, 8 deletions
diff --git a/absettings.json.example b/absettings.json.example
index e9d4e0b..4894b84 100644
--- a/absettings.json.example
+++ b/absettings.json.example
@@ -2,4 +2,5 @@
"abtoken": "token",
"ownerID": "242775871059001344",
"prefix": "ab:",
+ "ytapikey": "generate one in google apis youtube v3",
}
diff --git a/package-lock.json b/package-lock.json
index 4cb9894..97f1c24 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -71,6 +71,11 @@
}
}
},
+ "bindings": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz",
+ "integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE="
+ },
"bl": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz",
@@ -110,6 +115,11 @@
"delayed-stream": "1.0.0"
}
},
+ "commander": {
+ "version": "2.15.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
+ "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag=="
+ },
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
@@ -333,6 +343,11 @@
"resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz",
"integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ=="
},
+ "html-entities": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
+ "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8="
+ },
"http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
@@ -443,6 +458,14 @@
"resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
"integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
},
+ "m3u8stream": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.2.2.tgz",
+ "integrity": "sha512-R/xWLXBtVr0m9sPruRL4p9uO01JyHxhcQ4nhqQhVgyT802OZyVW+dn+fWHvTnbfE6YMLc65TksZZut+Mh2OVMQ==",
+ "requires": {
+ "miniget": "1.2.0"
+ }
+ },
"mime": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
@@ -461,6 +484,11 @@
"mime-db": "1.30.0"
}
},
+ "miniget": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/miniget/-/miniget-1.2.0.tgz",
+ "integrity": "sha1-ADY3Oia71S2+aUX85sjAOR6eEkE="
+ },
"moment": {
"version": "2.21.0",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.21.0.tgz",
@@ -471,6 +499,11 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
+ "nan": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
+ "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA=="
+ },
"node-fetch": {
"version": "1.7.3",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
@@ -480,6 +513,17 @@
"is-stream": "1.1.0"
}
},
+ "node-opus": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/node-opus/-/node-opus-0.2.7.tgz",
+ "integrity": "sha1-W3JuKXlbCxJ7TIfmYtTegWhAV5w=",
+ "requires": {
+ "bindings": "1.2.1",
+ "commander": "2.15.1",
+ "nan": "2.10.0",
+ "ogg-packet": "1.0.0"
+ }
+ },
"node-telegram-bot-api": {
"version": "0.29.0",
"resolved": "https://registry.npmjs.org/node-telegram-bot-api/-/node-telegram-bot-api-0.29.0.tgz",
@@ -508,6 +552,15 @@
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
"integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0="
},
+ "ogg-packet": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/ogg-packet/-/ogg-packet-1.0.0.tgz",
+ "integrity": "sha1-RbiFchrI991c8iOR1CEGrlM6xng=",
+ "optional": true,
+ "requires": {
+ "ref-struct": "1.1.0"
+ }
+ },
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -564,6 +617,27 @@
"util-deprecate": "1.0.2"
}
},
+ "ref": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ref/-/ref-1.3.5.tgz",
+ "integrity": "sha512-2cBCniTtxcGUjDpvFfVpw323a83/0RLSGJJY5l5lcomZWhYpU2cuLdsvYqMixvsdLJ9+sTdzEkju8J8ZHDM2nA==",
+ "optional": true,
+ "requires": {
+ "bindings": "1.2.1",
+ "debug": "2.6.9",
+ "nan": "2.10.0"
+ }
+ },
+ "ref-struct": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ref-struct/-/ref-struct-1.1.0.tgz",
+ "integrity": "sha1-XV7mWtQc78Olxf60BYcmHkee3BM=",
+ "optional": true,
+ "requires": {
+ "debug": "2.6.9",
+ "ref": "1.3.5"
+ }
+ },
"request": {
"version": "2.83.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz",
@@ -617,6 +691,11 @@
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
"integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
},
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
+ },
"simple-youtube-api": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/simple-youtube-api/-/simple-youtube-api-5.0.1.tgz",
@@ -734,6 +813,17 @@
"async-limiter": "1.0.0",
"safe-buffer": "5.1.1"
}
+ },
+ "ytdl-core": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-0.20.2.tgz",
+ "integrity": "sha512-7AAIdhVRJgS3HulFCdT4C4G8FpeKouFinMCa8YA2cvKmEjXoIiNcMJmtnOI1VJil+l57K1Ly4MzEKlvR6H7C0g==",
+ "requires": {
+ "html-entities": "1.2.1",
+ "m3u8stream": "0.2.2",
+ "miniget": "1.2.0",
+ "sax": "1.2.4"
+ }
}
}
}
diff --git a/package.json b/package.json
index 88050ed..6afb120 100644
--- a/package.json
+++ b/package.json
@@ -20,8 +20,10 @@
"discord.js": "^11.3.1",
"fs": "0.0.1-security",
"moment": "^2.21.0",
+ "node-opus": "^0.2.7",
"node-telegram-bot-api": "^0.29.0",
- "simple-youtube-api": "^5.0.1"
+ "simple-youtube-api": "^5.0.1",
+ "ytdl-core": "^0.20.2"
},
"devDependencies": {}
}
diff --git a/src/bot_discord.js b/src/bot_discord.js
index f195e73..4fd4791 100644
--- a/src/bot_discord.js
+++ b/src/bot_discord.js
@@ -7,14 +7,16 @@
**********************************************/
const Discord = require('discord.js');
const client = new Discord.Client();
-const abVersion = '2.1.0';
+const abVersion = '2.2.0';
const prefix = 'ab:';
const fs = require('fs');
const config = require('./absettings.json');
console.log('Welcome to AleeBot NodeJS Terminal!');
+client.apikey = config.ytapikey;
client.commands = new Discord.Collection();
client.aliases = new Discord.Collection();
+client.servers = {};
fs.readdir('./commands', (err, files) => {
if (err) console.error(err);
diff --git a/src/commands/ban.js b/src/commands/ban.js
new file mode 100644
index 0000000..a8d5c6a
--- /dev/null
+++ b/src/commands/ban.js
@@ -0,0 +1,23 @@
+module.exports.run = async (client, message, args) => {
+ let mreason = args.join(" ").slice(22);
+
+ if (!message.member.permissions.has('BAN_MEMBERS')) return message.reply("It looks like that you don't have the permissions to ban people.")
+ const member = message.mentions.members.first();
+ if (!member) return message.reply("Uhh... Please mention a member first.");
+ member.ban({
+ days: args[1] || null,
+ reason: `Banned by ${message.author.tag}`
+ });
+ message.reply("User Banned!");
+};
+
+exports.conf = {
+ aliases: [],
+ guildOnly: false,
+};
+exports.help = {
+ name: 'ban',
+ description: 'Bans a member',
+ usage: 'ban [user] [time]',
+ category: '- Moderation Commands',
+};
diff --git a/src/commands/changelog.js b/src/commands/changelog.js
index 0fff14a..be41192 100644
--- a/src/commands/changelog.js
+++ b/src/commands/changelog.js
@@ -1,11 +1,10 @@
module.exports.run = async (client, message) => {
const Discord = require('discord.js');
const embed = new Discord.RichEmbed()
- .setAuthor('AleeBot ' + '2.1.0 Beta ' + 'Changelog', 'https://cdn.discordapp.com/avatars/282547024547545109/6c147a444ae328c38145ef1f74169e38.png?size=2048')
- .setDescription('What\'s new in AleeBot 2.1 Beta?')
- .addField('! Coming soon music commands!', true)
- .addField('! Coming soon moderation commands!', true)
- .addField('And even more!', true)
+ .setAuthor('AleeBot ' + '2.2.0 ' + 'Changelog', 'https://cdn.discordapp.com/avatars/282547024547545109/6c147a444ae328c38145ef1f74169e38.png?size=2048')
+ .setDescription('What\'s new in AleeBot 2.2?')
+ .addField('[>] Music Command!','ab:play [music or url]', true)
+ .addField('[>] Moderation Commands!','Kick and Ban has been added!', true)
.setFooter('AleeCorp Copyright 2017')
.setColor('#1fd619');
message.channel.sendEmbed(embed);
diff --git a/src/commands/help.js b/src/commands/help.js
index 27add92..690c91c 100644
--- a/src/commands/help.js
+++ b/src/commands/help.js
@@ -11,7 +11,7 @@ module.exports.run = async (client, message) => {
const embed = new Discord.RichEmbed()
.setTitle('AleeBot Help')
- .setAuthor('AleeBot 2.1.0' + ` Help and on ${client.guilds.size} servers`, 'https://cdn.discordapp.com/avatars/282547024547545109/6c147a444ae328c38145ef1f74169e38.png?size=2048')
+ .setAuthor('AleeBot 2.2.0' + ` Help and on ${client.guilds.size} servers`, 'https://cdn.discordapp.com/avatars/282547024547545109/6c147a444ae328c38145ef1f74169e38.png?size=2048')
.setDescription('Every command you input into AleeBot is `' + require('../absettings.json').prefix + '`')
.setColor('#1fd619')
.setFooter('AleeCorp Copyright 2018');
diff --git a/src/commands/kick.js b/src/commands/kick.js
new file mode 100644
index 0000000..ffef077
--- /dev/null
+++ b/src/commands/kick.js
@@ -0,0 +1,18 @@
+module.exports.run = async (client, message) => {
+ if (!message.member.permissions.has('KICK_MEMBERS')) return message.reply("It looks like that you don't have the permissions to ban people.")
+ const member = message.mentions.members.first();
+ if (!member) return message.reply("Uhh... Please mention a member first.");
+ member.kick(`Kicked by: ${message.author.tag}`);
+ message.reply("User Kicked!");
+};
+
+exports.conf = {
+ aliases: [],
+ guildOnly: false,
+};
+exports.help = {
+ name: 'kick',
+ description: 'Kicks a member',
+ usage: 'kick [user]',
+ category: '- Moderation Commands',
+};
diff --git a/src/commands/play.js b/src/commands/play.js
new file mode 100644
index 0000000..d94572e
--- /dev/null
+++ b/src/commands/play.js
@@ -0,0 +1,71 @@
+module.exports.run = async (client, message, args) => {
+ if (!args[0]) return await message.channel.send('A name of the song of a link is needed.');
+ if (!message.member.voiceChannelID) return await message.channel.send('You are not in a voice channel');
+ const YouTube = require('simple-youtube-api');
+ const moment = require('moment');
+ const youtube = new YouTube(client.apikey);
+ const url = args.join(' ').replace(/<(.+)>/g, '$1');
+ if (!url) return;
+ await youtube.getVideo(url)
+ .then(results => {
+ YTVideo(results);
+ })
+ .catch(() => {
+ youtube.searchVideos(args.join(' '), 1)
+ .then(results => {
+ youtube.getVideo(results[0].url)
+ .then(vid => {
+ YTVideo(vid);
+ });
+ });
+ });
+
+ const music = require('../music.js');
+ async function YTVideo(video) {
+ if (video.durationSeconds === 0) {
+ return message.channel.send('Live streams are not available');
+ }
+ const d = moment.duration({
+ s: video.durationSeconds
+ });
+
+ const server = music.MusicVariables(client, message.member.guild.id);
+ const time = moment().startOf('day').add(d).format('HH:mm:ss');
+ server.queue.push({
+ url: video.url,
+ title: video.title,
+ thumbnail: video.thumbnails.high.url,
+ duration: video.durationSeconds,
+ requested: message.author.mention,
+ playing: false
+ });
+ const { RichEmbed } = require('discord.js');
+
+ const embed = new RichEmbed()
+ .setTitle('A song has been queued')
+ .setAuthor(video.title, video.thumbnails.high.url)
+ .setColor(0x00afff)
+ .setTimestamp()
+ .addField('Title', video.title)
+ .addField('Link', video.url)
+ .addField('Duration', time)
+ .setThumbnail(video.thumbnails.high.url)
+ .setFooter('AleeBot Music Player');
+ await message.channel.send({embed});
+ if (!client.voiceConnections.get(message.member.guild.id))
+ message.member.voiceChannel.join().then(function(connection) {
+ music.playYT(client, connection, message);
+ });
+ return null;
+ }};
+
+exports.conf = {
+ aliases: [],
+ guildOnly: false,
+};
+exports.help = {
+ name: 'play',
+ description: 'Plays music',
+ usage: 'play [args]',
+ category: '- Music Commands',
+};
diff --git a/src/music.js b/src/music.js
new file mode 100644
index 0000000..b2df43d
--- /dev/null
+++ b/src/music.js
@@ -0,0 +1,68 @@
+// Created by jtsshieh#6434 in the BonGon project: https://github.com/jtsshieh/BonGon
+
+const YTDL = require('ytdl-core');
+module.exports.playYT = async (bot, connection, msg) => {
+ const EventEmitter = require('events');
+ class MyEmitter extends EventEmitter {}
+ bot.musicEmit = new MyEmitter();
+
+ const musicvariables = require('./music.js').MusicVariables;
+ const server = musicvariables(bot, msg.member.guild.id);
+
+ server.dispatcher = connection;
+
+ connection.playStream(YTDL(server.queue[0].url, {
+ filter: 'audioonly'
+ }));
+
+ server.nowPlaying = server.queue[0];
+ server.beforeNowPlaying = server.nowPlaying;
+
+
+ server.queue.shift();
+
+ server.nowPlaying.playing = true;
+
+ let time = 0;
+ let counter = setInterval(
+ function() {
+ time = time + 1;
+ server.dispatcher.time = time;
+ }, 1000);
+
+ bot.musicEmit.on('paused', () => {
+ clearInterval(counter);
+ });
+
+ bot.musicEmit.on('resumed',() =>{
+ counter = setInterval(
+ function() {
+ time = time + 1;
+ server.dispatcher.time = time;
+ }, 1000);
+ });
+
+ connection.once('end', function() {
+ clearInterval(counter);
+
+ if (server.queue[0] || server.beforeNowPlaying) {
+ if (server.repeat) {
+ server.queue.push(server.beforeNowPlaying);
+ }
+
+ server.nowPlaying = null;
+ bot.playYT(connection, msg);
+ }
+
+ else {
+ bot.leaveVoiceChannel(connection.channelID);
+ bot.servers[msg.member.guild.id] = null;
+ }
+ });
+};
+module.exports.MusicVariables = (bot, guildID) => {
+ if (!bot.servers[guildID]) {
+ bot.servers[guildID] = {'queue' : [], 'dispatcher': null, 'repeat': false};
+ }
+ return bot.servers[guildID];
+};