├── .gitignore ├── DB ├── playlist.js ├── queue.js ├── server.js ├── song.js └── user.js ├── LICENSE.md ├── README.md ├── Resources ├── 1476433094321.gif ├── hug.gif └── slap.gif ├── commands ├── addRandomToQueue.js ├── addRole.js ├── addToQueue.js ├── addToServer.js ├── banUser.js ├── broadcast.js ├── clearQueue.js ├── cookie.js ├── createInvite.js ├── createRole.js ├── currentSong.js ├── delNsfwChannel.js ├── disableChannelServer.js ├── disableLevelServer.js ├── disablePmServer.js ├── disableUserLevel.js ├── disableUserPm.js ├── eatCookie.js ├── get8Ball.js ├── getAbout.js ├── getBotInfo.js ├── getCuddle.js ├── getE621Image.js ├── getEggplant.js ├── getFlip.js ├── getGarfieldComic.js ├── getGithubLink.js ├── getGtnImage.js ├── getHelp.js ├── getHug.js ├── getInfo.js ├── getJay.js ├── getKonachanImage.js ├── getLeaderboard.js ├── getLenny.js ├── getLevel.js ├── getLewdImage.js ├── getMagic.js ├── getMemes.js ├── getPpOfMap.js ├── getR34Image.js ├── getRandomCat.js ├── getRandomNumber.js ├── getRemImage.js ├── getShrug.js ├── getSlap.js ├── getSupportLink.js ├── getTopGuilds.js ├── getTrigger.js ├── getWtfLink.js ├── getYandereImage.js ├── joinVoice.js ├── kickUser.js ├── leaveVoice.js ├── listRoles.js ├── lmgtfy.js ├── mod.js ├── mod │ ├── lang.js │ ├── radio.js │ ├── radio │ │ ├── add.js │ │ ├── list.js │ │ └── remove.js │ └── translation │ │ └── reloadTranslation.js ├── pauseSong.js ├── ping.js ├── playRadio.js ├── playSong.js ├── playSongRepeat.js ├── playlist.js ├── registerProxer.js ├── removeMessages.js ├── removeRole.js ├── report.js ├── resumeSong.js ├── s.js ├── say.js ├── searchSong.js ├── searchYoutube.js ├── searchYoutubeQueue.js ├── server │ ├── farewell.js │ ├── farewell │ │ ├── reset.js │ │ └── set.js │ ├── greeting.js │ └── greeting │ │ ├── reset.js │ │ └── set.js ├── setLanguage.js ├── setNsfwChannel.js ├── setPrefix.js ├── setStatus.js ├── setVolume.js ├── showQueue.js ├── skipSong.js ├── verifyProxer.js └── voteskipSong.js ├── config ├── lewd.json └── main.json.example ├── fonts ├── RegencieLight.ttf ├── RegencieLightAlt.ttf ├── RegencieLightAltObl.ttf └── RegencieLightObl.ttf ├── index.js ├── locales ├── bg │ └── translation.json ├── cn │ └── translation.json ├── de │ └── translation.json ├── dev │ └── translation.json ├── en │ └── translation.json ├── es │ └── translation.json ├── fr │ └── translation.json ├── pl │ └── translation.json ├── pt-BR │ └── translation.json ├── pt │ └── translation.json ├── ru │ └── translation.json ├── sv │ └── translation.json └── tr │ └── translation.json ├── package.json ├── sharding.js └── utility ├── Cache └── cacheManager.js ├── assets ├── hide.jpg └── template.png ├── cleverbot.js ├── cmdManager.js ├── errorReporter.js ├── general.js ├── i18nManager.js ├── logger.js ├── message.js ├── music.js ├── osu.js ├── proxer ├── login │ └── login.js ├── messenger │ ├── getUserInfo.js │ └── sendMessage.js └── user │ └── verifyUser.js ├── socket └── basic.js ├── voice.js ├── voice ├── open.js └── randomQueue.js └── youtube ├── helper.js ├── sub ├── download.js └── downloadProxy.js ├── youtube-child.js └── youtube.js /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | ### Node template 3 | # Logs 4 | logs 5 | *.log 6 | npm-debug.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | 13 | # Directory for instrumented libs generated by jscoverage/JSCover 14 | lib-cov 15 | 16 | # Coverage directory used by tools like istanbul 17 | coverage 18 | 19 | # nyc test coverage 20 | .nyc_output 21 | 22 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 23 | .grunt 24 | 25 | # node-waf configuration 26 | .lock-wscript 27 | 28 | # Compiled binary addons (http://nodejs.org/api/addons.html) 29 | build/Release 30 | 31 | # Dependency directories 32 | node_modules 33 | jspm_packages 34 | 35 | # Optional npm cache directory 36 | .npm 37 | 38 | # Optional REPL history 39 | .node_repl_history 40 | config/main.json 41 | .idea 42 | audio 43 | cmd.bat 44 | temp 45 | yarn.lock 46 | 47 | # IDE specific files. 48 | .idea/ 49 | -------------------------------------------------------------------------------- /DB/playlist.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 26.06.2016. 3 | */ 4 | var mongoose = require('mongoose'); 5 | var playlistSchema = mongoose.Schema({ 6 | title:String, 7 | createdBy:String, 8 | serverPlaylist:Boolean, 9 | createdAt:Date, 10 | id:String, 11 | public:Boolean, 12 | songs:[] 13 | 14 | }); 15 | var playlistModel = mongoose.model('Playlists', playlistSchema); 16 | playlistSchema.methods.addSong = function addSong(song, cb) { 17 | this.model('Playlists').update({id: this.id}, {$addToSet: {songs: song}}, cb); 18 | }; 19 | module.exports = playlistModel; 20 | -------------------------------------------------------------------------------- /DB/queue.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 10.07.2016. 3 | */ 4 | var mongoose = require('mongoose'); 5 | var queueSchema = mongoose.Schema({ 6 | server:String, 7 | voteSkip:Number, 8 | repeat:Boolean, 9 | repeatId:String, 10 | voteSkipVotes:[], 11 | songs:[] 12 | }); 13 | queueSchema.methods.updateVotes = function updateVotes(Id, cb) { 14 | this.model('Queues').update({server:this.server}, {$inc:{voteSkip:1}, $addToSet:{voteSkipVotes:Id}}, cb); 15 | }; 16 | queueSchema.methods.resetVotes = function resetVotes(cb) { 17 | this.model('Queues').update({server:this.server}, {$set:{voteSkip:0, voteSkipVotes:[]}}, cb); 18 | }; 19 | queueSchema.methods.reload = function reload(cb) { 20 | this.model('Queues').findOne({server:this.server}, cb); 21 | }; 22 | queueSchema.methods.removeLatest = function (cb) { 23 | this.model('Queues').update({server:this.server},{$pop: {songs: 1}}, cb); 24 | }; 25 | queueSchema.methods.clear = function (songs, cb) { 26 | this.model('Queues').update({server:this.server},{$set:{songs:songs}}, cb); 27 | }; 28 | queueSchema.methods.removeOldest = function (cb) { 29 | this.model('Queues').update({server:this.server},{$pop: {songs: 1}}, cb); 30 | }; 31 | queueSchema.methods.startRepeat = function (cb) { 32 | this.model('Queues').update({server:this.server},{$set:{repeat:true}}, cb); 33 | }; 34 | queueSchema.methods.stopRepeat = function (cb) { 35 | this.model('Queues').update({server:this.server},{$set: {repeat:false, repeatId:""}}, cb); 36 | }; 37 | queueSchema.methods.updateRepeatId = function (id,cb) { 38 | this.model('Queues').update({server:this.server},{$set: {repeatId:id}}, cb); 39 | }; 40 | queueSchema.methods.checkVote = function checkVote(Id,cb) { 41 | this.model('Queues').findOne({voteSkipVotes:Id, server:this.server}, function (err,Queue) { 42 | if (err) return cb(err); 43 | if (Queue) { 44 | return cb(null, true); 45 | } else { 46 | return cb(null, false); 47 | } 48 | }); 49 | }; 50 | 51 | queueSchema.methods.updateTitle = function (id, title, cb) { 52 | this.model('Queues').update({server: this.server, 'songs.id': id}, {$set: {'songs.$.title': title}}, cb); 53 | }; 54 | var queueModel = mongoose.model('Queues', queueSchema); 55 | module.exports = queueModel; -------------------------------------------------------------------------------- /DB/server.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 26.06.2016. 3 | */ 4 | var mongoose = require('mongoose'); 5 | var serverSchema = mongoose.Schema({ 6 | id: String, 7 | lastVoiceChannel: String, 8 | nsfwChannel: String, 9 | nsfwChannels: [], 10 | roles: [], 11 | cmdChannels: [], 12 | ignoreChannels: [], 13 | permissions: [], 14 | prefix: String, 15 | disabledCmds: [], 16 | levelUpRewards: [], 17 | Groups: [], 18 | Blacklist: [], 19 | lng: String, 20 | levelEnabled: Boolean, 21 | pmNotifications: Boolean, 22 | chNotifications: Boolean, 23 | volume: Number, 24 | joinText: String, 25 | joinChannel: String, 26 | leaveText: String, 27 | leaveChannel: String 28 | }); 29 | serverSchema.methods.updateVoice = function (id, cb) { 30 | this.model('Servers').update({id: this.id}, {$set: {lastVoiceChannel: id}}, cb); 31 | }; 32 | serverSchema.methods.updateNsfw = function (id, cb) { 33 | this.model('Servers').update({id: this.id}, {$set: {nsfwChannel: id}}, cb); 34 | }; 35 | serverSchema.methods.updatePms = function (bool, cb) { 36 | this.model('Servers').update({id: this.id}, {$set: {pmNotifications: bool}}, cb); 37 | }; 38 | serverSchema.methods.updateLevels = function (bool, cb) { 39 | this.model('Servers').update({id: this.id}, {$set: {levelEnabled: bool}}, cb); 40 | }; 41 | serverSchema.methods.updatePrefix = function (prefix, cb) { 42 | this.model('Servers').update({id: this.id}, {$set: {prefix: prefix}}, cb); 43 | }; 44 | serverSchema.methods.updateLanguage = function (lng, cb) { 45 | this.model('Servers').update({id: this.id}, {$set: {lng: lng}}, cb); 46 | }; 47 | serverSchema.methods.updateVolume = function (volume, cb) { 48 | this.model('Servers').update({id: this.id}, {$set: {volume: volume}}, cb); 49 | }; 50 | serverSchema.methods.updateChannel = function (bool, cb) { 51 | this.model('Servers').update({id: this.id}, {$set: {chNotifications: bool}}, cb); 52 | }; 53 | serverSchema.methods.setJoin = function (message, channel, cb) { 54 | this.model('Servers').update({id: this.id}, {$set: {joinText: message, joinChannel: channel}}, cb); 55 | }; 56 | serverSchema.methods.setLeave = function (message, channel, cb) { 57 | this.model('Servers').update({id: this.id}, {$set: {leaveText: message, leaveChannel: channel}}, cb); 58 | }; 59 | serverSchema.methods.addRole = function (role, cb) { 60 | this.model('Servers').update({id: this.id}, {$addToSet: {roles: role}}, cb); 61 | }; 62 | var serverModel = mongoose.model('Servers', serverSchema); 63 | module.exports = serverModel; -------------------------------------------------------------------------------- /DB/song.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 26.06.2016. 3 | */ 4 | var mongoose = require('mongoose'); 5 | var songSchema = mongoose.Schema({ 6 | title:String, 7 | alt_title:String, 8 | path:String, 9 | addedBy:String, 10 | addedAt:Date, 11 | id:String, 12 | type:String, 13 | url:String, 14 | setId:String, 15 | dl:String, 16 | dlBy:String, 17 | plays:Number, 18 | favorites:Number, 19 | votes:Number, 20 | votedDownBy:[], 21 | votedUpBy:[], 22 | duration:String, 23 | user:Object, 24 | cached:Boolean, 25 | cachedAt:Date, 26 | cachedUntil: Date, 27 | lastPlay: Date 28 | }); 29 | songSchema.methods.updateVotes = function updateVotes(vote,cb) { 30 | this.model('Songs').update({id:this.id}, {$inc: {votes:vote}}, cb); 31 | }; 32 | var songModel = mongoose.model('Songs', songSchema); 33 | module.exports = songModel; -------------------------------------------------------------------------------- /DB/user.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 23.07.2016. 3 | */ 4 | var mongoose = require('mongoose'); 5 | var userSchema = mongoose.Schema({ 6 | id: String, 7 | name: String, 8 | level: Number, 9 | servers:[], 10 | levelEnabled:Boolean, 11 | pmNotifications:Boolean, 12 | xp: Number, 13 | avatar: String, 14 | created: Date, 15 | banned: Boolean, 16 | verified:Boolean, 17 | proxerId:String, 18 | verificationToken:String, 19 | favorites:[] 20 | }); 21 | userSchema.methods.updateXP = function updateXP(id,xp,cb) { 22 | this.model('Users').update({id:this.id, 'servers.serverId':id}, {$inc: {'servers.$.xp': xp,'servers.$.totalXp': xp}, $set:{'servers.$.cooldown':Date.now()}}, cb); 23 | }; 24 | userSchema.methods.updateLevel = function updateLevel(id,cb) { 25 | this.model('Users').update({id:this.id, 'servers.serverId':id}, {$set: {'servers.$.xp': 0}, $inc:{'servers.$.level':1}}, cb); 26 | }; 27 | userSchema.methods.updateFavorites = function updateFavorites(id,cb) { 28 | this.model('Users').update({id:this.id}, {favorites:{$addToSet:id}}, cb); 29 | }; 30 | userSchema.methods.updateName = function updateName(name,cb) { 31 | this.model('Users').update({id:this.id}, {$set:{name:name}}, cb); 32 | }; 33 | userSchema.methods.disableLevel = function disableLevel(id,cb) { 34 | this.model('Users').update({id:this.id, 'servers.serverId':id}, {$set: {'servers.$.levelEnabled':false}}, cb); 35 | }; 36 | userSchema.methods.enableLevel = function enableLevel(id,cb) { 37 | this.model('Users').update({id:this.id, 'servers.serverId':id}, {$set: {'servers.$.levelEnabled':true}}, cb); 38 | }; 39 | userSchema.methods.disablePm = function disablePm(id,cb) { 40 | this.model('Users').update({id:this.id, 'servers.serverId':id}, {$set: {'servers.$.pmNotifications':false}}, cb); 41 | }; 42 | userSchema.methods.enablePm = function enablePm(id,cb) { 43 | this.model('Users').update({id:this.id, 'servers.serverId':id}, {$set: {'servers.$.pmNotifications':true}}, cb); 44 | }; 45 | userSchema.methods.addServer = function addServer(server,cb) { 46 | this.model('Users').update({id:this.id}, {$addToSet:{servers:server}}, cb); 47 | }; 48 | var userModel = mongoose.model('Users', userSchema); 49 | module.exports = userModel; -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Rem the discord bot 2 | ##Information 3 | [![Discord](https://discordapp.com/api/guilds/206530953391243275/embed.png)](https://discord.gg/yuTxmYn) 4 | [![Dependencies](https://david-dm.org/DasWolke/discordbot/status.svg)](https://david-dm.org/DasWolke/discordbot) 5 | This is a simple Bot written by me. Currently on Discord.js version 10. 6 | Have fun trying to get it to work :D 7 | Requirements: 8 | - youtube-dl 9 | - ffmpeg 10 | - mongodb 11 | - nodejs v6/v7 12 | 13 | ![REM](https://67.media.tumblr.com/4ef3cfb14c39a2c5fd1fe5f467720750/tumblr_o9517sfLAY1smj1pbo1_1280.png) 14 | -------------------------------------------------------------------------------- /Resources/1476433094321.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DasWolke/discordbot/ff49ef732c5a6226eb45f69a1182d7877c0c8596/Resources/1476433094321.gif -------------------------------------------------------------------------------- /Resources/hug.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DasWolke/discordbot/ff49ef732c5a6226eb45f69a1182d7877c0c8596/Resources/hug.gif -------------------------------------------------------------------------------- /Resources/slap.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DasWolke/discordbot/ff49ef732c5a6226eb45f69a1182d7877c0c8596/Resources/slap.gif -------------------------------------------------------------------------------- /commands/addRandomToQueue.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var general = require('../utility/general'); 7 | var voice = require('../utility/voice'); 8 | var logger = require('../utility/logger'); 9 | var async = require('async'); 10 | var AsciiTable = require('ascii-table'); 11 | var winston = logger.getT(); 12 | var cmd = 'rq'; 13 | var songModel = require('../DB/song'); 14 | var pre = function (message) { 15 | if (message.guild) { 16 | voice.getInVoice(message, (err, msg) => { 17 | if (err) return message.channel.sendMessage(err); 18 | execute(msg); 19 | }); 20 | } else { 21 | message.channel.sendMessage(t('generic.no-pm', {lngs: message.lang})); 22 | } 23 | }; 24 | var execute = function (message) { 25 | if (message.guild) { 26 | let messageSplit = message.content.split(' '); 27 | let iteration = 0; 28 | try { 29 | iteration = messageSplit[1]; 30 | } catch (e) { 31 | iteration = 0; 32 | } 33 | if (isNaN(iteration)) { 34 | iteration = 0; 35 | } 36 | songModel.count({type: {$ne: 'radio'}}, function (err, C) { 37 | if (err) return message.channel.sendMessage(t('qa.db-error', {lngs: message.lang})); 38 | var random = general.random(0, C); 39 | songModel.find({type: {$ne: 'radio'}}, function (err, Songs) { 40 | if (err) return winston.error(err); 41 | let Song; 42 | if (iteration === 0) { 43 | if (typeof(Songs[random]) !== 'undefined') { 44 | Song = Songs[random]; 45 | if (voice.inVoice(message)) { 46 | voice.addToQueue(message, Song, false, (err, result) => { 47 | if (err) return message.channel.sendMessage(err); 48 | message.channel.sendMessage(result); 49 | }); 50 | } else { 51 | message.channel.sendMessage(t('generic.no-voice', {lngs: message.lang})); 52 | } 53 | } else { 54 | message.channel.sendMessage(t('generic.error', {lngs: message.lang})); 55 | } 56 | } else if (iteration < 51) { 57 | winston.info(`rq ${iteration}`); 58 | if (voice.inVoice(message)) { 59 | var randoms = []; 60 | for (var i = 0; i < iteration; i++) { 61 | random = general.random(0, Songs.length); 62 | Song = Songs[random]; 63 | Songs.splice(random, 1); 64 | randoms.push(Song); 65 | } 66 | voice.addToQueueBatch(message, randoms, false, (err, addedS) => { 67 | if (err) message.channel.sendMessage(err); 68 | if (addedS.length > 0) { 69 | if (addedS.length < 16) { 70 | let table = new AsciiTable(); 71 | for (var i = 0; i < addedS.length; i++) { 72 | table.addRow(i + 1, addedS[i].title); 73 | } 74 | message.channel.sendMessage(t('rq.success-multiple', { 75 | table: table.toString(), 76 | lngs: message.lang, 77 | interpolation: {escape: false} 78 | })).then(msg => { 79 | msg.delete(60 * 1000); 80 | }).catch(winston.info); 81 | } else { 82 | let table = new AsciiTable(); 83 | for (var u = 0; u < 15; u++) { 84 | table.addRow(u + 1, addedS[u].title); 85 | } 86 | table.addRow(u + 1, `${t('generic.more', { 87 | lngs: message.lang, 88 | number: addedS.length - 15 89 | })}..`); 90 | message.channel.sendMessage(t('rq.success-multiple', { 91 | table: table.toString(), 92 | lngs: message.lang, 93 | interpolation: {escape: false} 94 | })).then(msg => { 95 | msg.delete(60 * 1000); 96 | }).catch(winston.info); 97 | } 98 | 99 | } else { 100 | message.channel.sendMessage(t('rq.no-songs-added', {lngs: message.lang})); 101 | } 102 | }); 103 | 104 | } else { 105 | message.channel.sendMessage(t('generic.no-voice', {lngs: message.lang})); 106 | } 107 | } else { 108 | message.channel.sendMessage(t('too-much', {lngs: message.lang, number: 50})); 109 | } 110 | }); 111 | }); 112 | } else { 113 | message.channel.sendMessage(t('generic.no-pm', {lngs: message.lang})); 114 | } 115 | }; 116 | module.exports = {cmd: cmd, accessLevel: 0, exec: pre, cat: 'music'}; -------------------------------------------------------------------------------- /commands/addRole.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 30.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var messageHelper = require('../utility/message'); 7 | var logger = require('../utility/logger'); 8 | var winston = logger.getT(); 9 | var cmd = 'ar'; 10 | var exec = (message) => { 11 | if (message.guild) { 12 | let Guild = message.dbServer; 13 | let userReg = /<@(!|)[0-9]+>/g; 14 | let content = message.content.substr(message.prefix.length + cmd.length).trim(); 15 | content = content.replace(userReg, '').trim(); 16 | winston.info(content); 17 | let mention = message.mentions.users.first(); 18 | let wolkebot = messageHelper.hasWolkeBot(message); 19 | if (content.length > 0) { 20 | let roleGuild = message.guild.roles.filter(r => r.name === content).first(); 21 | if (Guild) { 22 | if (typeof (Guild.roles.length) !== 'undefined' && Guild.roles.length > 0) { 23 | let role = messageHelper.checkRoleExist(content, Guild.roles); 24 | if (role && roleGuild) { 25 | if (role.self) { 26 | if (!mention) { 27 | message.member.addRole(roleGuild).then(member=> { 28 | message.channel.sendMessage(t('add-role.ok', { 29 | lngs: message.lang, 30 | user: member.user, 31 | role: role.name 32 | })); 33 | }).catch(winston.error); 34 | } else { 35 | addRole(message, mention, roleGuild, wolkebot); 36 | } 37 | } else { 38 | if (wolkebot) { 39 | addRole(message, mention, roleGuild, wolkebot); 40 | } else { 41 | message.reply(t('generic.no-permission', {lngs: message.lang})); 42 | } 43 | } 44 | } else { 45 | if (roleGuild) { 46 | if (wolkebot) { 47 | addRole(message, mention, roleGuild, wolkebot); 48 | } else { 49 | message.reply(t('generic.no-permission', {lngs: message.lang})); 50 | } 51 | } 52 | } 53 | } else { 54 | if (wolkebot) { 55 | if (roleGuild) { 56 | if (!mention) { 57 | addRole(message, message.author, roleGuild, wolkebot); 58 | } else { 59 | addRole(message, mention, roleGuild, wolkebot); 60 | } 61 | } else { 62 | message.channel.sendMessage(t('create-role.missing', {lngs: message.lang})); 63 | } 64 | } else { 65 | message.reply(t('generic.no-permission', {lngs: message.lang})); 66 | } 67 | } 68 | } 69 | } else { 70 | message.reply(t('create-role.no-args', {lngs: message.lang})); 71 | } 72 | } else { 73 | message.reply(t('generic.no-pm', {lngs: message.lang})); 74 | } 75 | }; 76 | function addRole(message, user, role, wolkebot) { 77 | if (wolkebot) { 78 | messageHelper.addRoleMember(message, user, role, (err) => { 79 | if (err) return message.reply(err); 80 | message.channel.sendMessage(t('add-role.ok', {lngs: message.lang, user: user, role: role.name})); 81 | }); 82 | } else { 83 | message.reply(t('generic.no-permission', {lngs: message.lang})); 84 | } 85 | } 86 | module.exports = {cmd: cmd, accessLevel: 0, exec: exec, cat: 'roles'}; -------------------------------------------------------------------------------- /commands/addToQueue.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var voice = require('../utility/voice'); 7 | var logger = require('../utility/logger'); 8 | var ytHelper = require('../utility/youtube/helper'); 9 | var musicHelper = require('../utility/music'); 10 | var osu = require('../utility/osu'); 11 | var winston = logger.getT(); 12 | var cmd = 'qa'; 13 | var songModel = require('../DB/song'); 14 | var pre = function (message) { 15 | if (message.guild) { 16 | voice.getInVoice(message, (err, msg) => { 17 | if (err) return message.channel.sendMessage(err); 18 | execute(msg); 19 | }) 20 | } else { 21 | message.channel.sendMessage(t('generic.no-pm', {lngs: message.lang})); 22 | } 23 | }; 24 | var execute = function (message) { 25 | let messageSplit = message.content.split(' '); 26 | if (message.guild) { 27 | if (typeof(messageSplit[1]) === 'undefined') { 28 | return message.channel.sendMessage(t('qa.empty-search', {lngs: message.lang})); 29 | } 30 | var messageSearch = ""; 31 | for (var a = 1; a < messageSplit.length; a++) { 32 | messageSearch = messageSearch + " " + messageSplit[a] 33 | } 34 | if (musicHelper.checkMedia(messageSplit[1])) { 35 | ytHelper.ytDlAndQueue(message, messageSearch, messageSplit); 36 | } else if (musicHelper.checkOsuMap(messageSplit[1])) { 37 | message.channel.sendMessage(t('qa.started-download', { 38 | lngs: message.lang, 39 | url: messageSplit[1], 40 | interpolation: {escape: false} 41 | })); 42 | songModel.findOne({url: messageSplit[1], type: {$ne: 'radio'}}, (err, Song) => { 43 | if (err) return winston.info(err); 44 | if (Song) { 45 | voice.addToQueue(message, Song, null, (err, reply) => { 46 | if (err) return message.channel.sendMessage(err); 47 | if (reply) { 48 | message.channel.sendMessage(reply) 49 | } 50 | }); 51 | } else { 52 | osu.download(message).then(Song => { 53 | voice.addToQueue(message, Song, null, (err, reply) => { 54 | if (err) return message.channel.sendMessage(err); 55 | if (reply) { 56 | message.channel.sendMessage(reply) 57 | } 58 | }); 59 | }).catch(message.channel.sendMessage); 60 | } 61 | }); 62 | } else { 63 | messageSearch = messageSearch.replace('-', ''); 64 | songModel.find({ 65 | $text: {$search: messageSearch}, 66 | type: {$ne: 'radio'} 67 | }, {score: {$meta: "textScore"}}).sort({score: {$meta: "textScore"}}).limit(1).exec((err, Songs) => { 68 | if (err) return winston.info(err); 69 | if (Songs !== null && Songs.length > 0) { 70 | let Song = Songs[0]; 71 | voice.addToQueue(message, Song, null, (err, reply) => { 72 | if (err) return message.channel.sendMessage(err); 73 | if (reply) { 74 | message.channel.sendMessage(reply) 75 | } 76 | }); 77 | } else { 78 | message.channel.sendMessage(t('qa.nothing-found', { 79 | search: messageSearch, 80 | lngs: message.lang, 81 | interpolation: {escape: false} 82 | })); 83 | } 84 | }); 85 | } 86 | } else { 87 | message.channel.sendMessage(t('generic.no-pm', {lngs: message.lang})); 88 | } 89 | }; 90 | module.exports = {cmd: cmd, accessLevel: 0, exec: pre, cat: 'music'}; -------------------------------------------------------------------------------- /commands/addToServer.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var cmd = 'add'; 5 | var i18nBean = require('../utility/i18nManager'); 6 | var t = i18nBean.getT(); 7 | var config = require('../config/main.json'); 8 | var execute = function (message) { 9 | if (message.guild) { 10 | message.channel.sendMessage(':ok_hand: '); 11 | } 12 | if (config.beta) { 13 | message.author.sendMessage(t('add', { 14 | link: `\`, 15 | lngs: message.lang, 16 | interpolation: {escape: false} 17 | })); 18 | } else { 19 | message.author.sendMessage(t('add', { 20 | link: `https://ram.moe/invite`, 21 | lngs: message.lang, 22 | interpolation: {escape: false} 23 | })); 24 | } 25 | }; 26 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'support'}; -------------------------------------------------------------------------------- /commands/banUser.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var messageHelper = require('../utility/message'); 5 | var voice = require('../utility/voice'); 6 | var logger = require('../utility/logger'); 7 | var winston = logger.getT(); 8 | var i18nBean = require('../utility/i18nManager'); 9 | var t = i18nBean.getT(); 10 | var cmd = 'ban'; 11 | var execute = function (message) { 12 | if (message.guild && messageHelper.hasWolkeBot(message)) { 13 | let user = message.mentions.users.first(); 14 | if (user) { 15 | if (user.id !== message.botUser.user.id) { 16 | message.guild.fetchMember(user).then(member => { 17 | if (member.id !== message.guild.owner.id && !messageHelper.hasWolkeBot(message, member)) { 18 | member.ban(7).then(member => { 19 | message.channel.sendMessage(t('ban.success', { 20 | user: member.user.username, 21 | lngs: message.lang 22 | })); 23 | }).catch(err => { 24 | if (err.response.statusCode === 403) { 25 | message.channel.sendMessage(t('ban.privilege', { 26 | user: member.user.username, 27 | lngs: message.lang 28 | })); 29 | } else { 30 | message.channel.sendMessage(t('ban.err', { 31 | user: member.user.username, 32 | lngs: message.lang 33 | })); 34 | } 35 | }); 36 | } else { 37 | message.channel.sendMessage(t('ban.perms', {lngs: message.lang})); 38 | } 39 | }).catch(winston.info); 40 | } else { 41 | message.channel.sendMessage(t('ban.self', {lngs: message.lang})); 42 | } 43 | } else { 44 | message.channel.sendMessage(t('ban.no-mention', {lngs: message.lang})); 45 | } 46 | } else { 47 | message.channel.sendMessage(t('generic.no-permission', {lngs: message.lang})); 48 | } 49 | }; 50 | module.exports = {cmd: cmd, accessLevel: 1, exec: execute, cat: 'moderation'}; -------------------------------------------------------------------------------- /commands/broadcast.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var async = require('async'); 5 | var cmd = 'broadcast'; 6 | var logger = require('../utility/logger'); 7 | var winston = logger.getT(); 8 | var config = require('../config/main.json'); 9 | var execute = function (message) { 10 | if (message.author.id === config.owner_id) { 11 | let content = message.content.substr(message.prefix.length + cmd.length).trim(); 12 | let guilds = message.botUser.guilds.array(); 13 | async.eachSeries(guilds, (guild, cb) => { 14 | if (guild.id !== '110373943822540800') { 15 | guild.defaultChannel.sendMessage(content).then(message => { 16 | cb(); 17 | }).catch(err => { 18 | winston.info(err); 19 | cb(); 20 | }); 21 | } else { 22 | async.setImmediate(() => { 23 | cb(); 24 | }); 25 | } 26 | }, (err) => { 27 | if (err) return winston.info(err); 28 | message.channel.sendMessage(`Sent broadcast to ${guilds.length - 1} Guilds`); 29 | }); 30 | } 31 | }; 32 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'admin'}; -------------------------------------------------------------------------------- /commands/clearQueue.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var messageHelper = require('../utility/message'); 7 | var voice = require('../utility/voice'); 8 | var logger = require('../utility/logger'); 9 | var osu = require('../utility/osu'); 10 | var AsciiTable = require('ascii-table'); 11 | var queueModel = require('../DB/queue'); 12 | var winston = logger.getT(); 13 | var cmd = 'qra'; 14 | var execute = function (message) { 15 | let messageSplit = message.content.split(' '); 16 | if (message.guild && messageHelper.hasWolkeBot(message)) { 17 | if (typeof (messageSplit[1]) !== 'undefined' && messageSplit[1]) { 18 | let number = 0; 19 | try { 20 | number = parseInt(messageSplit[1]); 21 | } catch (e) { 22 | return message.reply(t('generic.whole-num', {lngs: message.lang})); 23 | } 24 | if (isNaN(number)) { 25 | return message.reply(t('generic.nan', {lngs: message.lang})); 26 | } 27 | if (number < 1) { 28 | return message.reply(t('qra.to-small', {lngs: message.lang, number: number})); 29 | } 30 | queueModel.findOne({server: message.guild.id}, function (err, Queue) { 31 | if (err) return winston.info(err); 32 | if (Queue) { 33 | if (Queue.songs.length > 1) { 34 | let keptSongs = Queue.songs.slice(0, Queue.songs.length - number); 35 | Queue.clear(keptSongs, err => { 36 | if (err) return winston.info(err); 37 | let songs = Queue.songs.slice(Queue.songs.length - number, Queue.songs.length); 38 | if (songs.length > 20) { 39 | message.channel.sendMessage(t('qra.too-big', { 40 | lngs: message.lang, 41 | number: songs.length 42 | })); 43 | } else { 44 | message.channel.sendMessage(t('qra.success', { 45 | lngs: message.lang, 46 | table: buildReply(songs), 47 | interpolation: {escape: false} 48 | })); 49 | } 50 | }); 51 | } else if (Queue.songs.length === 1) { 52 | message.channel.sendMessage(t('qra.one-song', {lngs: message.lang, prefix: message.prefix})); 53 | } else { 54 | message.channel.sendMessage(t('generic.no-song-in-queue', {lngs: message.lang})); 55 | } 56 | } else { 57 | message.channel.sendMessage(t('generic.no-song-in-queue', {lngs: message.lang})); 58 | } 59 | }); 60 | } else { 61 | queueModel.findOne({server: message.guild.id}, function (err, Queue) { 62 | if (err) return winston.info(err); 63 | if (Queue) { 64 | if (Queue.songs.length > 1) { 65 | let keptSongs = Queue.songs.slice(0, 1); 66 | Queue.clear(keptSongs, err => { 67 | if (err) return winston.info(err); 68 | let songs = Queue.songs.slice(1, Queue.songs.length); 69 | if (songs.length > 20) { 70 | message.channel.sendMessage(t('qra.too-big', { 71 | lngs: message.lang, 72 | number: songs.length 73 | })); 74 | } else { 75 | message.channel.sendMessage(t('qra.success', { 76 | lngs: message.lang, 77 | table: buildReply(songs), 78 | interpolation: {escape: false} 79 | })).then(msg => { 80 | msg.delete(60 * 1000); 81 | }).catch(winston.info); 82 | } 83 | }); 84 | } else if (Queue.songs.length === 1) { 85 | message.channel.sendMessage(t('qra.one-song', {lngs: message.lang, prefix: message.prefix})); 86 | } else { 87 | message.channel.sendMessage(t('generic.no-song-in-queue', {lngs: message.lang})); 88 | } 89 | } else { 90 | message.channel.sendMessage(t('generic.no-song-in-queue', {lngs: message.lang})); 91 | } 92 | }); 93 | } 94 | } else { 95 | message.reply(t('generic.no-permission', {lngs: message.lang})); 96 | } 97 | }; 98 | var buildReply = function (songs) { 99 | var table = new AsciiTable(); 100 | for (var i = 0; i < songs.length; i++) { 101 | table.addRow(i + 1, songs[i].title); 102 | } 103 | return `\`\`\`${table.toString()}\`\`\``; 104 | }; 105 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'music'}; -------------------------------------------------------------------------------- /commands/cookie.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var messageHelper = require('../utility/message'); 7 | var voice = require('../utility/voice'); 8 | var logger = require('../utility/logger'); 9 | var userModel = require('../DB/user'); 10 | var winston = logger.getT(); 11 | var config = require('../config/main.json'); 12 | var cmd = 'cookie'; 13 | var execute = function (message) { 14 | if (message.guild) { 15 | let messageSplit = message.content.split(' '); 16 | if (typeof (messageSplit[1]) !== 'undefined') { 17 | let user = message.mentions.users.first(); 18 | if (user) { 19 | userModel.findOne({id: user.id}, function (err, User) { 20 | if (err) return winston.info(err); 21 | if (User) { 22 | if (messageHelper.hasGuild(message, User)) { 23 | var clientServer = messageHelper.loadServerFromUser(message, User); 24 | if (typeof (clientServer.cookies) !== 'undefined') { 25 | userModel.update({ 26 | id: User.id, 27 | 'servers.serverId': message.guild.id 28 | }, {$inc: {'servers.$.cookies': 1}}, function (err) { 29 | if (err) return winston.info(err); 30 | message.channel.sendMessage(t('cookie.give', { 31 | lngs: message.lang, 32 | user: User.name 33 | })); 34 | }); 35 | } else { 36 | userModel.update({ 37 | id: User.id, 38 | 'servers.serverId': message.guild.id 39 | }, {$inc: {'servers.$.cookies': 1}}, function (err) { 40 | if (err) return winston.info(err); 41 | message.channel.sendMessage(t('cookie.give', { 42 | lngs: message.lang, 43 | user: User.name 44 | })); 45 | }); 46 | } 47 | } else { 48 | User.addServer(messageHelper.getServerObj(message, true, true), function (err) { 49 | if (err) return winston.info(err); 50 | }); 51 | } 52 | } else { 53 | messageHelper.createUser({author: user, guild: message.guild}, true, true, function (err) { 54 | if (err) return winston.info(err); 55 | userModel.findOne({id: user.id}, function (err, User) { 56 | if (err) return winston.info(err); 57 | if (User) { 58 | var clientServer = messageHelper.loadServerFromUser(message, User); 59 | if (typeof (clientServer.cookies) !== 'undefined') { 60 | userModel.update({ 61 | id: User.id, 62 | 'servers.serverId': message.guild.id 63 | }, {$inc: {'servers.$.cookies': 1}}, function (err) { 64 | if (err) return winston.info(err); 65 | message.channel.sendMessage(t('cookie.give', { 66 | lngs: message.lang, 67 | user: User.name 68 | })); 69 | }); 70 | } else { 71 | var server = messageHelper.getServerObj(message, true, true); 72 | User.addServer(server, function (err) { 73 | if (err) return winston.info(err); 74 | message.channel.sendMessage(t('cookie.new-server', {lngs: message.lang})); 75 | }); 76 | } 77 | } else { 78 | message.channel.sendMessage(t('cookie.arere', {lngs: message.lang})); 79 | } 80 | }); 81 | }); 82 | } 83 | }); 84 | } else { 85 | message.channel.sendMessage(t('cookie.one-user', {lngs: message.lang})); 86 | } 87 | } else { 88 | userModel.findOne({id: message.author.id, 'servers.serverId': message.guild.id}, function (err, User) { 89 | if (err) return winston.info(err); 90 | if (User) { 91 | var clientServer = messageHelper.loadServerFromUser(message, User); 92 | if (typeof (clientServer.cookies) !== 'undefined') { 93 | message.reply(t('cookie.count', {lngs: message.lang, number: clientServer.cookies})); 94 | } else { 95 | message.reply(t('cookie.count', {lngs: message.lang, number: 0})) 96 | } 97 | } else { 98 | messageHelper.createUser(message, true, true, function (err) { 99 | if (err) return winston.info(err); 100 | }); 101 | message.reply(t('cookie.count', {lngs: message.lang, number: 0})); 102 | } 103 | }); 104 | } 105 | } else { 106 | message.channel.sendMessage(t('generic.no-pm', {lngs: message.lang})); 107 | } 108 | }; 109 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'misc'}; -------------------------------------------------------------------------------- /commands/createInvite.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var cmd = 'createInvite'; 5 | var config = require('../config/main.json'); 6 | var logger = require('../utility/logger'); 7 | var winston = logger.getT(); 8 | var execute = function (message) { 9 | if (message.author.id === config.owner_id) { 10 | let content = message.content.substr(message.prefix.length + cmd.length).trim(); 11 | if (content !== '') { 12 | let guild = message.botUser.guilds.find('id', content); 13 | if (guild) { 14 | guild.defaultChannel.createInvite({maxUses: 1, maxAge: 600, temporary: false}).then(Invite => { 15 | message.reply(Invite); 16 | }).catch(message.reply); 17 | } else { 18 | message.reply('Could not fetch guild!'); 19 | } 20 | } else { 21 | message.reply('That will not work!'); 22 | } 23 | } 24 | }; 25 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'admin'}; -------------------------------------------------------------------------------- /commands/createRole.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 30.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var messageHelper = require('../utility/message'); 7 | var logger = require('../utility/logger'); 8 | var serverModel = require('../DB/server'); 9 | var winston = logger.getT(); 10 | var cmd = 'cr'; 11 | var _ = require('lodash'); 12 | var minimist = require('minimist'); 13 | var exec = (message) => { 14 | if (message.guild) { 15 | let wolkebot = messageHelper.hasWolkeBot(message); 16 | if (wolkebot) { 17 | let messageSplit = message.content.split(' ').splice(1); 18 | let res = parseArguments(messageSplit); 19 | let role = res.arguments; 20 | winston.info(JSON.stringify(role)); 21 | if (messageSplit.length > 0) { 22 | let roleGuild = message.guild.roles.filter(r => r.name === role.name).first(); 23 | if (roleGuild) { 24 | role.id = roleGuild.id; 25 | if (typeof (message.dbServer.roles) !== 'undefined' && message.dbServer.roles.length > 0) { 26 | let roles = _.filter(message.dbServer.roles, {id: roleGuild.id}); 27 | if (roles.length > 0) { 28 | message.reply(t('create-role.ok', {role: roles[0].name})); 29 | } else { 30 | winston.info(role); 31 | message.dbServer.addRole(role, (err) => { 32 | if (err) return message.reply(t('generic.error', {lngs: message.lang})); 33 | message.reply(t('create-role.ok', {role: role.name})); 34 | }) 35 | } 36 | } else { 37 | message.dbServer.addRole(role, (err) => { 38 | if (err) return message.reply(t('generic.error', {lngs: message.lang})); 39 | message.reply(t('create-role.ok', {role: role.name})); 40 | }) 41 | } 42 | } else { 43 | message.guild.createRole({name: role.name, permissions: 0}).then(roleServer => { 44 | role.id = roleServer.id; 45 | message.dbServer.addRole(role, (err) => { 46 | if (err) return message.reply(t('generic.error', {lngs: message.lang})); 47 | message.reply(t('create-role.ok', {role: role.name})); 48 | }); 49 | }).catch(err => winston.error(err)); 50 | } 51 | } else { 52 | message.reply(t('create-role.no-args', {lngs: message.lang})); 53 | } 54 | } else { 55 | message.reply(t('generic.no-permission', {lngs: message.lang})); 56 | } 57 | } else { 58 | message.reply(t('generic.no-pm', {lngs: message.lang})); 59 | } 60 | }; 61 | var parseArguments = (contentSplit) => { 62 | let arguments = {self: false, default: false, level: -1}; 63 | let args = minimist(contentSplit, {boolean: ['d', 's']}); 64 | console.log(args); 65 | if (typeof (args.s) !== 'undefined' && args.s) { 66 | arguments.self = true; 67 | } 68 | if (typeof (args.d) !== 'undefined' && args.d) { 69 | arguments.default = true; 70 | } 71 | if (typeof (args.l) !== 'undefined' && args.l) { 72 | let l = args.l; 73 | let number = -1; 74 | if (typeof (l) !== 'undefined') { 75 | try { 76 | number = parseInt(l); 77 | } catch (e) { 78 | 79 | } 80 | if (isNaN(l)) { 81 | number = -1; 82 | } 83 | if (l < 2) { 84 | number = -1; 85 | } 86 | arguments.level = number; 87 | } 88 | } 89 | arguments.name = args._.join(' ').trim(); 90 | return {arguments: arguments}; 91 | }; 92 | module.exports = {cmd: cmd, accessLevel: 0, exec: exec, cat: 'roles'}; -------------------------------------------------------------------------------- /commands/currentSong.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var cmd = 'np'; 5 | var i18nBean = require('../utility/i18nManager'); 6 | var t = i18nBean.getT(); 7 | var voice = require('../utility/voice'); 8 | var execute = function (message) { 9 | if (message.guild) { 10 | voice.now(message).then(result => { 11 | if (result.playing) { 12 | let repeat = (result.repeat) ? t('np.repeat-on', {lngs: message.lang}) : ''; 13 | if (typeof (result.duration) !== 'undefined' && result.duration !== '') { 14 | message.reply(t('np.song-duration', { 15 | lngs: message.lang, 16 | title: result.title, 17 | repeat: repeat, 18 | duration: result.duration, 19 | current: result.current, 20 | interpolation: {escape: false} 21 | })); 22 | } else { 23 | message.reply(t('np.song', { 24 | lngs: message.lang, 25 | title: result.title, 26 | repeat: repeat, 27 | interpolation: {escape: false} 28 | })); 29 | } 30 | } else { 31 | message.channel.sendMessage(t('generic.no-song-in-queue', {lngs: message.lang})); 32 | } 33 | }).catch(err => { 34 | message.channel.sendMessage(t('generic.no-song-in-queue', {lngs: message.lang})); 35 | }); 36 | } 37 | }; 38 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'music'}; -------------------------------------------------------------------------------- /commands/delNsfwChannel.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var messageHelper = require('../utility/message'); 7 | var serverModel = require('../DB/server'); 8 | var logger = require('../utility/logger'); 9 | var winston = logger.getT(); 10 | var cmd = 'remLewd'; 11 | var execute = function (message) { 12 | if (message.guild && messageHelper.hasWolkeBot(message)) { 13 | serverModel.findOne({id: message.guild.id}, function (err, Server) { 14 | if (err) return winston.info(err); 15 | if (Server) { 16 | serverModel.update({id: message.guild.id}, {$pull: {nsfwChannels: message.channel.id}}, function (err) { 17 | if (err) return winston.info(err); 18 | message.reply(t('rem-lewd.success', {lngs:message.lang, channel:message.channel,interpolation: {escape: false}})) 19 | }); 20 | } else { 21 | var server = new serverModel({ 22 | id: message.guild.id, 23 | lastVoiceChannel: "", 24 | nsfwChannels: [], 25 | cmdChannels: [], 26 | permissions: [], 27 | prefix: "!w.", 28 | disabledCmds: [], 29 | Groups: [], 30 | Blacklist: [] 31 | }); 32 | server.save(); 33 | message.reply(t('rem-lewd.no-nsfw', {lngs:message.lang})); 34 | } 35 | }); 36 | } else { 37 | message.reply(t('generic.no-permission', {lngs:message.lang})); 38 | } 39 | }; 40 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'moderation'}; -------------------------------------------------------------------------------- /commands/disableChannelServer.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 03.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var cmd = 'noChServer'; 7 | var serverModel = require('../DB/server'); 8 | var messageHelper = require('../utility/message'); 9 | var logger = require('../utility/logger'); 10 | var winston = logger.getT(); 11 | var execute = function (message) { 12 | if (message.guild) { 13 | if (messageHelper.hasWolkeBot(message)) { 14 | serverModel.findOne({id: message.guild.id}, function (err, Server) { 15 | if (err) return winston.info(err); 16 | if (Server) { 17 | if (typeof (Server.pmNotifications) === 'undefined' || Server.pmNotifications) { 18 | Server.updatePms(false, err => { 19 | if (err) return winston.info(err); 20 | Server.updateChannel(true, err=> { 21 | if (err) return winston.info(err); 22 | message.reply(t('no-channel-server.success-disable', {lngs: message.lang})); 23 | }); 24 | }); 25 | } else { 26 | Server.updatePms(true, err => { 27 | if (err) return winston.info(err); 28 | Server.updateChannel(false, err=> { 29 | if (err) return winston.info(err); 30 | message.reply(t('no-channel-server.success-enable', {lngs: message.lang})); 31 | }); 32 | }); 33 | } 34 | } else { 35 | let server = new serverModel({ 36 | id: message.guild.id, 37 | nsfwChannels: [], 38 | lastVoiceChannel: "", 39 | levelEnabled: true, 40 | pmNotifications: false, 41 | chNotifications: true, 42 | prefix: "!w." 43 | }); 44 | server.save(err => { 45 | if (err) return winston.info(err); 46 | message.reply(t('no-pm-server.success-disable', {lngs: message.lang})); 47 | }); 48 | } 49 | }); 50 | } else { 51 | message.reply(t('generic.no-permission', {lngs: message.lang})); 52 | } 53 | } else { 54 | message.reply(t('generic.no-pm', {lngs: message.lang})); 55 | } 56 | }; 57 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'moderation'}; -------------------------------------------------------------------------------- /commands/disableLevelServer.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 03.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var cmd = 'noLevelServer'; 7 | var serverModel = require('../DB/server'); 8 | var messageHelper = require('../utility/message'); 9 | var logger = require('../utility/logger'); 10 | var winston = logger.getT(); 11 | var execute = function (message) { 12 | if (message.guild) { 13 | if (messageHelper.hasWolkeBot(message)) { 14 | serverModel.findOne({id: message.guild.id}, function (err, Server) { 15 | if (err) return cb(err); 16 | if (Server) { 17 | if (typeof (Server.levelEnabled) === 'undefined' || Server.levelEnabled) { 18 | Server.updateLevels(false, err => { 19 | if (err) return winston.info(err); 20 | message.reply(t('no-level-server.success-disable', {lngs:message.lang})); 21 | }); 22 | } else { 23 | Server.updateLevels(true, err => { 24 | if (err) return winston.info(err); 25 | message.reply(t('no-level-server.success-enable', {lngs:message.lang})); 26 | }); 27 | } 28 | } else { 29 | let server = new serverModel({ 30 | id: message.guild.id, 31 | nsfwChannels: [], 32 | lastVoiceChannel: "", 33 | levelEnabled: false, 34 | pmNotifications: true, 35 | prefix:"!w." 36 | }); 37 | server.save(err => { 38 | if (err) return winston.info(err); 39 | message.reply(t('no-level-server.success-disable', {lngs:message.lang})); 40 | }); 41 | } 42 | }); 43 | } else { 44 | message.reply(t('generic.no-permission', {lngs:message.lang})); 45 | } 46 | } else { 47 | message.reply(t('generic.no-pm', {lngs:message.lang})); 48 | } 49 | }; 50 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'moderation'}; -------------------------------------------------------------------------------- /commands/disablePmServer.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 03.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var cmd = 'noPmServer'; 7 | var serverModel = require('../DB/server'); 8 | var messageHelper = require('../utility/message'); 9 | var logger = require('../utility/logger'); 10 | var winston = logger.getT(); 11 | var execute = function (message) { 12 | if (message.guild) { 13 | if (messageHelper.hasWolkeBot(message)) { 14 | serverModel.findOne({id: message.guild.id}, function (err, Server) { 15 | if (err) return winston.info(err); 16 | if (Server) { 17 | if (typeof (Server.pmNotifications) === 'undefined' || Server.pmNotifications) { 18 | Server.updatePms(false, err => { 19 | if (err) return winston.info(err); 20 | message.reply(t('no-pm-server.success-disable', {lngs:message.lang})); 21 | }); 22 | } else { 23 | Server.updatePms(true, err => { 24 | if (err) return winston.info(err); 25 | message.reply(t('no-pm-server.success-enable', {lngs:message.lang})); 26 | }); 27 | } 28 | } else { 29 | let server = new serverModel({ 30 | id: message.guild.id, 31 | nsfwChannels: [], 32 | lastVoiceChannel: "", 33 | levelEnabled: true, 34 | pmNotifications: false, 35 | prefix:"!w." 36 | }); 37 | server.save(err => { 38 | if (err) return winston.info(err); 39 | message.reply(t('no-pm-server.success-disable', {lngs:message.lang})); 40 | }); 41 | } 42 | }); 43 | } else { 44 | message.reply(t('generic.no-permission', {lngs:message.lang})); 45 | } 46 | } else { 47 | message.reply(t('generic.no-pm', {lngs:message.lang})); 48 | } 49 | }; 50 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'moderation'}; -------------------------------------------------------------------------------- /commands/disableUserLevel.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 03.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var cmd = 'noLevel'; 7 | var userModel = require('../DB/user'); 8 | var messageHelper = require('../utility/message'); 9 | var logger = require('../utility/logger'); 10 | var winston = logger.getT(); 11 | var execute = function (message) { 12 | if (message.guild) { 13 | userModel.findOne({id: message.author.id}, function (err, User) { 14 | if (err) return cb(err); 15 | if (User) { 16 | if (messageHelper.hasGuild(message, User)) { 17 | if (messageHelper.levelEnabled(message, User)) { 18 | User.disableLevel(message.guild.id, function (err) { 19 | if (err) return winston.info(err); 20 | message.reply(t('no-level.success-disable', {lngs:message.lang})); 21 | }); 22 | } else { 23 | User.enableLevel(message.guild.id, function (err) { 24 | if (err) return winston.info(err); 25 | message.reply(t('no-level.success-enable', {lngs:message.lang})); 26 | }); 27 | } 28 | } else { 29 | User.addServer(messageHelper.getServerObj(message, false, false), function (err) { 30 | if (err) return winston.info(err); 31 | message.reply(t('no-level.success-disable', {lngs:message.lang})); 32 | }); 33 | } 34 | } else { 35 | messageHelper.createUser(message, false, false, function (err) { 36 | if (err) return winston.info(err); 37 | message.reply(t('no-level.success-disable', {lngs:message.lang})); 38 | }); 39 | } 40 | }); 41 | } else { 42 | message.reply(t('generic.no-pm', {lngs:message.lang})); 43 | } 44 | }; 45 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'user'}; -------------------------------------------------------------------------------- /commands/disableUserPm.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 03.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var cmd = 'noPm'; 7 | var userModel = require('../DB/user'); 8 | var messageHelper = require('../utility/message'); 9 | var logger = require('../utility/logger'); 10 | var winston = logger.getT(); 11 | var execute = function (message) { 12 | if (message.guild) { 13 | userModel.findOne({id: message.author.id}, function (err, User) { 14 | if (err) return cb(err); 15 | if (User) { 16 | if (messageHelper.pmNotifications(message, User)) { 17 | User.disablePm(message.guild.id, function (err) { 18 | if (err) return winston.info(err); 19 | message.reply(t('no-pm.success-disable', {lngs:message.lang})); 20 | }); 21 | } else { 22 | User.enablePm(message.guild.id, function (err) { 23 | if (err) return winston.info(err); 24 | message.reply(t('no-pm.success-enable', {lngs:message.lang})); 25 | }); 26 | } 27 | } else { 28 | messageHelper.createUser(message, true, false, function (err) { 29 | if (err) return winston.info(err); 30 | message.reply(t('no-pm.success-disable', {lngs:message.lang})); 31 | }); 32 | } 33 | }); 34 | } else { 35 | message.reply(t('generic.no-pm', {lngs:message.lang})); 36 | } 37 | }; 38 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'user'}; -------------------------------------------------------------------------------- /commands/eatCookie.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var messageHelper = require('../utility/message'); 7 | var voice = require('../utility/voice'); 8 | var logger = require('../utility/logger'); 9 | var userModel = require('../DB/user'); 10 | var winston = logger.getT(); 11 | var cmd = 'eatCookie'; 12 | var execute = function (message) { 13 | userModel.findOne({id: message.author.id, 'servers.serverId': message.guild.id}, function (err, User) { 14 | if (err) return winston.info(err); 15 | if (User) { 16 | if (messageHelper.hasGuild(message, User)) { 17 | var clientServer = messageHelper.loadServerFromUser(message, User); 18 | if (typeof (clientServer.cookies) !== 'undefined' && clientServer.cookies > 0) { 19 | userModel.update({ 20 | id: User.id, 21 | 'servers.serverId': message.guild.id 22 | }, {$inc: {'servers.$.cookies': -1}}, function (err) { 23 | if (err) return winston.info(err); 24 | message.reply(`${t('eat-cookie.success', {lngs:message.lang, number:1})} \n http://i.giphy.com/L0nV2FkR5RpkY.gif`); 25 | }); 26 | } else { 27 | message.channel.sendMessage(t('eat-cookie.failure', {lngs:message.lang}) + ' \n http://i.giphy.com/Kf2ndcv58AepW.gif'); 28 | } 29 | } else { 30 | User.addServer(message.getServerObj(message, true, true), function (err) { 31 | if (err) return winston.info(err); 32 | }); 33 | message.channel.sendMessage(t('eat-cookie.failure', {lngs:message.lang}) + '\n http://i.giphy.com/Kf2ndcv58AepW.gif'); 34 | } 35 | } else { 36 | messageHelper.createUser(message, true, true, function (err) { 37 | if (err) return winston.info(err); 38 | message.channel.sendMessage(t('eat-cookie.failure', {lngs:message.lang}) + '\n http://i.giphy.com/Kf2ndcv58AepW.gif'); 39 | }); 40 | } 41 | }); 42 | }; 43 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'misc'}; -------------------------------------------------------------------------------- /commands/get8Ball.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 06.10.2016. 3 | */ 4 | var cmd = '8ball'; 5 | var i18nBean = require('../utility/i18nManager'); 6 | var t = i18nBean.getT(); 7 | var general = require('../utility/general'); 8 | var execute = function (message) { 9 | let content = message.content.substr(message.prefix.length + cmd.length).trim(); 10 | if (content && content !== '') { 11 | var random = general.random(0, 7); 12 | message.reply(t(`8ball.answers.${random}`, {lngs:message.lang})); 13 | } else { 14 | message.reply(t(`8ball.no-message`, {lngs:message.lang})); 15 | } 16 | }; 17 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'misc'}; -------------------------------------------------------------------------------- /commands/getAbout.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var cmd = 'about'; 5 | var i18nBean = require('../utility/i18nManager'); 6 | var t = i18nBean.getT(); 7 | var config = require('../config/main.json'); 8 | var version = require('../package.json').version; 9 | var AsciiTable = require('ascii-table'); 10 | var execute = function (message) { 11 | let table = new AsciiTable(); 12 | table 13 | .addRow(t('generic.version'), version) 14 | .addRow(t('generic.author'), 'Wolke#6746') 15 | .addRow(t('generic.lib'), 'Discord.js V10.0.1'); 16 | message.channel.sendCode('', table.toString()); 17 | }; 18 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'stats'}; -------------------------------------------------------------------------------- /commands/getBotInfo.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var cmd = 'bot'; 7 | var moment = require('moment'); 8 | var AsciiTable = require('ascii-table'); 9 | var Discord = require('discord.js'); 10 | var logger = require('../utility/logger'); 11 | var winston = logger.getT(); 12 | var execute = function (message) { 13 | let shardUtil = new Discord.ShardClientUtil(message.botUser); 14 | if (message.guild) { 15 | let users = 0; 16 | let channels = 0; 17 | let voice_s = 0; 18 | let voice = 0; 19 | let guilds = 0; 20 | let table = new AsciiTable(); 21 | let duration = moment.duration(message.botUser.uptime); 22 | shardUtil.broadcastEval('this.guilds.size').then(res => { 23 | winston.info(res); 24 | res = res.reduce((a, b) => a + b); 25 | guilds = res; 26 | shardUtil.broadcastEval('var x=0;this.guilds.map(g => {x += g.memberCount});x;').then(res => { 27 | winston.info(res); 28 | res = res.reduce((a, b) => a + b); 29 | users = res; 30 | shardUtil.broadcastEval('var x=0;this.guilds.map(g => {x += g.channels.size});x;').then(res => { 31 | winston.info(res); 32 | res = res.reduce((a, b) => a + b); 33 | channels = res; 34 | shardUtil.broadcastEval('var x=0;this.guilds.map(g => {g.voiceConnection ? x += 1 : x});x;').then(res => { 35 | winston.info(res); 36 | res = res.reduce((a, b) => a + b); 37 | voice = res; 38 | let averageUsers = users / guilds; 39 | let averageChannels = channels / guilds; 40 | var users_s = 0; 41 | var channels_s = 0; 42 | message.botUser.guilds.map(g => { 43 | g.voiceConnection ? voice_s += 1 : voice_s; 44 | channels_s += g.channels.size; 45 | users_s += g.memberCount; 46 | }); 47 | table 48 | .addRow(t('bot-info.uptime', {lngs: message.lang}), duration.humanize()) 49 | .addRow(t('bot-info.guilds', {lngs: message.lang}), guilds) 50 | .addRow(t('bot-info.channels', {lngs: message.lang}), channels) 51 | .addRow(t('bot-info.users', {lngs: message.lang}), users) 52 | .addRow(t('bot-info.avg-users', {lngs: message.lang}), averageUsers.toFixed(2)) 53 | .addRow(t('bot-info.avg-channels', {lngs: message.lang}), averageChannels.toFixed(2)) 54 | .addRow(t('bot-info.guilds-s', {lngs: message.lang}), message.botUser.guilds.size) 55 | .addRow(t('bot-info.channels-s', {lngs: message.lang}), channels_s) 56 | .addRow(t('bot-info.users-s', {lngs: message.lang}), users_s) 57 | .addRow(t('bot-info.voice', {lngs: message.lang}), voice_s) 58 | .addRow(t('bot-info.voice', {lngs: message.lang}), voice) 59 | .addRow(t('bot-info.shard', {lngs: message.lang}), `${parseInt(message.shard_id) + 1}/${message.shard_count}`); 60 | message.channel.sendMessage(`\n\`\`\`${table.toString()}\`\`\``); 61 | }).catch(winston.error); 62 | }).catch(winston.error); 63 | }).catch(winston.error); 64 | }).catch(winston.error); 65 | } 66 | }; 67 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'stats'}; -------------------------------------------------------------------------------- /commands/getCuddle.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var cmd = 'cuddle'; 5 | var path = require('path'); 6 | var logger = require('../utility/logger'); 7 | var winston = logger.getT(); 8 | var request = require("request"); 9 | var execute = function (message) { 10 | request.get('https://rra.ram.moe/i/r?type=cuddle', (err, result, body) => { 11 | if (err) return winston.error(err); 12 | let parsedBody = JSON.parse(body); 13 | message.channel.sendMessage(`https://rra.ram.moe${parsedBody.path}`); 14 | }); 15 | }; 16 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'misc'}; -------------------------------------------------------------------------------- /commands/getE621Image.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var messageHelper = require('../utility/message'); 7 | var request = require('request'); 8 | var general = require('../utility/general'); 9 | var logger = require('../utility/logger'); 10 | var winston = logger.getT(); 11 | var cmd = 'e621'; 12 | var execute = function (message) { 13 | let messageSplit = message.content.split(' '); 14 | if (message.guild) { 15 | messageHelper.checkNsfw(message, function (err) { 16 | if (err) return message.reply(t('nsfw-images.no-nsfw-channel', { 17 | lngs: message.lang, 18 | prefix: message.prefix 19 | })); 20 | e621(message, messageSplit); 21 | }); 22 | } else { 23 | e621(message, messageSplit); 24 | } 25 | }; 26 | var e621 = function (message,messageSplit) { 27 | var messageSearch = ""; 28 | for (var i = 1 ; i < messageSplit.length; i++) { 29 | if (i === 1) { 30 | messageSearch = messageSplit[i]; 31 | } else { 32 | messageSearch = messageSearch + "+" + messageSplit[i]; 33 | } 34 | } 35 | let options = { 36 | url:'https://e621.net/post/index.json?limit=200&tags=' + messageSearch, 37 | headers: { 38 | 'User-Agent': 'Rem Discordbot https://github.com/DasWolke/discordbot' 39 | } 40 | }; 41 | request.get(options,function (error, response, body) { 42 | if (error) { 43 | message.reply(t('generic.error', {lngs:message.lang})); 44 | } 45 | if (!error && response.statusCode == 200) { 46 | try { 47 | body = JSON.parse(body); 48 | } catch (e) { 49 | winston.info(e.message); 50 | } 51 | if (typeof (body) !== 'undefined' && body.length > 0) { 52 | var random = general.random(0, body.length); 53 | random = Math.floor(random); 54 | if (typeof(body[random]) !== 'undefined' && typeof (body[random].file_url) !== 'undefined') { 55 | message.channel.sendMessage(body[random].file_url, function (err, message) { 56 | if (err) return winston.info(err); 57 | }); 58 | } else { 59 | 60 | } 61 | } else { 62 | message.reply(t('nsfw-images.nothing-found', {lngs:message.lang, tags:messageSearch.replace(/\+/g, " ")})); 63 | } 64 | } 65 | }); 66 | }; 67 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'nsfw'}; -------------------------------------------------------------------------------- /commands/getEggplant.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var cmd = 'eggplant'; 5 | var execute = function (message) { 6 | message.channel.sendMessage(":eggplant: "); 7 | }; 8 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'eastereggs'}; -------------------------------------------------------------------------------- /commands/getFlip.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var cmd = 'flip'; 5 | var execute = function (message) { 6 | message.channel.sendMessage("(╯°□°)╯︵ ┻━┻"); 7 | }; 8 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'misc'}; -------------------------------------------------------------------------------- /commands/getGarfieldComic.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 06.10.2016. 3 | */ 4 | var cmd = 'garfield'; 5 | var general = require('../utility/general'); 6 | var logger = require('../utility/logger'); 7 | var winston = logger.getT(); 8 | var moment = require('moment'); 9 | var execute = function (message) { 10 | let year = general.random(1990, 2016); 11 | let day = general.random(0, 366); 12 | let date = moment().year(year).dayOfYear(day); 13 | let dateFormat = date.format('YYYY-MM-DD'); 14 | let dateYear = date.year(); 15 | message.channel.sendMessage(`https://d1ejxu6vysztl5.cloudfront.net/comics/garfield/${dateYear}/${dateFormat}.gif`).then(messageSent => { 16 | 17 | }).catch(winston.info); 18 | }; 19 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'misc'}; -------------------------------------------------------------------------------- /commands/getGithubLink.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var cmd = 'git'; 5 | var execute = function (message) { 6 | message.reply('https://github.com/DasWolke/discordbot'); 7 | }; 8 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'support'}; -------------------------------------------------------------------------------- /commands/getGtnImage.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var messageHelper = require('../utility/message'); 7 | var request = require('request'); 8 | var logger = require('../utility/logger'); 9 | var winston = logger.getT(); 10 | var cmd = 'gtn'; 11 | var execute = function (message) { 12 | if (message.guild) { 13 | messageHelper.checkNsfw(message, function (err) { 14 | if (err) return message.reply(t('nsfw-images.no-nsfw-channel', { 15 | lngs: message.lang, 16 | prefix: message.prefix 17 | })); 18 | gtn(message); 19 | }); 20 | } else { 21 | gtn(message); 22 | } 23 | }; 24 | var gtn = function (message) { 25 | request.get('https://rra.ram.moe/i/r?type=nsfw-gtn&nsfw=true', (err, result, body) => { 26 | if (err) return winston.error(err); 27 | let parsedBody = JSON.parse(body); 28 | message.channel.sendMessage(`https://rra.ram.moe${parsedBody.path}`); 29 | }); 30 | }; 31 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'nsfw'}; -------------------------------------------------------------------------------- /commands/getHelp.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var MessageCollector = require('discord.js').MessageCollector; 6 | var t = i18nBean.getT(); 7 | var cmd = 'help'; 8 | var logger = require('../utility/logger'); 9 | var winston = logger.getT(); 10 | var messageHelper = require("../utility/message.js"); 11 | var cmdManager = require('../utility/cmdManager'); 12 | var commands = cmdManager.getCommands(); 13 | var config = require('../config/main.json'); 14 | var execute = function (message) { 15 | let categories = []; 16 | let messageSplit = message.content.split(' ').slice(1); 17 | let pre = message.prefix; 18 | for (var command in commands) { 19 | if (commands.hasOwnProperty(command)) { 20 | var cmd = commands[command]; 21 | if (checkCat(cmd.cat, categories)) { 22 | categories = pushCat(cmd, categories); 23 | } else { 24 | categories.push({name: cmd.cat, commands: [cmd]}); 25 | } 26 | } 27 | } 28 | if (messageSplit.length > 0) { 29 | let temp = categories; 30 | if (message.author.id !== config.owner_id) { 31 | temp = temp.slice(1, 9); 32 | } 33 | let number = 0; 34 | try { 35 | number = parseInt(messageSplit[0]); 36 | } catch (e) { 37 | return message.reply(t('generic.whole-num', {lngs: message.lang})); 38 | } 39 | if (isNaN(number)) { 40 | return message.reply(t('generic.nan', {lngs: message.lang})); 41 | } 42 | if (number < 1) { 43 | return message.reply(t('help.no-cat', {lngs: message.lang})); 44 | } 45 | if (number <= temp.length) { 46 | let data = temp[number - 1].commands; 47 | let reply = `${t(`help.${temp[number - 1].name}`, {lngs: message.lang})}\n`; 48 | reply = reply + `\`\`\``; 49 | for (let i = 0; i < data.length; ++i) { 50 | reply = reply + `${'!w.'}${data[i].cmd} : ${t(`help.${data[i].cmd}`, { 51 | lngs: message.lang, 52 | languages: buildLang(message.langList) 53 | })}\n`; 54 | } 55 | if (temp[number - 1].name === 'moderation') { 56 | reply = reply + `${message.prefix}s gr : ${t(`help.gr`, { 57 | lngs: message.lang, 58 | interpolation: {prefix: '45a45sd'} 59 | })}\n`; 60 | reply = reply + `${message.prefix}s fw : ${t(`help.fw`, { 61 | lngs: message.lang, 62 | interpolation: {prefix: '45a45sd'} 63 | })}`; 64 | } 65 | reply = reply + (`\`\`\``); 66 | message.author.sendMessage(reply).then(msg => { 67 | 68 | }); 69 | } else { 70 | return message.reply(t('help.no-cat', {lngs: message.lang})); 71 | } 72 | } else { 73 | let reply = `${t('help.intro_2', {lngs: message.lang})} ${message.botUser.user.username}, ${t('help.intro', { 74 | lngs: message.lang, 75 | pre: "!w." 76 | })} 77 | \`\`\``; 78 | let temp = categories; 79 | if (message.author.id !== config.owner_id) { 80 | temp = temp.slice(1, 9); 81 | } 82 | for (let i = 0; i < temp.length; i++) { 83 | reply = reply + `${i + 1} ${t(`help.${temp[i].name}`, {lngs: message.lang})}\n` 84 | } 85 | reply = reply + `${t('generic.cancel', {lngs: message.lang})}`; 86 | reply = reply + `\`\`\``; 87 | message.author.sendMessage(reply).then(msg => { 88 | if (message.guild) { 89 | message.reply(t('help.helpReply', {lngs: message.lang, pre: message.prefix})); 90 | } 91 | msg.prefix = message.prefix; 92 | msg.lang = message.lang; 93 | msg.dbServer = message.dbServer; 94 | msg.langList = message.langList; 95 | input(msg, temp) 96 | }); 97 | } 98 | }; 99 | function buildLang(list) { 100 | let i = list.length; 101 | let answer = ""; 102 | while (i--) { 103 | answer = answer + `${list[i]}|`; 104 | } 105 | return answer; 106 | } 107 | function checkCat(cat, list) { 108 | let i = list.length; 109 | while (i--) { 110 | if (cat === list[i].name) { 111 | return true; 112 | } 113 | } 114 | return false; 115 | } 116 | function pushCat(cmd, list) { 117 | let i = list.length; 118 | while (i--) { 119 | if (cmd.cat === list[i].name) { 120 | list[i].commands.push(cmd); 121 | } 122 | } 123 | return list; 124 | } 125 | var input = function (message, Categories) { 126 | let collector = new MessageCollector(message.channel, messageHelper.filterSelection, {time: 1000 * 30}); 127 | collector.on('message', (msg) => { 128 | let number = 10; 129 | try { 130 | number = parseInt(msg.content); 131 | } catch (e) { 132 | 133 | } 134 | if (msg.content.startsWith(message.prefix)) { 135 | collector.stop(); 136 | } 137 | if (msg.content === 'c') { 138 | collector.stop(); 139 | } 140 | if (!isNaN(number) && number <= Categories.length) { 141 | collector.stop(); 142 | let data = Categories[number - 1].commands; 143 | let reply = `${t(`help.${Categories[number - 1].name}`, {lngs: message.lang})}\n`; 144 | reply = reply + `\`\`\``; 145 | for (let i = 0; i < data.length; ++i) { 146 | reply = reply + `${message.prefix}${data[i].cmd} : ${t(`help.${data[i].cmd}`, { 147 | lngs: message.lang, 148 | languages: buildLang(message.langList) 149 | })}\n`; 150 | } 151 | if (Categories[number - 1].name === 'moderation') { 152 | reply = reply + `${message.prefix}s gr : ${t(`help.gr`, { 153 | lngs: message.lang, 154 | interpolation: {prefix: '45a45sd'} 155 | })}\n`; 156 | reply = reply + `${message.prefix}s fw : ${t(`help.fw`, { 157 | lngs: message.lang, 158 | interpolation: {prefix: '45a45sd'} 159 | })}`; 160 | } 161 | reply = reply + (`\`\`\``); 162 | message.channel.sendMessage(reply).then(msg => { 163 | 164 | }); 165 | } 166 | }); 167 | }; 168 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'support'}; -------------------------------------------------------------------------------- /commands/getHug.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var cmd = 'hug'; 5 | var lewd = require('../config/lewd.json'); 6 | var path = require('path'); 7 | var logger = require('../utility/logger'); 8 | var winston = logger.getT(); 9 | var request = require("request"); 10 | var execute = function (message) { 11 | request.get('https://rra.ram.moe/i/r?type=hug', (err, result, body) => { 12 | if (err) return winston.error(err); 13 | let parsedBody = JSON.parse(body); 14 | message.channel.sendMessage(`https://rra.ram.moe${parsedBody.path}`); 15 | }); 16 | }; 17 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'misc'}; -------------------------------------------------------------------------------- /commands/getInfo.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var cmd = 'info'; 7 | var logger = require('../utility/logger'); 8 | var winston = logger.getT(); 9 | var AsciiTable = require('ascii-table'); 10 | var messageHelper = require('../utility/message'); 11 | var execute = function (message) { 12 | if (message.mentions.users.size > 0) { 13 | let user = message.mentions.users.first(); 14 | message.guild.fetchMember(user).then(member => { 15 | let table = new AsciiTable(); 16 | let WolkeBot = messageHelper.hasWolkeBot(message, member); 17 | table 18 | .addRow(t('server-info.id', {lngs: message.lang}), user.id) 19 | .addRow('WolkeBot', WolkeBot) 20 | .addRow(t('server-info.name', {lngs: message.lang}), user.username) 21 | .addRow('Avatar', user.avatarURL) 22 | .addRow(t('server-info.creation', {lngs: message.lang}), user.createdAt.toDateString()) 23 | .addRow('Bot', user.bot); 24 | message.reply(`\n\`\`\`${table.toString()}\`\`\``); 25 | }).catch(err => winston.error(err)); 26 | } else { 27 | if (message.guild) { 28 | let table = new AsciiTable(); 29 | let textChannels = message.guild.channels.findAll('type', 'text').length; 30 | let voiceChannels = message.guild.channels.findAll('type', 'voice').length; 31 | table 32 | .addRow(t('server-info.id', {lngs: message.lang}), message.guild.id) 33 | .addRow(t('server-info.name', {lngs: message.lang}), message.guild.name) 34 | .addRow(t('server-info.member', {lngs: message.lang}), message.guild.memberCount) 35 | .addRow(t('server-info.text', {lngs: message.lang}), textChannels) 36 | .addRow(t('server-info.voice', {lngs: message.lang}), voiceChannels) 37 | .addRow(t('server-info.creation', {lngs: message.lang}), message.guild.createdAt.toDateString()) 38 | .addRow(t('server-info.region', {lngs: message.lang}), message.guild.region) 39 | .addRow(t('server-info.owner', {lngs: message.lang}), `${message.guild.owner.user.username}#${message.guild.owner.user.discriminator}`) 40 | .addRow(t('server-info.roles', {lngs: message.lang}), message.guild.roles.size); 41 | message.reply(`\n\`\`\`${table.toString()}\`\`\``); 42 | } else { 43 | message.reply(t('generic.no-pm', {lngs: message.lang})); 44 | } 45 | } 46 | }; 47 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'stats'}; 48 | //uwu -------------------------------------------------------------------------------- /commands/getJay.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | //This is a easteregg :D 5 | var i18nBean = require('../utility/i18nManager'); 6 | var t = i18nBean.getT(); 7 | var cmd = 'jay'; 8 | var execute = function (message) { 9 | message.reply(t('eastereggs.jay', {lngs:message.lang})); 10 | }; 11 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'eastereggs'}; -------------------------------------------------------------------------------- /commands/getKonachanImage.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var messageHelper = require('../utility/message'); 7 | var request = require('request'); 8 | var general = require('../utility/general'); 9 | var logger = require('../utility/logger'); 10 | var winston = logger.getT(); 11 | var cmd = 'kona'; 12 | var execute = function (message) { 13 | let messageSplit = message.content.split(' '); 14 | if (message.guild) { 15 | messageHelper.checkNsfw(message, function (err) { 16 | if (err) return message.reply(t('nsfw-images.no-nsfw-channel', { 17 | lngs: message.lang, 18 | prefix: message.prefix 19 | })); 20 | konachan(message, messageSplit); 21 | }); 22 | } else { 23 | konachan(message, messageSplit); 24 | } 25 | }; 26 | var konachan = function (message, messageSplit) { 27 | 28 | let msgSearch = ""; 29 | let searchOrig = ""; 30 | for (var i = 1; i < messageSplit.length; i++) { 31 | if (i === 1) { 32 | searchOrig = messageSplit[i]; 33 | } else { 34 | searchOrig = searchOrig + "+" + messageSplit[i]; 35 | } 36 | } 37 | msgSearch = 'order:score rating:questionableplus ' + searchOrig; 38 | request.get('https://konachan.com/post.json', { 39 | qs: { 40 | limit: 200, 41 | tags: msgSearch 42 | } 43 | }, function (error, response, body) { 44 | if (error) { 45 | message.reply('a error occured!'); 46 | } 47 | if (!error && response.statusCode == 200) { 48 | try { 49 | body = JSON.parse(body); 50 | } catch (e) { 51 | winston.info(e.getMessage()); 52 | } 53 | if (typeof (body) !== 'undefined' && body.length > 0) { 54 | var random = general.random(0, body.length); 55 | random = Math.floor(random); 56 | if (typeof(body[random]) !== 'undefined' && typeof (body[random].file_url) !== 'undefined') { 57 | message.channel.sendMessage(`http://${body[random].file_url.substring(2)}`, function (err, message) { 58 | if (err) return winston.info(err); 59 | }); 60 | } else { 61 | 62 | } 63 | } else { 64 | message.reply(t('nsfw-images.nothing-found', { 65 | lngs: message.lang, 66 | tags: searchOrig 67 | })); 68 | } 69 | } 70 | }); 71 | }; 72 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'nsfw'}; -------------------------------------------------------------------------------- /commands/getLeaderboard.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var cmd = 'rank'; 7 | var logger = require('../utility/logger'); 8 | var winston = logger.getT(); 9 | var execute = function (message) { 10 | if (message.guild) { 11 | message.reply(t('rank', {lngs:message.lang, interpolation: {escape: false}, link:`https://bot.ram.moe/l/${message.guild.id}`})); 12 | } else { 13 | message.reply(t('generic.no-pm', {lngs:message.lang})); 14 | } 15 | }; 16 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'user'}; -------------------------------------------------------------------------------- /commands/getLenny.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var cmd = 'lenny'; 5 | var execute = function (message) { 6 | message.channel.sendMessage("( ͡° ͜ʖ ͡°)"); 7 | }; 8 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'misc'}; -------------------------------------------------------------------------------- /commands/getLevel.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 03.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var cmd = 'level'; 7 | var serverModel = require('../DB/server'); 8 | var logger = require('../utility/logger'); 9 | var winston = logger.getT(); 10 | var messageHelper = require('../utility/message'); 11 | var execute = function (message) { 12 | if (message.guild) { 13 | serverModel.findOne({id: message.guild.id}, function (err, Server) { 14 | if (err) return winston.info(err); 15 | if (Server && typeof (Server.levelEnabled) === 'undefined' || Server && Server.levelEnabled || !Server) { 16 | messageHelper.getLevel(message, (err, result) => { 17 | if (err) return winston.info(err); 18 | message.reply(t('level.result', { 19 | lngs: message.lang, 20 | level: result.level, 21 | current: parseInt(result.xp), 22 | needed: parseInt(messageHelper.calcXpNeeded(result)), 23 | total: result.totalXp 24 | })); 25 | }); 26 | } else { 27 | message.reply(t('level.disabled', {lngs: message.lang})); 28 | } 29 | }); 30 | } else { 31 | message.reply(t('generic.no-pm', {lngs: message.lang})); 32 | } 33 | }; 34 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'user'}; 35 | //uwu -------------------------------------------------------------------------------- /commands/getLewdImage.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var cmd = 'lewd'; 5 | var lewd = require('../config/lewd.json'); 6 | var path = require('path'); 7 | var logger = require('../utility/logger'); 8 | var winston = logger.getT(); 9 | var request = require("request"); 10 | var execute = function (message) { 11 | request.get('https://rra.ram.moe/i/r?type=lewd', (err, result, body) => { 12 | if (err) return winston.error(err); 13 | let parsedBody = JSON.parse(body); 14 | message.channel.sendMessage(`https://rra.ram.moe${parsedBody.path}`); 15 | }); 16 | }; 17 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'misc'}; -------------------------------------------------------------------------------- /commands/getMagic.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | //This is n Easteregg :D 5 | var i18nBean = require('../utility/i18nManager'); 6 | var t = i18nBean.getT(); 7 | var cmd = 'imMagic'; 8 | var execute = function (message) { 9 | message.reply(t('eastereggs.magic', {lngs:message.lang})); 10 | }; 11 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'eastereggs'}; -------------------------------------------------------------------------------- /commands/getMemes.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var cmd = 'memes'; 5 | var request = require('request'); 6 | var logger = require('../utility/logger'); 7 | var winston = logger.getT(); 8 | var execute = function (message) { 9 | request.get('https://memegen.link/api', (err, result ,body) => { 10 | winston.info(body); 11 | }); 12 | }; 13 | module.exports = {cmd: cmd, accessLevel: 3, exec: execute, cat: 'wip'}; -------------------------------------------------------------------------------- /commands/getPpOfMap.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var cmd = 'pp'; 7 | var logger = require('../utility/logger'); 8 | var winston = logger.getT(); 9 | var osuHelper = require('../utility/osu'); 10 | var execute = function (message) { 11 | osuHelper.calcPP(message, (err, result) => { 12 | if (err) { 13 | switch (err.type) { 14 | case "api-body": 15 | message.reply(t('pp.err.api-body', {lngs:message.lang})); 16 | return; 17 | case "osu-api": 18 | message.reply(t('pp.err.osu-api', {lngs:message.lang})); 19 | return; 20 | case "unvalid-link": 21 | message.reply(t('pp.err.unvalid-link', {lngs:message.lang})); 22 | return; 23 | case "no-link": 24 | message.reply(t('pp.err.no-link', {lngs:message.lang})); 25 | return; 26 | default: 27 | return; 28 | } 29 | } 30 | message.reply(t('pp.success', { 31 | lngs: message.lang, 32 | interpolation: {escape: false}, 33 | artist: result.beatmap.artist, 34 | title: result.beatmap.title, 35 | version: result.body.version, 36 | accuracy: result.body.acc, 37 | pp: result.body.pp, 38 | mods: result.body.mods 39 | })); 40 | }); 41 | }; 42 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'misc'}; -------------------------------------------------------------------------------- /commands/getR34Image.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var messageHelper = require('../utility/message'); 7 | var X2 = require('x2js'); 8 | var x2js = new X2(); 9 | var request = require('request'); 10 | var general = require('../utility/general'); 11 | var logger = require('../utility/logger'); 12 | var winston = logger.getT(); 13 | var cmd = 'r34'; 14 | var execute = function (message) { 15 | let messageSplit = message.content.split(' '); 16 | if (message.guild) { 17 | messageHelper.checkNsfw(message, function (err) { 18 | if (err) return message.reply(t('nsfw-images.no-nsfw-channel', { 19 | lngs: message.lang, 20 | prefix: message.prefix 21 | })); 22 | r34(message, messageSplit); 23 | }); 24 | } else { 25 | r34(message, messageSplit); 26 | } 27 | }; 28 | var r34 = function (message, messageSplit) { 29 | var messageSearch = ""; 30 | for (var i = 1; i < messageSplit.length; i++) { 31 | if (i === 1) { 32 | messageSearch = messageSplit[i]; 33 | } else { 34 | messageSearch = messageSearch + "+" + messageSplit[i]; 35 | } 36 | } 37 | request.get('https://rule34.xxx/index.php?page=dapi&s=post&q=index&tags=' + messageSearch, function (error, response, body) { 38 | if (error) { 39 | message.reply('a error occured!'); 40 | } 41 | if (!error && response.statusCode == 200) { 42 | var jsonObj = x2js.xml2js(body); 43 | if (typeof (jsonObj.posts.post) !== 'undefined') { 44 | var random = general.random(0, jsonObj.posts.post.length); 45 | random = Math.floor(random); 46 | if (typeof(jsonObj.posts.post[random]) !== 'undefined' && typeof (jsonObj.posts.post[random]._file_url) !== 'undefined') { 47 | message.channel.sendMessage('http:' + jsonObj.posts.post[random]._file_url, function (err, message) { 48 | if (err) return winston.info(err); 49 | }); 50 | } else { 51 | 52 | } 53 | } else { 54 | message.reply(t('nsfw-images.nothing-found', {lngs:message.lang, tags:messageSearch.replace(/\+/g, " ")})); 55 | } 56 | } 57 | }); 58 | }; 59 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'nsfw'}; -------------------------------------------------------------------------------- /commands/getRandomCat.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 06.10.2016. 3 | */ 4 | var cmd = 'cat'; 5 | var request = require('request'); 6 | var logger = require('../utility/logger'); 7 | var winston = logger.getT(); 8 | var execute = function (message) { 9 | request.get('http://random.cat/meow', (err, response, body) => { 10 | if (err) return winston.info(err); 11 | let parsedBody = JSON.parse(body); 12 | let url = parsedBody.file.replace('\\', 'g'); 13 | message.channel.sendMessage(url); 14 | }); 15 | }; 16 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'misc'}; -------------------------------------------------------------------------------- /commands/getRandomNumber.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var cmd = 'roll'; 7 | var logger = require('../utility/logger'); 8 | var winston = logger.getT(); 9 | var generalHelper = require('../utility/general'); 10 | var execute = function (message) { 11 | let messageSplit = message.content.split(' '); 12 | let number = 10; 13 | if (typeof (messageSplit[1]) !== 'undefined') { 14 | try { 15 | number = parseInt(messageSplit[1]); 16 | } catch (e) { 17 | return message.reply(t('generic.whole-num', {lngs: message.lang})); 18 | } 19 | if (isNaN(number)) { 20 | return message.reply(t('generic.nan', {lngs: message.lang})); 21 | } 22 | if (number < 1) { 23 | return message.reply(t('roll.negative', {number: number, lngs: message.lang})); 24 | } 25 | } 26 | message.reply(t('roll.success', {first: generalHelper.random(1, number), second: number, lngs: message.lang})); 27 | }; 28 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'misc'}; -------------------------------------------------------------------------------- /commands/getRemImage.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var cmd = 'rem'; 5 | var path = require('path'); 6 | var logger = require('../utility/logger'); 7 | var winston = logger.getT(); 8 | var request = require("request"); 9 | var execute = function (message) { 10 | request.get('https://rra.ram.moe/i/r?type=rem', (err, result, body) => { 11 | if (err) return winston.error(err); 12 | let parsedBody = JSON.parse(body); 13 | message.channel.sendMessage(`https://rra.ram.moe${parsedBody.path}`); 14 | }); 15 | }; 16 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'misc'}; -------------------------------------------------------------------------------- /commands/getShrug.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var cmd = 'shrug'; 5 | var execute = function (message) { 6 | message.channel.sendMessage("¯\\_(ツ)_/¯"); 7 | }; 8 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'misc'}; -------------------------------------------------------------------------------- /commands/getSlap.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var cmd = 'slap'; 5 | var lewd = require('../config/lewd.json'); 6 | var path = require('path'); 7 | var logger = require('../utility/logger'); 8 | var winston = logger.getT(); 9 | var request = require("request"); 10 | var execute = function (message) { 11 | request.get('https://rra.ram.moe/i/r?type=slap', (err, result, body) => { 12 | if (err) return winston.error(err); 13 | let parsedBody = JSON.parse(body); 14 | message.channel.sendMessage(`https://rra.ram.moe${parsedBody.path}`); 15 | }); 16 | }; 17 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'misc'}; -------------------------------------------------------------------------------- /commands/getSupportLink.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var cmd = 'bug'; 5 | var i18nBean = require('../utility/i18nManager'); 6 | var t = i18nBean.getT(); 7 | var config = require('../config/main.json'); 8 | var execute = function (message) { 9 | if (message.guild) { 10 | message.channel.sendMessage(':ok_hand: '); 11 | } 12 | message.author.sendMessage(t('bug', {lngs:message.lang,link:'https://discord.gg/vX96Zz8', interpolation: {escape: false}})); 13 | }; 14 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'support'}; -------------------------------------------------------------------------------- /commands/getTopGuilds.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var cmd = 'top'; 5 | var AsciiTable = require('ascii-table'); 6 | let _ = require('lodash'); 7 | var execute = function (message) { 8 | let easyGuild = []; 9 | let table = new AsciiTable(); 10 | message.botUser.guilds.map((guild) => { 11 | let users = guild.members.filter((member) => { 12 | return !member.user.bot 13 | }); 14 | easyGuild.push({ 15 | name: guild.name, 16 | size: users.size, 17 | memberCount: guild.memberCount, 18 | withBots: guild.memberCount 19 | }); 20 | }); 21 | let guilds = _.sortBy(easyGuild, 'size'); 22 | guilds = _.reverse(guilds); 23 | guilds = guilds.slice(0, 10); 24 | for (var i = 0; i < guilds.length; i++) { 25 | table.addRow(i + 1, guilds[i].name, guilds[i].size, `Bots:${guilds[i].withBots - guilds[i].size}`, `C:${guilds[i].memberCount}`); 26 | } 27 | message.reply(`\n\`\`\`${table.toString()}\`\`\``); 28 | }; 29 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'stats'}; -------------------------------------------------------------------------------- /commands/getTrigger.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var cmd = 'trig'; 5 | var path = require('path'); 6 | var logger = require('../utility/logger'); 7 | var winston = logger.getT(); 8 | var request = require("request"); 9 | var execute = function (message) { 10 | request.get('https://rra.ram.moe/i/r?type=triggered', (err, result, body) => { 11 | if (err) return winston.error(err); 12 | let parsedBody = JSON.parse(body); 13 | message.channel.sendMessage(`https://rra.ram.moe${parsedBody.path}`); 14 | }); 15 | }; 16 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'misc'}; -------------------------------------------------------------------------------- /commands/getWtfLink.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var cmd = 'wtf'; 5 | var execute = function (message) { 6 | message.reply("http://wtf.watchon.io"); 7 | }; 8 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'eastereggs'}; -------------------------------------------------------------------------------- /commands/getYandereImage.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var messageHelper = require('../utility/message'); 7 | var request = require('request'); 8 | var general = require('../utility/general'); 9 | var logger = require('../utility/logger'); 10 | var winston = logger.getT(); 11 | var cmd = 'yandere'; 12 | var execute = function (message) { 13 | let messageSplit = message.content.split(' '); 14 | if (message.guild) { 15 | messageHelper.checkNsfw(message, function (err) { 16 | if (err) return message.reply(t('nsfw-images.no-nsfw-channel', { 17 | lngs: message.lang, 18 | prefix: message.prefix 19 | })); 20 | yandere(message, messageSplit); 21 | }); 22 | } else { 23 | yandere(message, messageSplit); 24 | } 25 | }; 26 | var yandere = function (message, messageSplit) { 27 | var messageSearch = ""; 28 | for (var i = 1; i < messageSplit.length; i++) { 29 | if (i === 1) { 30 | messageSearch = messageSplit[i]; 31 | } else { 32 | messageSearch = messageSearch + "+" + messageSplit[i]; 33 | } 34 | } 35 | messageSearch += '+%20order%3Ascore+%20rating:explicit'; 36 | request.get('https://yande.re/post.json?limit=500&tags=' + messageSearch, function (error, response, body) { 37 | if (error) { 38 | message.reply('a error occured!'); 39 | } 40 | if (!error && response.statusCode == 200) { 41 | try { 42 | body = JSON.parse(body); 43 | } catch (e) { 44 | winston.info(e.getMessage()); 45 | } 46 | if (typeof (body) !== 'undefined' && body.length > 0) { 47 | var random = general.random(0, body.length); 48 | random = Math.floor(random); 49 | if (typeof(body[random]) !== 'undefined' && typeof (body[random].file_url) !== 'undefined') { 50 | message.channel.sendMessage(body[random].file_url, function (err, message) { 51 | if (err) return winston.info(err); 52 | }); 53 | } else { 54 | 55 | } 56 | } else { 57 | message.reply(t('nsfw-images.nothing-found', {lngs:message.lang, tags:messageSearch.replace(/\+/g, " ")})); 58 | } 59 | } 60 | }); 61 | }; 62 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'nsfw'}; -------------------------------------------------------------------------------- /commands/joinVoice.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var messageHelper = require('../utility/message'); 5 | var voice = require('../utility/voice'); 6 | var logger = require('../utility/logger'); 7 | var winston = logger.getT(); 8 | var i18nBean = require('../utility/i18nManager'); 9 | var t = i18nBean.getT(); 10 | var cmd = 'voice'; 11 | var execute = function (message) { 12 | if (message.guild && message.member.voiceChannel && !message.guild.voiceConnection || message.guild && message.member.voiceChannel && messageHelper.hasWolkeBot(message)) { 13 | message.member.voiceChannel.join().then(connection => { 14 | message.channel.sendMessage(`${t('joinVoice.join', {lngs:message.lang})} ${message.author}`); 15 | voice.saveVoice(message.member.voiceChannel).then(() => { 16 | winston.info(`Saved Voice of Guild ${message.guild.name}`); 17 | }).catch(winston.warn); 18 | voice.startQueue(message); 19 | }).catch(err => { 20 | winston.warn(err); 21 | message.reply(t('joinVoice.error', {lngs:message.lang})) 22 | }); 23 | } else { 24 | if (!message.guild.voiceConnection) { 25 | message.reply(t('joinVoice.no-voice', {lngs:message.lang})); 26 | } else { 27 | message.reply(t('joinVoice.already-voice', {lngs:message.lang})) 28 | } 29 | } 30 | }; 31 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'music'}; -------------------------------------------------------------------------------- /commands/kickUser.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var messageHelper = require('../utility/message'); 7 | var voice = require('../utility/voice'); 8 | var logger = require('../utility/logger'); 9 | var winston = logger.getT(); 10 | var cmd = 'kick'; 11 | var execute = function (message) { 12 | if (message.guild && messageHelper.hasWolkeBot(message)) { 13 | let user = message.mentions.users.first(); 14 | if (user.id !== message.botUser.user.id) { 15 | if (user) { 16 | message.guild.fetchMember(user).then(member => { 17 | if (member.id !== message.guild.owner.id && !messageHelper.hasWolkeBot(message, member)) { 18 | member.kick().then(member => { 19 | message.reply(t('kick.success', {user:member.user.username,lngs: message.lang})); 20 | }).catch(err => { 21 | if (err.response.statusCode === 403) { 22 | message.reply(t('kick.privilege', {user:member.user.username,lngs: message.lang})); 23 | } else { 24 | message.reply(t('kick.err', {user:member.user.username,lngs: message.lang})); 25 | } 26 | }); 27 | } else { 28 | message.reply(t('kick.perms', {lngs: message.lang})); 29 | } 30 | }).catch(winston.info); 31 | } else { 32 | message.reply(t('kick.no-mention', {lngs: message.lang})); 33 | } 34 | } else { 35 | message.reply(t('kick.self', {lngs: message.lang})); 36 | } 37 | } else { 38 | message.reply(t('generic.no-permission', {lngs: message.lang})); 39 | } 40 | }; 41 | module.exports = {cmd: cmd, accessLevel: 1, exec: execute, cat: 'moderation'}; -------------------------------------------------------------------------------- /commands/leaveVoice.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var messageHelper = require('../utility/message'); 7 | var voice = require('../utility/voice'); 8 | var logger = require('../utility/logger'); 9 | var winston = logger.getT(); 10 | var cmd = 'leave'; 11 | var config = require('../config/main.json'); 12 | var execute = function (message) { 13 | if (message.guild) { 14 | if (voice.inVoice(message)) { 15 | var channel = voice.getVoiceChannel(message); 16 | if (messageHelper.hasWolkeBot(message) || config.beta) { 17 | channel.leave(); 18 | voice.clearVoice(message, function (err) { 19 | if (err) return winston.warn(err); 20 | message.reply(t('leave', {lngs:message.lang})); 21 | }); 22 | } else { 23 | message.reply(t('generic.no-permission', {lngs:message.lang})); 24 | } 25 | } else { 26 | message.reply(t('generic.no-voice', {lngs:message.lang})); 27 | } 28 | } else { 29 | message.reply(t('generic.no-pm', {lngs:message.lang})); 30 | } 31 | }; 32 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'music'}; -------------------------------------------------------------------------------- /commands/listRoles.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 30.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var logger = require('../utility/logger'); 7 | var serverModel = require('../DB/server'); 8 | var winston = logger.getT(); 9 | var cmd = 'lr'; 10 | var AsciiTable = require('ascii-table'); 11 | var exec = (message) => { 12 | if (message.guild) { 13 | if (typeof(message.dbServer.roles) !== 'undefined' && message.dbServer.roles.length > 0) { 14 | let roles = message.dbServer.roles; 15 | var table = new AsciiTable(); 16 | table.removeBorder(); 17 | table.setHeading(t('list-roles.nr', {lngs: message.lang}), 18 | t('list-roles.id', 19 | {lngs: message.lang}), 20 | t('list-roles.name', 21 | {lngs: message.lang}), 22 | t('list-roles.self', {lngs: message.lang}), 23 | t('list-roles.lvl', {lngs: message.lang}), 24 | t('list-roles.default', {lngs: message.lang})); 25 | for (var i = 0; i < message.dbServer.roles.length; i++) { 26 | table.addRow(i + 1, roles[i].id, roles[i].name, roles[i].self, roles[i].level, roles[i].default); 27 | } 28 | message.channel.sendCode('', table.toString()); 29 | } else { 30 | message.channel.sendMessage(':x: ') 31 | } 32 | } else { 33 | message.reply(t('generic.no-pm', {lngs: message.lang})); 34 | } 35 | }; 36 | module.exports = {cmd: cmd, accessLevel: 0, exec: exec, cat: 'roles'}; -------------------------------------------------------------------------------- /commands/lmgtfy.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var cmd = 'lmg'; 7 | var logger = require('../utility/logger'); 8 | var winston = logger.getT(); 9 | var config = require('../config/main.json'); 10 | var execute = function (message) { 11 | let content = message.content.substr(message.prefix.length + cmd.length).trim(); 12 | if (content !== '') { 13 | message.channel.sendMessage(``); 14 | } else { 15 | message.channel.sendMessage(t('generic.empty-search', {lngs: message.lang})) 16 | } 17 | }; 18 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'misc'}; -------------------------------------------------------------------------------- /commands/mod.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var cmd = 'mod'; 5 | var radio = require('./mod/radio'); 6 | var lang = require('./mod/lang'); 7 | var config = require('../config/main.json'); 8 | var execute = function (message) { 9 | if (message.author.id === config.owner_id) { 10 | let messageSplit = message.content.split(' ').slice(1); 11 | if (messageSplit.length > 0) { 12 | switch (messageSplit[0]) { 13 | case "radio": 14 | radio.exec(message); 15 | return; 16 | case "lang": 17 | lang.exec(message); 18 | return; 19 | case "rra": 20 | return; 21 | // case "resolve": 22 | // message.reply(encodeURIComponent('麻枝 准×やなぎなぎ終わりの世界から')); 23 | // return; 24 | default: 25 | return; 26 | } 27 | } else { 28 | message.reply('What do you want to do ?'); 29 | } 30 | } 31 | }; 32 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'admin'}; -------------------------------------------------------------------------------- /commands/mod/lang.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 18.10.2016. 3 | */ 4 | /** 5 | * Created by julia on 02.10.2016. 6 | */ 7 | var cmd = 'lang'; 8 | var logger = require('../../utility/logger'); 9 | var winston = logger.getT(); 10 | var reload = require('./translation/reloadTranslation'); 11 | // var config = require('../../config/main.json'); 12 | var execute = function (message) { 13 | let messageSplit = message.content.split(' ').slice(2); 14 | winston.info(messageSplit); 15 | if (messageSplit.length > 0) { 16 | switch (messageSplit[0]) { 17 | case "reload": 18 | reload.exec(message); 19 | return; 20 | case "list": 21 | return; 22 | default: 23 | return; 24 | } 25 | } else { 26 | message.reply('What do you want to do radio?'); 27 | } 28 | }; 29 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute}; -------------------------------------------------------------------------------- /commands/mod/radio.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 18.10.2016. 3 | */ 4 | /** 5 | * Created by julia on 02.10.2016. 6 | */ 7 | var cmd = 'radio'; 8 | // var config = require('../../config/main.json'); 9 | var add = require('./radio/add'); 10 | var list = require('./radio/list'); 11 | var logger = require('../../utility/logger'); 12 | var winston = logger.getT(); 13 | var remove = require('./radio/remove'); 14 | var execute = function (message) { 15 | let messageSplit = message.content.split(' ').slice(2); 16 | // winston.info(messageSplit); 17 | if (messageSplit.length > 0) { 18 | switch (messageSplit[0]) { 19 | case "add": 20 | add.exec(message); 21 | return; 22 | case "list": 23 | list.exec(message); 24 | return; 25 | case "remove": 26 | remove.exec(message); 27 | return; 28 | default: 29 | return; 30 | } 31 | } else { 32 | message.reply('What do you want to do radio?'); 33 | } 34 | }; 35 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute}; -------------------------------------------------------------------------------- /commands/mod/radio/add.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 18.10.2016. 3 | */ 4 | /** 5 | * Created by julia on 02.10.2016. 6 | */ 7 | var cmd = 'add'; 8 | var logger = require('../../../utility/logger'); 9 | var winston = logger.getT(); 10 | var shortid = require('shortid'); 11 | var songModel = require('../../../DB/song'); 12 | // var config = require('../../config/main.json'); 13 | var execute = function (message) { 14 | let messageSplit = message.content.split(' ').slice(3); 15 | let messageFormat = ""; 16 | for (var i = 0; i < messageSplit.length; i++) { 17 | if (i === 0) { 18 | messageFormat = messageSplit[i]; 19 | } else { 20 | messageFormat = messageFormat + " " + messageSplit[i]; 21 | } 22 | } 23 | messageSplit = messageFormat.split('|'); 24 | if (messageSplit.length > 0) { 25 | songModel.findOne({url: messageSplit[1]}, (err, Radio) => { 26 | if (err) return message.reply(err); 27 | if (Radio) { 28 | message.reply(JSON.stringify(Radio)); 29 | } else { 30 | let song = new songModel({ 31 | title: messageSplit[0], 32 | id: shortid.generate(), 33 | addedBy: message.author.id, 34 | addedAt: Date.now(), 35 | duration: "", 36 | type: "radio", 37 | url: messageSplit[1] 38 | }); 39 | song.save(err => { 40 | if (err) return message.reply(err); 41 | message.reply(`Radio ${song.title} with stream url ${song.url} added!`); 42 | }); 43 | } 44 | }); 45 | } else { 46 | message.reply('Please add a Name and Stream for the Station like this: name|stream'); 47 | } 48 | }; 49 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute}; -------------------------------------------------------------------------------- /commands/mod/radio/list.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 18.10.2016. 3 | */ 4 | /** 5 | * Created by julia on 02.10.2016. 6 | */ 7 | var cmd = 'list'; 8 | var logger = require('../../../utility/logger'); 9 | var winston = logger.getT(); 10 | var AsciiTable = require('ascii-table'); 11 | var songModel = require('../../../DB/song'); 12 | // var config = require('../../config/main.json'); 13 | var execute = function (message) { 14 | let messageSplit = message.content.split(' ').slice(3); 15 | let messageFormat = ""; 16 | for (var i = 0; i < messageSplit.length; i++) { 17 | if (i === 0) { 18 | messageFormat = messageSplit[i]; 19 | } else { 20 | messageFormat = messageFormat + " " + messageSplit[i]; 21 | } 22 | } 23 | if (messageSplit.length > 0) { 24 | songModel.find({ 25 | $text: { 26 | $search: messageFormat 27 | }, 28 | type: "radio" 29 | }, {score: {$meta: "textScore"}}).sort({score: {$meta: "textScore"}}).limit(10).exec(function (err, Radios) { 30 | if (err) return message.reply(err); 31 | let table = new AsciiTable(); 32 | for (var i = 0; i < Radios.length; i++) { 33 | table.addRow(i + 1, Radios[i].title); 34 | } 35 | message.channel.sendMessage(`\`\`\`${table.toString()}\`\`\``); 36 | }); 37 | } else { 38 | songModel.find({type: "radio"}).limit(10).exec(function (err, Radios) { 39 | if (err) return message.reply(err); 40 | let table = new AsciiTable(); 41 | for (var i = 0; i < Radios.length; i++) { 42 | table.addRow(i + 1, Radios[i].title); 43 | } 44 | message.channel.sendMessage(`\`\`\`${table.toString()}\`\`\``); 45 | }); 46 | } 47 | }; 48 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute}; -------------------------------------------------------------------------------- /commands/mod/radio/remove.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 18.10.2016. 3 | */ 4 | /** 5 | * Created by julia on 02.10.2016. 6 | */ 7 | var cmd = 'remove'; 8 | var logger = require('../../../utility/logger'); 9 | var winston = logger.getT(); 10 | var AsciiTable = require('ascii-table'); 11 | var messageHelper = require('../../../utility/message'); 12 | var MessageCollector = require('discord.js').MessageCollector; 13 | var songModel = require('../../../DB/song'); 14 | // var config = require('../../config/main.json'); 15 | var execute = function (message) { 16 | let messageSplit = message.content.split(' ').slice(3); 17 | let messageFormat = ""; 18 | for (var i = 0; i < messageSplit.length; i++) { 19 | if (i === 0) { 20 | messageFormat = messageSplit[i]; 21 | } else { 22 | messageFormat = messageFormat + " " + messageSplit[i]; 23 | } 24 | } 25 | songModel.find({$text: {$search: messageFormat}, type: "radio"}).limit(5).exec((err, Radios) => { 26 | if (err) return message.reply(err); 27 | if (Radios.length > 0) { 28 | let table = new AsciiTable(); 29 | for (var i = 0; i < Radios.length; i++) { 30 | table.addRow(i + 1, Radios[i].title); 31 | } 32 | table.addRow('c', 'use c to cancel the delete!'); 33 | message.channel.sendMessage(`\`\`\`${table.toString()}\`\`\``); 34 | let collector = new MessageCollector(message.channel, messageHelper.filterSelection, {max: 1}); 35 | collector.on('end', (collection, reason) => { 36 | let msg = collection.first(); 37 | let number = 10; 38 | try { 39 | number = parseInt(msg.content) 40 | } catch (e) { 41 | 42 | } 43 | if (!isNaN(number) && number <= Radios.length) { 44 | songModel.remove({id: Radios[number - 1].id}, (err) => { 45 | if (err) return message.reply(err); 46 | message.reply(`Now deleting ${Radios[number - 1].title} !`); 47 | }); 48 | } 49 | }); 50 | } 51 | }); 52 | }; 53 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute}; -------------------------------------------------------------------------------- /commands/mod/translation/reloadTranslation.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../../../utility/i18nManager'); 5 | var cmd = 'reload'; 6 | var config = require('../../../config/main.json'); 7 | var logger = require('../../../utility/logger'); 8 | var fs = require("fs"); 9 | var winston = logger.getT(); 10 | var execute = function (message) { 11 | if (message.author.id === config.owner_id) { 12 | try { 13 | getDirs('locales/', (list) => { 14 | var i18next = require('i18next'); 15 | var Backend = require('i18next-node-fs-backend'); 16 | var backendOptions = { 17 | loadPath: 'locales/{{lng}}/{{ns}}.json', 18 | addPath: 'locales/{{lng}}/{{ns}}.missing.json', 19 | jsonIndent: 2 20 | }; 21 | i18next.use(Backend).init({ 22 | backend: backendOptions, 23 | lng: 'en', 24 | fallbacklngs: false, 25 | preload: list, 26 | load: 'all' 27 | }, (err, t) => { 28 | if (err) { 29 | return message.reply(err); 30 | } 31 | i18nBean.setT(t); 32 | message.reply('Reloaded Translation!') 33 | }); 34 | }); 35 | } catch (e) { 36 | return message.reply(e); 37 | } 38 | } 39 | }; 40 | function getDirs(rootDir, cb) { 41 | fs.readdir(rootDir, function (err, files) { 42 | var dirs = []; 43 | for (var index = 0; index < files.length; ++index) { 44 | var file = files[index]; 45 | if (file[0] !== '.') { 46 | var filePath = rootDir + '/' + file; 47 | fs.stat(filePath, function (err, stat) { 48 | if (stat.isDirectory()) { 49 | dirs.push(this.file); 50 | } 51 | if (files.length === (this.index + 1)) { 52 | return cb(dirs); 53 | } 54 | }.bind({index: index, file: file})); 55 | } 56 | } 57 | }); 58 | } 59 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute}; -------------------------------------------------------------------------------- /commands/pauseSong.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var cmd = 'pause'; 7 | var voice = require('../utility/voice'); 8 | var messageHelper = require('../utility/message'); 9 | var config = require('../config/main.json'); 10 | var logger = require('../utility/logger'); 11 | var winston = logger.getT(); 12 | var execute = function (message) { 13 | if (message.guild) { 14 | if (messageHelper.hasWolkeBot(message) || config.beta) { 15 | if (voice.inVoice(message)) { 16 | var connection = voice.getVoiceConnection(message); 17 | var dispatcher = voice.getDispatcher(connection); 18 | try { 19 | dispatcher.pause(); 20 | message.channel.sendMessage(':play_pause: '); 21 | } catch (e) { 22 | winston.info(e); 23 | message.channel.sendMessage(t('generic.no-song-playing', {lngs: message.lang})); 24 | } 25 | } else { 26 | message.reply(t('generic.no-permission', {lngs: message.lang})); 27 | } 28 | } else { 29 | message.reply(t('generic.no-voice', {lngs: message.lang})); 30 | } 31 | } else { 32 | message.reply(t('generic.no-pm', {lngs: message.lang})); 33 | } 34 | }; 35 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'music'}; -------------------------------------------------------------------------------- /commands/ping.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var cmd = 'ping'; 5 | var execute = function (message) { 6 | var start = Date.now(); 7 | message.channel.sendMessage("pong").then(sendedMessage => { 8 | var stop = Date.now(); 9 | var diff = (stop - start); 10 | sendedMessage.edit(`pong \`${diff}ms\``); 11 | }); 12 | }; 13 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'misc'}; -------------------------------------------------------------------------------- /commands/playRadio.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var messageHelper = require('../utility/message'); 7 | var voice = require('../utility/voice'); 8 | var logger = require('../utility/logger'); 9 | var osu = require('../utility/osu'); 10 | var winston = logger.getT(); 11 | var songModel = require('../DB/song'); 12 | var cmd = 'stream'; 13 | var config = require('../config/main.json'); 14 | var icy = require("icy"); 15 | var fs = require('fs'); 16 | var shortid = require("shortid"); 17 | var MessageCollector = require('discord.js').MessageCollector; 18 | var pre = function (message) { 19 | if (message.guild) { 20 | voice.getInVoice(message, (err, msg) => { 21 | if (err) return message.reply(err); 22 | execute(msg); 23 | }) 24 | } else { 25 | message.reply(t('generic.no-pm', {lngs: message.lang})); 26 | } 27 | }; 28 | var execute = function (message) { 29 | if (message.guild) { 30 | let messageSplit = message.content.split(' ').slice(1); 31 | let messageFormat = ""; 32 | for (var i = 0; i < messageSplit.length; i++) { 33 | if (i === 0) { 34 | messageFormat = messageSplit[i]; 35 | } else { 36 | messageFormat = messageFormat + " " + messageSplit[i]; 37 | } 38 | } 39 | if (messageSplit.length > 0) { 40 | if (messageSplit[0] === '-u') { 41 | if (messageSplit[1] !== 'undefined') { 42 | icy.get(messageSplit[1], (res) => { 43 | let song = { 44 | "title": `<${messageSplit[1]}>`, 45 | "id": shortid.generate(), 46 | "addedBy": message.author.id, 47 | "addedAt": new Date(), 48 | "duration": "", 49 | "type": "radio", 50 | "url": messageSplit[1] 51 | }; 52 | message.songTitle = messageSplit[1]; 53 | voice.addSongFirst(message, song, false).then(() => { 54 | voice.streamSong(message, res); 55 | message.channel.sendMessage(t('play.playing', { 56 | song: song.title, 57 | interpolation: {escape: false} 58 | })); 59 | }).catch(message.reply); 60 | }); 61 | } 62 | } else { 63 | songModel.find({ 64 | $text: {$search: messageFormat}, 65 | type: "radio" 66 | }, {score: {$meta: "textScore"}}).sort({score: {$meta: "textScore"}}).limit(5).exec(function (err, Radios) { 67 | if (err) return message.reply(err); 68 | let titles = []; 69 | for (var i = 0; i < Radios.length; i++) { 70 | titles.push(`${i + 1}:${Radios[i].title}\n`); 71 | } 72 | titles.push(t('generic.cancel', {lngs: message.lang})); 73 | message.channel.sendMessage(`${messageHelper.buildPrologMessage(titles)}`).then(() => { 74 | input(message, Radios); 75 | }); 76 | }); 77 | } 78 | } else { 79 | songModel.find({type: "radio"}).limit(5).exec(function (err, Radios) { 80 | if (err) return message.reply(err); 81 | let titles = []; 82 | for (var i = 0; i < Radios.length; i++) { 83 | titles.push(`${i + 1}:${Radios[i].title}\n`); 84 | } 85 | titles.push(t('generic.cancel', {lngs: message.lang})); 86 | message.channel.sendMessage(`${messageHelper.buildPrologMessage(titles)}`).then(() => { 87 | input(message, Radios); 88 | }); 89 | }); 90 | } 91 | } else { 92 | message.reply(t('generic.no-pm', {lngs: message.lang})); 93 | } 94 | }; 95 | var input = function (message, Radios) { 96 | let collector = new MessageCollector(message.channel, messageHelper.filterSelection, {time: 1000 * 30}); 97 | collector.on('message', (msg) => { 98 | let number = 10; 99 | try { 100 | number = parseInt(msg.content); 101 | } catch (e) { 102 | 103 | } 104 | if (message.content.startsWith(message.prefix)) { 105 | collector.stop(); 106 | } 107 | if (message.content === 'c') { 108 | collector.stop(); 109 | } 110 | if (!isNaN(number) && number <= Radios.length) { 111 | collector.stop(); 112 | message.songTitle = Radios[number - 1].title; 113 | icy.get(Radios[number - 1].url, (res) => { 114 | // res.on('metadata', function (metadata) { 115 | // var parsed = icy.parse(metadata); 116 | // console.log(parsed); 117 | // }); 118 | // console.error(res.headers); 119 | voice.addSongFirst(message, Radios[number - 1], false).then(() => { 120 | voice.streamSong(message, res); 121 | message.channel.sendMessage(t('play.playing', { 122 | lngs: message.lang, 123 | song: Radios[number - 1].title, 124 | interpolation: {escape: false} 125 | })); 126 | }).catch(message.reply); 127 | }); 128 | } 129 | }); 130 | }; 131 | module.exports = {cmd: cmd, accessLevel: 0, exec: pre, cat: 'music'}; -------------------------------------------------------------------------------- /commands/playSong.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var messageHelper = require('../utility/message'); 7 | var voice = require('../utility/voice'); 8 | var logger = require('../utility/logger'); 9 | var ytHelper = require('../utility/youtube/helper'); 10 | var musicHelper = require('../utility/music'); 11 | var osu = require('../utility/osu'); 12 | var winston = logger.getT(); 13 | var cmd = 'play'; 14 | var songModel = require('../DB/song'); 15 | var config = require('../config/main.json'); 16 | var pre = function (message) { 17 | if (message.guild) { 18 | voice.getInVoice(message, (err, msg) => { 19 | if (err) return message.reply(err); 20 | execute(msg); 21 | }) 22 | } else { 23 | message.reply(t('generic.no-pm', {lngs: message.lang})); 24 | } 25 | }; 26 | var execute = function (message) { 27 | let messageSplit = message.content.split(' '); 28 | if (message.guild) { 29 | if (messageHelper.hasWolkeBot(message) || config.beta) { 30 | if (typeof (messageSplit[1]) !== 'undefined') { 31 | var messageSearch = ""; 32 | for (var i = 1; i < messageSplit.length; i++) { 33 | messageSearch = messageSearch + " " + messageSplit[i] 34 | } 35 | if (musicHelper.checkMedia(messageSearch)) { 36 | ytHelper.ytDlAndPlayFirst(message, messageSearch, messageSplit); 37 | } else if (musicHelper.checkOsuMap(messageSplit[1])) { 38 | osu.download(message).then(Song => { 39 | if (voice.inVoice(message)) { 40 | voice.addSongFirst(message, Song, false).then(() => { 41 | voice.playSong(message, Song); 42 | }).catch(winston.info); 43 | } else { 44 | message.reply(t('generic.no-voice', {lngs:message.lang})); 45 | } 46 | }).catch(message.reply); 47 | } else { 48 | songModel.find({ 49 | $text: {$search: messageSearch}, 50 | type: {$ne: 'radio'} 51 | }, {score: {$meta: "textScore"}}).sort({score: {$meta: "textScore"}}).limit(1).exec(function (err, Songs) { 52 | if (err) return winston.info(err); 53 | var Song = Songs[0]; 54 | if (Song) { 55 | if (voice.inVoice(message)) { 56 | voice.addSongFirst(message, Song, false).then(() => { 57 | voice.playSong(message, Song); 58 | }).catch(winston.info); 59 | } else { 60 | message.reply(t('generic.no-voice', {lngs:message.lang})); 61 | } 62 | } else { 63 | message.reply(t('play.no-result', {lngs:message.lang})); 64 | } 65 | }); 66 | } 67 | } else { 68 | message.reply(t('generic.empty-search', {lngs:message.lang})); 69 | } 70 | } else { 71 | message.reply(t('generic.no-permission', {lngs:message.lang})); 72 | } 73 | } else { 74 | message.reply(t('generic.no-pm', {lngs:message.lang})); 75 | } 76 | }; 77 | module.exports = {cmd: cmd, accessLevel: 0, exec: pre, cat: 'music'}; -------------------------------------------------------------------------------- /commands/playSongRepeat.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var messageHelper = require('../utility/message'); 7 | var voice = require('../utility/voice'); 8 | var logger = require('../utility/logger'); 9 | var ytHelper = require('../utility/youtube/helper'); 10 | var osu = require('../utility/osu'); 11 | var musicHelper = require('../utility/music'); 12 | var winston = logger.getT(); 13 | var cmd = 'forever'; 14 | var songModel = require('../DB/song'); 15 | var config = require('../config/main.json'); 16 | var pre = function (message) { 17 | if (message.guild) { 18 | voice.getInVoice(message, (err, msg) => { 19 | if (err) return message.reply(err); 20 | execute(msg); 21 | }) 22 | } else { 23 | message.reply(t('generic.no-pm', {lngs: message.lang})); 24 | } 25 | }; 26 | var execute = function (message) { 27 | let messageSplit = message.content.split(' '); 28 | if (message.guild) { 29 | if (messageHelper.hasWolkeBot(message) || config.beta) { 30 | if (typeof (messageSplit[1]) !== 'undefined') { 31 | var messageSearch = ""; 32 | for (var i = 1; i < messageSplit.length; i++) { 33 | messageSearch = messageSearch + " " + messageSplit[i]; 34 | } 35 | if (musicHelper.checkMedia(messageSearch)) { 36 | ytHelper.ytDlAndPlayForever(message, messageSearch, messageSplit); 37 | } else if (musicHelper.checkOsuMap(messageSplit[1])) { 38 | osu.download(message).then(Song => { 39 | if (voice.inVoice(message)) { 40 | voice.queueAddRepeat(message,Song); 41 | } else { 42 | message.reply(t('generic.no-voice', {lngs:message.lang})); 43 | } 44 | }).catch(message.reply); 45 | } else { 46 | songModel.find({ 47 | $text: {$search: messageSearch}, 48 | type: {$ne: 'radio'} 49 | }, {score: {$meta: "textScore"}}).sort({score: {$meta: "textScore"}}).limit(1).exec(function (err, Songs) { 50 | if (err) return winston.info(err); 51 | var Song = Songs[0]; 52 | if (Song) { 53 | if (voice.inVoice(message)) { 54 | voice.queueAddRepeat(message,Song); 55 | } else { 56 | message.reply(t('generic.no-voice', {lngs:message.lang})); 57 | } 58 | } else { 59 | message.reply(t('play.no-result', {lngs:message.lang})); 60 | } 61 | }); 62 | } 63 | } else { 64 | message.reply(t('generic.empty-search', {lngs:message.lang})); 65 | } 66 | } else { 67 | message.reply(t('generic.no-permission', {lngs:message.lang})); 68 | } 69 | } else { 70 | message.reply(t('generic.no-pm', {lngs:message.lang})); 71 | } 72 | }; 73 | module.exports = {cmd: cmd, accessLevel: 0, exec: pre, cat: 'music'}; -------------------------------------------------------------------------------- /commands/playlist.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var cmd = 'pl'; 5 | var execute = function (message) { 6 | let messageSplit = message.content.split(' ').slice(1); 7 | if (messageSplit.length > 0) { 8 | switch (messageSplit[0]) { 9 | case "create": 10 | return; 11 | case "import": 12 | return; 13 | case "top": 14 | return; 15 | case "list": 16 | return; 17 | case "server": 18 | return; 19 | case "remove": 20 | return; 21 | default: 22 | 23 | return; 24 | } 25 | } else { 26 | message.reply('What do you want to do ?'); 27 | } 28 | }; 29 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'wip'}; -------------------------------------------------------------------------------- /commands/registerProxer.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var messageHelper = require('../utility/message'); 5 | var userModel = require('../DB/user'); 6 | var verifyUser = require('../utility/proxer/user/verifyUser'); 7 | var logger = require('../utility/logger'); 8 | var winston = logger.getT(); 9 | var proxerReg = /(?:http|https):\/\/proxer\.me\/user\/([0-9]+)/i; 10 | var proxerId; 11 | var cmd = 'pr.reg'; 12 | var execute = function (message) { 13 | let messageSplit = message.content.split(' '); 14 | if (typeof (messageSplit[1]) !== 'undefined' && proxerReg.test(messageSplit[1])) { 15 | var match = proxerReg.exec(messageSplit[1]); 16 | if (match) { 17 | proxerId = match[1]; 18 | } 19 | if (proxerId) { 20 | userModel.findOne({proxerId: proxerId}, function (err, User) { 21 | if (err) return winston.info(err); 22 | if (User) { 23 | return message.reply('The ID is already Used!'); 24 | } else { 25 | userModel.findOne({id: message.author.id}, function (err, User) { 26 | if (err) return winston.info(err); 27 | if (User) { 28 | if (typeof (User.proxerId) !== 'undefined') { 29 | return message.reply('You should already have a Verification Code.'); 30 | } 31 | if (typeof (User.verified) !== 'undefined' && User.verified) { 32 | message.reply(`You are already verified with the Account: https://proxer.me/user/${User.proxerId}`); 33 | } else { 34 | verifyUser(message.author.id, proxerId, function (err, result, name) { 35 | if (err) return winston.info(err); 36 | message.reply(`Ok i send your Proxer Account ${name} a PM with a verification Code`); 37 | }); 38 | } 39 | } else { 40 | messageHelper.createUser(message, true, true, function (err) { 41 | userModel.findOne({id: message.author.id}, function (err, User) { 42 | if (err) return winston.info(err); 43 | if (User) { 44 | verifyUser(message.author.id, proxerId, function (err, result, name) { 45 | if (err) return winston.info(err); 46 | message.reply(`Ok i send your Proxer Account ${name} a PM with a verification Code`); 47 | }); 48 | } else { 49 | message.reply('Arere Something went wrong...'); 50 | } 51 | }); 52 | }); 53 | } 54 | }); 55 | } 56 | }); 57 | } else { 58 | message.reply('I could not read this link....'); 59 | } 60 | } else { 61 | message.reply('You have to add a Link to your Proxer Account for me to verify you!'); 62 | } 63 | }; 64 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'proxer'}; -------------------------------------------------------------------------------- /commands/removeMessages.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var messageHelper = require('../utility/message'); 7 | var logger = require('../utility/logger'); 8 | var winston = logger.getT(); 9 | var cmd = 'rm'; 10 | var execute = function (message) { 11 | let messageSplit = message.content.split(' '); 12 | if (message.guild) { 13 | if (messageHelper.hasWolkeBot(message)) { 14 | if (typeof (messageSplit[1]) !== 'undefined') { 15 | var number = 0; 16 | try { 17 | number = parseInt(messageSplit[1]); 18 | } catch (e) { 19 | return message.reply(t('generic.nan', {lngs: message.lang})); 20 | } 21 | if (isNaN(number)) { 22 | return message.reply(t('generic.nan', {lngs: message.lang})); 23 | } 24 | if (number < 2) { 25 | return message.reply(t('rm.less-2', {lngs: message.lang})); 26 | } 27 | if (number > 100) { 28 | return message.reply(t('rm.over-100', {lngs: message.lang})); 29 | } else { 30 | message.channel.fetchMessages({before: message.id, limit: number}).then(messages => { 31 | message.channel.bulkDelete(messages).then(() => { 32 | message.reply(t('rm.success', {lngs: message.lang, number: number})); 33 | }).catch(err => { 34 | message.reply(t('rm.error', {lngs: message.lang})); 35 | winston.error(err); 36 | }); 37 | }).catch(winston.error); 38 | } 39 | } else { 40 | message.reply(t('generic.whole-num', {lngs: message.lang})); 41 | } 42 | } else { 43 | message.reply(t('generic.no-permission', {lngs: message.lang})); 44 | } 45 | } else { 46 | message.reply(t('generic.no-pm', {lngs: message.lang})); 47 | } 48 | }; 49 | module.exports = {cmd: cmd, accessLevel: 1, exec: execute, cat: 'moderation'}; -------------------------------------------------------------------------------- /commands/removeRole.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 30.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var logger = require('../utility/logger'); 7 | var winston = logger.getT(); 8 | var messageHelper = require("../utility/message.js"); 9 | var cmd = 'rr'; 10 | var exec = (message) => { 11 | if (message.guild) { 12 | let Guild = message.dbServer; 13 | let userReg = /<@[0-9]+>/g; 14 | let content = message.content.substr(message.prefix.length + cmd.length).trim(); 15 | content = content.replace(userReg, '').trim(); 16 | winston.info(content); 17 | let mention = message.mentions.users.first(); 18 | let wolkebot = messageHelper.hasWolkeBot(message); 19 | if (content.length > 0) { 20 | let roleGuild = message.guild.roles.filter(r => r.name === content).first(); 21 | if (Guild) { 22 | if (typeof (Guild.roles.length) !== 'undefined' && Guild.roles.length > 0) { 23 | let role = messageHelper.checkRoleExist(content, Guild.roles); 24 | if (role && roleGuild) { 25 | if (role.self) { 26 | if (!mention) { 27 | message.member.removeRole(roleGuild).then(member=> { 28 | message.channel.sendMessage(`Ok I just removed the role ${role.name} of ${member.user} !`); 29 | }).catch(winston.error); 30 | } else { 31 | remRole(message, mention, roleGuild, wolkebot); 32 | } 33 | } else { 34 | if (wolkebot) { 35 | remRole(message, mention, roleGuild, wolkebot); 36 | } else { 37 | message.reply(t('generic.no-permission', {lngs: message.lang})); 38 | } 39 | } 40 | } else { 41 | if (roleGuild) { 42 | if (wolkebot) { 43 | remRole(message, mention, roleGuild, wolkebot); 44 | } else { 45 | message.reply(t('generic.no-permission', {lngs: message.lang})); 46 | } 47 | } 48 | } 49 | } else { 50 | if (wolkebot) { 51 | if (roleGuild) { 52 | if (!mention) { 53 | remRole(message, message.author, roleGuild, wolkebot); 54 | } else { 55 | remRole(message, mention, roleGuild, wolkebot); 56 | } 57 | } else { 58 | message.channel.sendMessage('No Role in Guild found uwu'); 59 | } 60 | } else { 61 | message.reply(t('generic.no-permission', {lngs: message.lang})); 62 | } 63 | } 64 | } 65 | } else { 66 | message.reply(t('create-role.no-args', {lngs: message.lang})); 67 | } 68 | } else { 69 | message.reply(t('generic.no-pm', {lngs: message.lang})); 70 | } 71 | }; 72 | function remRole(message, user, role, wolkebot) { 73 | if (wolkebot) { 74 | messageHelper.remRoleMember(message, user, role, (err) => { 75 | if (err) return message.reply(err); 76 | message.channel.sendMessage(`Ok I just removed the role ${role.name} of ${user} !`); 77 | }); 78 | } else { 79 | message.reply(t('generic.no-permission', {lngs: message.lang})); 80 | } 81 | } 82 | module.exports = { 83 | cmd: 'rr', accessLevel: 0, exec: exec, cat: 'roles' 84 | }; -------------------------------------------------------------------------------- /commands/report.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var cmd = 'report'; 7 | var config = require('../config/main.json'); 8 | var execute = function (message) { 9 | message.botUser.fetchUser(config.owner_id).then(owner => { 10 | if (message.guild) { 11 | let content = message.content.substr(message.prefix.length + cmd.length).trim(); 12 | owner.sendMessage(`Shard: ${message.shard_id} Bugreport received! From: ${message.guild.name} (${message.guild.id}), By:${message.author.username}#${message.author.discriminator} (${message.author.id}) Content:\`\`\` ${content}\`\`\``); 13 | } else { 14 | let content = message.content.substr(message.prefix.length + cmd.length).trim(); 15 | owner.sendMessage(`Shard: ${message.shard_id} Bugreport received! From: PM, By:${message.author.username}#${message.author.discriminator} (${message.author.id}) Content:\`\`\` ${content}\`\`\``); 16 | } 17 | message.reply(t('report', {lngs:message.lang})); 18 | }); 19 | }; 20 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'support'}; -------------------------------------------------------------------------------- /commands/resumeSong.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var cmd = 'resume'; 5 | var voice = require('../utility/voice'); 6 | var messageHelper = require('../utility/message'); 7 | var config = require('../config/main.json') 8 | var execute = function (message) { 9 | if (message.guild) { 10 | if (messageHelper.hasWolkeBot(message) || config.beta) { 11 | if (voice.inVoice(message)) { 12 | var connection = voice.getVoiceConnection(message); 13 | var dispatcher = voice.getDispatcher(connection); 14 | try { 15 | dispatcher.resume(); 16 | message.channel.sendMessage(':arrow_forward: '); 17 | } catch (e) { 18 | message.channel.sendMessage("No Song playing at the Moment!"); 19 | } 20 | } 21 | else { 22 | message.reply('It looks like i am not connected to any Voice Channel of this Server at the Moment, connect me with !w.voice'); 23 | } 24 | } else { 25 | message.reply('No Permission! You need to give yourself the WolkeBot Role to use this.'); 26 | } 27 | } else { 28 | message.reply("This Commands Only Works in Server Channels!"); 29 | } 30 | }; 31 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'music'}; -------------------------------------------------------------------------------- /commands/s.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var cmd = 's'; 5 | var config = require('../config/main.json'); 6 | var greeting = require('./server/greeting'); 7 | var farewell = require('./server/farewell'); 8 | var execute = function (message) { 9 | let messageSplit = message.content.split(' ').slice(1); 10 | if (messageSplit.length > 0) { 11 | switch (messageSplit[0]) { 12 | case "gr": 13 | greeting.exec(message); 14 | return; 15 | case "fw": 16 | farewell.exec(message); 17 | return; 18 | // case "resolve": 19 | // message.reply(encodeURIComponent('麻枝 准×やなぎなぎ終わりの世界から')); 20 | // return; 21 | default: 22 | return; 23 | } 24 | } else { 25 | message.reply('What do you want to do ?'); 26 | } 27 | }; 28 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'moderation'}; -------------------------------------------------------------------------------- /commands/say.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var cmd = 'say'; 5 | var execute = function (message) { 6 | let content = message.content.substr(message.prefix.length + cmd.length).trim(); 7 | message.channel.sendMessage('\u200B' + content); 8 | }; 9 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'misc'}; -------------------------------------------------------------------------------- /commands/searchSong.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var songModel = require('../DB/song'); 7 | var cmd = 'search'; 8 | var logger = require('../utility/logger'); 9 | var winston = logger.getT(); 10 | var AsciiTable = require('ascii-table'); 11 | var execute = function (message) { 12 | let messageSplit = message.content.split(' '); 13 | if (typeof (messageSplit[1]) !== 'undefined') { 14 | var messageSearch = ""; 15 | for (var c = 1; c < messageSplit.length; c++) { 16 | messageSearch = messageSearch + " " + messageSplit[c] 17 | } 18 | songModel.find({$text: {$search: messageSearch}}, {score: {$meta: "textScore"}}).sort({score: {$meta: "textScore"}}).limit(5).exec(function (err, Songs) { 19 | if (err) return winston.info(err); 20 | if (Songs !== null && Songs.length > 0) { 21 | var reply = t('search.success', {lngs: message.lang}) + "\n\n"; 22 | let table = new AsciiTable(); 23 | for (var u = 0; u < Songs.length; u++) { 24 | table.addRow(u + 1, Songs[u].title); 25 | } 26 | reply = reply + `\`\`\`${table.toString()}\`\`\``; 27 | message.reply(reply); 28 | } else { 29 | message.reply(t('qa.nothing-found', {search: messageSearch, lngs: message.lang})); 30 | } 31 | }); 32 | } else { 33 | message.reply(t('generic.empty-search', {lngs: message.lang})); 34 | } 35 | }; 36 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'music'}; -------------------------------------------------------------------------------- /commands/searchYoutube.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var cmd = 'yts'; 7 | var yt = require('../utility/youtube/youtube'); 8 | var execute = function (message) { 9 | yt.search(message, function (err, Result) { 10 | if (err) { 11 | message.reply(err); 12 | } else { 13 | message.reply(t('yts.success', {lngs:message.lang, link:Result.link, interpolation:{escape:false}})); 14 | } 15 | }); 16 | }; 17 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'music'}; -------------------------------------------------------------------------------- /commands/searchYoutubeQueue.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var cmd = 'ytq'; 7 | var voice = require('../utility/voice'); 8 | var yt = require('../utility/youtube/youtube'); 9 | var ytHelper = require('../utility/youtube/helper'); 10 | var pre = function (message) { 11 | if (message.guild) { 12 | voice.getInVoice(message, (err, msg) => { 13 | if (err) return message.reply(err); 14 | execute(msg); 15 | }) 16 | } else { 17 | message.reply(t('generic.no-pm', {lngs: message.lang})); 18 | } 19 | }; 20 | var execute = function (message) { 21 | if (message.guild) { 22 | yt.search(message, function (err, Result) { 23 | if (err) { 24 | message.reply(err); 25 | } else { 26 | ytHelper.ytDlAndQueue(message, Result.link, ['lel', Result.link]); 27 | } 28 | }); 29 | } else { 30 | message.reply(t('generic.no-pm', {lngs:message.lang})); 31 | } 32 | }; 33 | module.exports = {cmd: cmd, accessLevel: 0, exec: pre, cat: 'music'}; -------------------------------------------------------------------------------- /commands/server/farewell.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 18.10.2016. 3 | */ 4 | /** 5 | * Created by julia on 02.10.2016. 6 | */ 7 | var cmd = 'fw'; 8 | var logger = require('../../utility/logger'); 9 | var winston = logger.getT(); 10 | var set = require('./farewell/set'); 11 | var reset = require('./farewell/reset'); 12 | var execute = function (message) { 13 | let messageSplit = message.content.split(' ').slice(2); 14 | // winston.info(messageSplit); 15 | if (messageSplit.length > 0) { 16 | switch (messageSplit[0]) { 17 | case "set": 18 | set.exec(message); 19 | return; 20 | case "reset": 21 | reset.exec(message); 22 | return; 23 | default: 24 | return; 25 | } 26 | } else { 27 | message.reply('What do you want to do radio?'); 28 | } 29 | }; 30 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute}; -------------------------------------------------------------------------------- /commands/server/farewell/reset.js: -------------------------------------------------------------------------------- 1 | var cmd = 'reset'; 2 | var logger = require('../../../utility/logger'); 3 | var serverModel = require('../../../DB/server'); 4 | var messageHelper = require('../../../utility/message'); 5 | var winston = logger.getT(); 6 | var i18nBean = require('../../../utility/i18nManager'); 7 | var t = i18nBean.getT(); 8 | var execute = function (message) { 9 | if (message.guild && messageHelper.hasWolkeBot(message)) { 10 | serverModel.findOne({id: message.guild.id}, (err, Server) => { 11 | if (err) return winston.error(err); 12 | if (Server) { 13 | Server.setLeave('', '', (err) => { 14 | if (err) return winston.error(err); 15 | message.channel.sendMessage(':ok_hand: '); 16 | }); 17 | } 18 | }) 19 | } else { 20 | message.reply(t('generic.no-permission', {lngs: message.lang})); 21 | } 22 | }; 23 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute}; -------------------------------------------------------------------------------- /commands/server/farewell/set.js: -------------------------------------------------------------------------------- 1 | var cmd = 'set'; 2 | var logger = require('../../../utility/logger'); 3 | var messageHelper = require('../../../utility/message'); 4 | var serverModel = require('../../../DB/server'); 5 | var winston = logger.getT(); 6 | var i18nBean = require('../../../utility/i18nManager'); 7 | var t = i18nBean.getT(); 8 | var execute = function (message) { 9 | let messageSplit = message.content.split(' ').slice(3); 10 | // winston.info(messageSplit); 11 | if (messageSplit.length > 0) { 12 | if (message.guild && messageHelper.hasWolkeBot(message)) { 13 | serverModel.findOne({id: message.guild.id}, (err, Server) => { 14 | if (err) return winston.error(err); 15 | if (Server) { 16 | var messageSearch = ""; 17 | for (var a = 0; a < messageSplit.length; a++) { 18 | messageSearch = messageSearch + " " + messageSplit[a] 19 | } 20 | messageSearch.trim(); 21 | Server.setLeave(messageSearch, message.channel.id, (err) => { 22 | if (err) return winston.error(err); 23 | message.channel.sendMessage(':ok_hand: '); 24 | }) 25 | } 26 | }) 27 | } else { 28 | message.reply(t('generic.no-permission', {lngs: message.lang})); 29 | } 30 | } else { 31 | message.reply(t('farewell.no-farewell', {lngs: message.lang})); 32 | } 33 | }; 34 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute}; -------------------------------------------------------------------------------- /commands/server/greeting.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 18.10.2016. 3 | */ 4 | /** 5 | * Created by julia on 02.10.2016. 6 | */ 7 | var cmd = 'gr'; 8 | var logger = require('../../utility/logger'); 9 | var set = require('./greeting/set'); 10 | var reset = require('./greeting/reset'); 11 | var winston = logger.getT(); 12 | var i18nBean = require('../../utility/i18nManager'); 13 | var t = i18nBean.getT(); 14 | var execute = function (message) { 15 | let messageSplit = message.content.split(' ').slice(2); 16 | // winston.info(messageSplit); 17 | if (messageSplit.length > 0) { 18 | switch (messageSplit[0]) { 19 | case "set": 20 | set.exec(message); 21 | return; 22 | case "reset": 23 | reset.exec(message); 24 | return; 25 | default: 26 | return; 27 | } 28 | } else { 29 | message.reply(t('greeting.no-add', {lngs: message.lang})); 30 | } 31 | }; 32 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute}; -------------------------------------------------------------------------------- /commands/server/greeting/reset.js: -------------------------------------------------------------------------------- 1 | var cmd = 'reset'; 2 | var logger = require('../../../utility/logger'); 3 | var serverModel = require('../../../DB/server'); 4 | var messageHelper = require('../../../utility/message'); 5 | var winston = logger.getT(); 6 | var i18nBean = require('../../../utility/i18nManager'); 7 | var t = i18nBean.getT(); 8 | var execute = function (message) { 9 | if (message.guild && messageHelper.hasWolkeBot(message)) { 10 | serverModel.findOne({id: message.guild.id}, (err, Server) => { 11 | if (err) return winston.error(err); 12 | if (Server) { 13 | Server.setJoin('', '', (err) => { 14 | if (err) return winston.error(err); 15 | message.channel.sendMessage(':ok_hand: '); 16 | }); 17 | } 18 | }) 19 | } else { 20 | message.reply(t('generic.no-permission', {lngs: message.lang})); 21 | } 22 | }; 23 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute}; -------------------------------------------------------------------------------- /commands/server/greeting/set.js: -------------------------------------------------------------------------------- 1 | var cmd = 'set'; 2 | var logger = require('../../../utility/logger'); 3 | var messageHelper = require('../../../utility/message'); 4 | var serverModel = require('../../../DB/server'); 5 | var winston = logger.getT(); 6 | var i18nBean = require('../../../utility/i18nManager'); 7 | var t = i18nBean.getT(); 8 | var execute = function (message) { 9 | let messageSplit = message.content.split(' ').slice(3); 10 | // winston.info(messageSplit); 11 | if (messageSplit.length > 0) { 12 | if (message.guild && messageHelper.hasWolkeBot(message)) { 13 | serverModel.findOne({id: message.guild.id}, (err, Server) => { 14 | if (err) return winston.error(err); 15 | if (Server) { 16 | var messageSearch = ""; 17 | for (var a = 0; a < messageSplit.length; a++) { 18 | messageSearch = messageSearch + " " + messageSplit[a] 19 | } 20 | messageSearch.trim(); 21 | Server.setJoin(messageSearch, message.channel.id, (err) => { 22 | if (err) return winston.error(err); 23 | message.channel.sendMessage(':ok_hand: '); 24 | }) 25 | } 26 | }) 27 | } else { 28 | message.reply(t('generic.no-permission', {lngs: message.lang})); 29 | } 30 | } else { 31 | message.reply(t('greeting.no-greeting', {lngs: message.lang})); 32 | } 33 | }; 34 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute}; -------------------------------------------------------------------------------- /commands/setLanguage.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var cmd = 'setLang'; 5 | var i18nBean = require('../utility/i18nManager'); 6 | var t = i18nBean.getT(); 7 | var messageHelper = require('../utility/message'); 8 | var serverModel = require('../DB/server'); 9 | var msgReg = /<@[0-9]+>/; 10 | var config = require('../config/main.json'); 11 | var logger = require('../utility/logger'); 12 | var fs = require("fs"); 13 | var winston = logger.getT(); 14 | var execute = function (message) { 15 | let messageSplit = message.content.split(' '); 16 | if (message.guild) { 17 | if (messageHelper.hasWolkeBot(message) || config.beta) { 18 | if (typeof (messageSplit[1]) !== 'undefined' && !msgReg.test(messageSplit[1])) { 19 | if (checkLang(messageSplit[1], message.langList)) { 20 | serverModel.findOne({id: message.guild.id}, function (err, Server) { 21 | if (err) return cb(err); 22 | if (Server) { 23 | Server.updateLanguage(messageSplit[1], err => { 24 | if (err) return winston.info(err); 25 | message.channel.sendMessage(t('set-lang.success', { 26 | lng: messageSplit[1], 27 | language: messageSplit[1] 28 | })); 29 | }); 30 | } else { 31 | let server = new serverModel({ 32 | id: message.guild.id, 33 | nsfwChannels: [], 34 | lastVoiceChannel: "", 35 | levelEnabled: true, 36 | pmNotifications: true, 37 | lngs: messageSplit[1], 38 | prefix: "!w." 39 | }); 40 | server.save(err => { 41 | if (err) return winston.info(err); 42 | message.channel.sendMessage(t('set-lang.success', { 43 | lng: messageSplit[1], 44 | language: messageSplit[1] 45 | })); 46 | }); 47 | } 48 | }); 49 | } else { 50 | message.channel.sendMessage(t('set-lang.unsupported', { 51 | lngs: message.lang, 52 | languages: buildLang(message.langList) 53 | })); 54 | } 55 | } else { 56 | message.channel.sendMessage(t('set-lang.no-lang', { 57 | lngs: message.lang, 58 | languages: buildLang(message.langList) 59 | })); 60 | } 61 | } else { 62 | message.channel.sendMessage(t('generic.no-permission', {lngs: message.lang})); 63 | } 64 | } else { 65 | message.channel.sendMessage(t('generic.no-pm', {lngs: message.lang})); 66 | } 67 | }; 68 | function checkLang(lang, list) { 69 | let i = list.length; 70 | while (i--) { 71 | if (lang === list[i]) { 72 | return true; 73 | } 74 | } 75 | return false; 76 | } 77 | function buildLang(list) { 78 | let i = list.length; 79 | let answer = ""; 80 | while (i--) { 81 | answer = answer + `${list[i]} | `; 82 | } 83 | return answer; 84 | } 85 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'moderation'}; -------------------------------------------------------------------------------- /commands/setNsfwChannel.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var messageHelper = require('../utility/message'); 7 | var serverModel = require('../DB/server'); 8 | var logger = require('../utility/logger'); 9 | var winston = logger.getT(); 10 | var cmd = 'setLewd'; 11 | var execute = function (message) { 12 | if (message.guild && messageHelper.hasWolkeBot(message)) { 13 | serverModel.findOne({id: message.guild.id}, function (err, Server) { 14 | if (err) return winston.info(err); 15 | if (Server) { 16 | serverModel.update({id: message.guild.id}, {$addToSet: {nsfwChannels: message.channel.id}}, function (err) { 17 | if (err) return winston.info(err); 18 | message.reply(t('set-lewd.success', {lngs:message.lang, channel:message.channel, interpolation:{escape:false}})); 19 | }); 20 | } else { 21 | var server = new serverModel({ 22 | id: message.guild.id, 23 | lastVoiceChannel: "", 24 | nsfwChannels: [message.channel.id], 25 | cmdChannel: "", 26 | permissions: [], 27 | prefix: "!w.", 28 | disabledCmds: [], 29 | Groups: [], 30 | Blacklist: [] 31 | }); 32 | server.save(); 33 | message.reply(t('set-lewd.success', {lngs:message.lang, channel:message.channel, interpolation:{escape:false}})); 34 | } 35 | }); 36 | } else { 37 | message.reply(t('generic.no-permission', {lngs:message.lang})); 38 | } 39 | }; 40 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'moderation'}; -------------------------------------------------------------------------------- /commands/setPrefix.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var cmd = 'setPrefix'; 7 | var messageHelper = require('../utility/message'); 8 | var serverModel = require('../DB/server'); 9 | var msgReg = /<@[0-9]+>/; 10 | var logger = require('../utility/logger'); 11 | var winston = logger.getT(); 12 | var execute = function (message) { 13 | let messageSplit = message.content.split(' '); 14 | if (message.guild) { 15 | if (messageHelper.hasWolkeBot(message)) { 16 | if (typeof (messageSplit[1]) !== 'undefined' && !msgReg.test(messageSplit[1])) { 17 | serverModel.findOne({id: message.guild.id}, function (err, Server) { 18 | if (err) return cb(err); 19 | if (Server) { 20 | Server.updatePrefix(messageSplit[1], err => { 21 | if (err) return winston.info(err); 22 | message.reply(t('prefix.success', {lngs:message.lang, prefix:messageSplit[1]})); 23 | }); 24 | } else { 25 | let server = new serverModel({ 26 | id: message.guild.id, 27 | nsfwChannels: [], 28 | lastVoiceChannel: "", 29 | levelEnabled: true, 30 | pmNotifications: true, 31 | prefix: messageSplit[1] 32 | }); 33 | server.save(err => { 34 | if (err) return winston.info(err); 35 | message.reply(t('prefix.success', {lngs:message.lang, prefix:messageSplit[1]})); 36 | }); 37 | } 38 | }); 39 | } else { 40 | message.reply(t('prefix.no-prefix', {lngs:message.lang})); 41 | } 42 | } else { 43 | message.reply(t('generic.no-permission', {lngs:message.lang})); 44 | } 45 | } else { 46 | message.reply(t('generic.no-pm', {lngs:message.lang})); 47 | } 48 | }; 49 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'moderation'}; -------------------------------------------------------------------------------- /commands/setStatus.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var cmd = 'setStatus'; 5 | var config = require('../config/main.json'); 6 | var logger = require('../utility/logger'); 7 | var winston = logger.getT(); 8 | var Discord = require('discord.js'); 9 | var execute = function (message) { 10 | if (message.author.id === config.owner_id) { 11 | let shardUtil = new Discord.ShardClientUtil(message.botUser); 12 | let content = message.content.substr(message.prefix.length + cmd.length).trim(); 13 | let contentSplit = content.split(']'); 14 | let streamUrl = contentSplit.length > 1 ? contentSplit[1] : 'https://www.twitch.tv/daswolke_'; 15 | if (content !== '') { 16 | winston.info(`this.user.setGame('${contentSplit[0]}', '${streamUrl}')`); 17 | shardUtil.broadcastEval(`this.user.setGame('${contentSplit[0]}', '${streamUrl}')`).then(res => { 18 | message.reply(`Set status to \`${contentSplit[0]}\` with url \`${streamUrl}\``); 19 | }).catch(winston.info); 20 | // message.botUser.user.setGame(contentSplit[0], streamUrl).then(()=> { 21 | // 22 | // }).catch(winston.info); 23 | } else { 24 | shardUtil.broadcastEval(`this.user.setGame('!w.help | shard ${parseInt(message.shard_id) + 1}/${message.shard_count}', 'https://www.twitch.tv/daswolke_')`).then(res => { 25 | message.reply(`Reset status back to \`!w.help | | shard ${parseInt(message.shard_id) + 1}/${message.shard_count}\``); 26 | }).catch(winston.info); 27 | // message.botUser.user.setGame(`!w.help | shard ${parseInt(message.shard_id) + 1}/${message.shard_count}`, 'https://www.twitch.tv/daswolke_').then().catch(winston.info).then(() => { 28 | // message.reply(`Reset status back to \`!w.help | | shard ${parseInt(message.shard_id) + 1}/${message.shard_count}\``); 29 | // }).catch(err => { 30 | // winston.error(err) 31 | // }); 32 | } 33 | } 34 | }; 35 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'admin'}; -------------------------------------------------------------------------------- /commands/setVolume.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var cmd = 'volume'; 5 | var i18nBean = require('../utility/i18nManager'); 6 | var t = i18nBean.getT(); 7 | var voice = require('../utility/voice'); 8 | var messageHelper = require('../utility/message'); 9 | var config = require('../config/main.json'); 10 | var execute = function (message) { 11 | if (message.guild) { 12 | if (messageHelper.hasWolkeBot(message) || config.beta) { 13 | voice.setVolume(message).then(response => { 14 | message.reply(response); 15 | }).catch(message.reply); 16 | } else { 17 | message.reply(t('generic.no-permission', {lngs:message.lang})); 18 | } 19 | } else { 20 | message.reply(t('generic.no-pm', {lngs:message.lang})); 21 | } 22 | }; 23 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'music'}; -------------------------------------------------------------------------------- /commands/showQueue.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var general = require('../utility/general'); 7 | var voice = require('../utility/voice'); 8 | var logger = require('../utility/logger'); 9 | var queueModel = require('../DB/queue'); 10 | var winston = logger.getT(); 11 | var cmd = 'queue'; 12 | var execute = function (message) { 13 | if (message.guild) { 14 | queueModel.findOne({server: message.guild.id}, function (err, Queue) { 15 | if (err) return winston.info(err); 16 | if (Queue) { 17 | if (Queue.songs.length > 0) { 18 | var reply = ""; 19 | let iteration = 20; 20 | if (Queue.songs.length > 20) { 21 | 22 | } else { 23 | iteration = Queue.songs.length; 24 | } 25 | for (var q = 0; q < iteration; q++) { 26 | if (q === 0) { 27 | const dispatcher = voice.getDispatcher(message.guild.voiceConnection); 28 | let repeat = Queue.repeat ? t('np.repeat-on', {lngs: message.lang}) : ""; 29 | if (typeof (Queue.songs[0].duration) !== 'undefined' && Queue.songs[0].duration !== '' && dispatcher) { 30 | let time = Math.floor(dispatcher.time / 1000); 31 | reply = reply + `${t('np.song-duration', { 32 | lngs: message.lang, 33 | title: Queue.songs[0].title, 34 | repeat: repeat, 35 | duration: Queue.songs[0].duration, 36 | current: general.convertSeconds(time), 37 | interpolation: {escape: false} 38 | })} \n`; 39 | } else { 40 | reply = reply + `${t('np.song', { 41 | lngs: message.lang, 42 | title: Queue.songs[0].title, 43 | repeat: repeat, 44 | interpolation: {escape: false} 45 | })}\n`; 46 | } 47 | if (Queue.songs.length > 1) { 48 | reply = `${reply}${t('queue.queued', {lngs: message.lang})}\n\`\`\``; 49 | } 50 | } else { 51 | let end = '\n'; 52 | if (q === Queue.songs.length - 1) { 53 | end = `\`\`\``; 54 | } 55 | if (typeof (Queue.songs[q].duration) !== 'undefined') { 56 | reply = reply + `${parseInt(q + 1)}. ${Queue.songs[q].title} ${Queue.songs[q].duration}${end}`; 57 | } else { 58 | reply = reply + `${parseInt(q + 1)}. ${Queue.songs[q].title}${end}`; 59 | } 60 | } 61 | 62 | } 63 | if (Queue.songs.length > 20) { 64 | reply = reply + `${parseInt(21)}. ${t('generic.more', { 65 | lngs: message.lang, 66 | number: Queue.songs.length - 20 67 | })}...\`\`\``; 68 | } 69 | message.channel.sendMessage(reply).then(msg => { 70 | msg.delete(60 * 1000); 71 | }).catch(winston.info); 72 | } else { 73 | message.reply(t('generic.no-song-in-queue', {lngs: message.lang})); 74 | } 75 | } else { 76 | message.reply(t('generic.no-song-in-queue', {lngs: message.lang})); 77 | } 78 | }); 79 | } else { 80 | message.reply(t('generic.no-pm', {lngs: message.lang})); 81 | } 82 | }; 83 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'music'}; -------------------------------------------------------------------------------- /commands/skipSong.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var messageHelper = require('../utility/message'); 7 | var voice = require('../utility/voice'); 8 | var logger = require('../utility/logger'); 9 | var osu = require('../utility/osu'); 10 | var winston = logger.getT(); 11 | var cmd = 'fskip'; 12 | var queueModel = require('../DB/queue'); 13 | var config = require('../config/main.json'); 14 | var execute = function (message) { 15 | if (message.guild) { 16 | if (voice.inVoice(message)) { 17 | if (messageHelper.hasWolkeBot(message) || config.beta) { 18 | queueModel.findOne({server: message.guild.id}, function (err, Queue) { 19 | if (err) return winston.error(err); 20 | let dispatcher = voice.getDispatcher(message.guild.voiceConnection); 21 | if (Queue) { 22 | if (Queue.songs.length > 0) { 23 | Queue.stopRepeat(function (err) { 24 | if (err) return winston.error(err); 25 | voice.nextSong(message, Queue.songs[0], false); 26 | message.reply(t('skip.success', { 27 | lngs: message.lang, 28 | title: Queue.songs[0].title, 29 | interpolation: {escape: false} 30 | })); 31 | }); 32 | } else { 33 | if (dispatcher) { 34 | dispatcher.end(); 35 | message.reply(t('skip.stop', {lngs:message.lang})); 36 | } else { 37 | message.reply(t('generic.no-song-playing', {lngs:message.lang})); 38 | } 39 | } 40 | } else { 41 | if (connection && connection.playing) { 42 | connection.stopPlaying(); 43 | message.reply(t('skip.stop', {lngs:message.lang})); 44 | } else { 45 | message.reply(t('generic.no-song-in-queue', {lngs:message.lang})); 46 | } 47 | } 48 | }); 49 | } else { 50 | message.reply(t('generic.no-permission', {lngs:message.lang})); 51 | } 52 | } else { 53 | message.reply(t('generic.no-voice', {lngs:message.lang})); 54 | } 55 | } else { 56 | message.reply(t('generic.no-pm', {lngs:message.lang})); 57 | } 58 | }; 59 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'music'}; -------------------------------------------------------------------------------- /commands/verifyProxer.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var messageHelper = require('../utility/message'); 5 | var logger = require('../utility/logger'); 6 | var userModel = require('../DB/user'); 7 | var winston = logger.getT(); 8 | var cmd = 'pr.code'; 9 | var execute = function (message) { 10 | let messageSplit = message.content.split(' '); 11 | if (typeof (messageSplit[1]) !== 'undefined') { 12 | userModel.findOne({id: message.author.id}, function (err, User) { 13 | if (err) return winston.info(err); 14 | if (User) { 15 | if (typeof (User.verified) !== 'undefined' && User.verified) { 16 | message.reply(`You are already verified with the Account: https://proxer.me/user/${User.proxerId}`); 17 | } else { 18 | if (typeof (User.verificationToken) !== 'undefined') { 19 | if (messageSplit[1] === User.verificationToken) { 20 | userModel.update({id: User.id}, {$set: {verified: true}}, (err) => { 21 | if (err) return winston.info(err); 22 | message.reply(`Ok i successfully verified you.`); 23 | }); 24 | } else { 25 | return message.reply(`This Token is wrong.`) 26 | } 27 | } else { 28 | return message.reply(`Send yourself a Token first with !w.pr.reg link to proxer account page`); 29 | } 30 | } 31 | } else { 32 | messageHelper.createUser(message, true, true, function (err) { 33 | userModel.findOne({id: message.author.id}, function (err, User) { 34 | if (err) return winston.info(err); 35 | if (User) { 36 | if (typeof (User.verified) !== 'undefined' && User.verified) { 37 | message.reply(`You are already verified with the Account: https://proxer.me/user/${User.proxerId}`); 38 | } else { 39 | if (typeof (User.verificationToken) !== 'undefined') { 40 | if (messageSplit[1] === User.verificationToken) { 41 | userModel.update({id: User.id}, {$set: {verified: true}}, (err) => { 42 | if (err) return winston.info(err); 43 | message.reply(`Ok i successfully verified you.`); 44 | }); 45 | } else { 46 | return message.reply(`This Token is wrong.`) 47 | } 48 | } else { 49 | return message.reply(`Send yourself a Token first with !w.pr.reg proxer-profilelink`); 50 | } 51 | } 52 | } else { 53 | message.reply('Arere Something went wrong...'); 54 | } 55 | }); 56 | }); 57 | } 58 | }); 59 | } else { 60 | message.reply('You have to add a Link to your Proxer Account for me to verify you!'); 61 | } 62 | }; 63 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'proxer'}; -------------------------------------------------------------------------------- /commands/voteskipSong.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 02.10.2016. 3 | */ 4 | var i18nBean = require('../utility/i18nManager'); 5 | var t = i18nBean.getT(); 6 | var voice = require('../utility/voice'); 7 | var logger = require('../utility/logger'); 8 | var queueModel = require('../DB/queue'); 9 | var winston = logger.getT(); 10 | var cmd = 'skip'; 11 | var execute = function (message) { 12 | if (message.guild) { 13 | voteSkip(message, function (err, response) { 14 | if (err) { 15 | return message.reply(err); 16 | } 17 | message.reply(response); 18 | }); 19 | } else { 20 | message.reply(t('generic.no-pm', {lngs: message.lang})); 21 | } 22 | }; 23 | var voteSkip = function voteSkip(message, cb) { 24 | if (message.member.voiceChannel) { 25 | queueModel.findOne({server: message.guild.id}, function (err, Queue) { 26 | if (err) return cb(err); 27 | if (Queue) { 28 | if (Queue.songs.length > 0) { 29 | if (voice.inVoice(message)) { 30 | var channel = voice.getVoiceChannel(message); 31 | if (channel.id === message.member.voiceChannelID) { 32 | if (channel.members.size > 2) { 33 | Queue.checkVote(message.author.id, function (err, found) { 34 | if (err) { 35 | winston.info(err); 36 | return cb(t('generic.error', {lngs: message.lang})); 37 | } 38 | if (!found) { 39 | Queue.updateVotes(message.author.id, function (err) { 40 | if (err) { 41 | winston.info(err); 42 | return cb(t('generic.error', {lngs: message.lang})); 43 | } 44 | Queue.reload(function (err, Queue) { 45 | if (err) return winston.info(err); 46 | if (Queue) { 47 | var voiceMembers = channel.members.size - 1; 48 | var votePercentage = Queue.voteSkip / voiceMembers; 49 | if (votePercentage > 0.51) { 50 | Queue.stopRepeat(function (err) { 51 | if (err) return cb(err); 52 | voice.nextSong(message, Queue.songs[0]); 53 | cb(null, t('vskip.success-skip', { 54 | lngs: message.lang, 55 | title: Queue.songs[0].title, 56 | interpolation: {escape: false} 57 | })); 58 | }); 59 | } else { 60 | cb(null, t('vskip.success-add', { 61 | lngs: message.lang, 62 | current: (votePercentage * 100).toFixed(2), 63 | needed: 51, 64 | interpolation: {escape: false} 65 | })); 66 | } 67 | } 68 | }); 69 | }); 70 | } else { 71 | cb(t('vskip.dup', {lngs: message.lang, interpolation: {escape: false}})); 72 | } 73 | }); 74 | } else { 75 | Queue.stopRepeat(function (err) { 76 | if (err) return cb(err); 77 | voice.nextSong(message, Queue.songs[0]); 78 | cb(null, t('vskip.success-skip', { 79 | lngs: message.lang, 80 | title: Queue.songs[0].title, 81 | interpolation: {escape: false} 82 | })); 83 | }); 84 | } 85 | } else { 86 | return cb(t('vskip.same-voice', {lngs: message.lang})); 87 | } 88 | } else { 89 | return cb(t('generic.no-voice', {lngs: message.lang})); 90 | } 91 | } else { 92 | return cb(t('generic.no-song-in-queue', {lngs: message.lang})); 93 | } 94 | } else { 95 | return cb(t('generic.no-song-in-queue', {lngs: message.lang})); 96 | } 97 | }); 98 | } else { 99 | return cb(t('vskip.user-no-voice', {lngs: message.lang})); 100 | } 101 | }; 102 | module.exports = {cmd: cmd, accessLevel: 0, exec: execute, cat: 'music'}; -------------------------------------------------------------------------------- /config/lewd.json: -------------------------------------------------------------------------------- 1 | { 2 | "images":[ 3 | "(1).gif", 4 | " (2).gif", 5 | " (3).gif", 6 | " (4).gif", 7 | " (5).gif", 8 | " (6).gif", 9 | " (7).gif", 10 | " (8).gif", 11 | " (1).jpg", 12 | " (2).jpg", 13 | " (3).jpg", 14 | " (4).jpg", 15 | " (5).jpg", 16 | " (6).jpg", 17 | " (1).png", 18 | " (2).png", 19 | " (3).png", 20 | " (4).png", 21 | " (5).png", 22 | " (6).png", 23 | " (7).png", 24 | " (8).png" 25 | ], 26 | "rem":[ 27 | "(1).jpg", 28 | "(2).jpg", 29 | "(3).jpg", 30 | "(4).jpg", 31 | "(5).jpg", 32 | "(6).jpg", 33 | "(1).png", 34 | "(2).png" 35 | ] 36 | } -------------------------------------------------------------------------------- /config/main.json.example: -------------------------------------------------------------------------------- 1 | { 2 | "owner":"", 3 | "owner_id":"", 4 | "token":"", 5 | "client_id":"", 6 | "bot_id":"", 7 | "version": "9.5-alpha", 8 | "beta":true, 9 | "osu_token":"", 10 | "osu_path":"./audio/osu/", 11 | "osu_username":"", 12 | "osu_password":"", 13 | "youtube_api":"", 14 | "proxer_api":"", 15 | "proxer_user":"", 16 | "proxer_pass":"", 17 | "discord_bots_token":"", 18 | "sentry_token":"", 19 | "shards":2, 20 | "yahoo_app_id":"", 21 | "admins":[ 22 | "" 23 | ], 24 | "linux":false 25 | } -------------------------------------------------------------------------------- /fonts/RegencieLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DasWolke/discordbot/ff49ef732c5a6226eb45f69a1182d7877c0c8596/fonts/RegencieLight.ttf -------------------------------------------------------------------------------- /fonts/RegencieLightAlt.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DasWolke/discordbot/ff49ef732c5a6226eb45f69a1182d7877c0c8596/fonts/RegencieLightAlt.ttf -------------------------------------------------------------------------------- /fonts/RegencieLightAltObl.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DasWolke/discordbot/ff49ef732c5a6226eb45f69a1182d7877c0c8596/fonts/RegencieLightAltObl.ttf -------------------------------------------------------------------------------- /fonts/RegencieLightObl.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DasWolke/discordbot/ff49ef732c5a6226eb45f69a1182d7877c0c8596/fonts/RegencieLightObl.ttf -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "discord-bot-rem", 3 | "version": "9.8.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "ascii-table": "0.0.9", 13 | "async": "^2.1.4", 14 | "blocked": "latest", 15 | "bluebird": "latest", 16 | "cleverbot-node": "^0.2.4", 17 | "cloudscraper": "^1.4.0", 18 | "discord.js": "^10.0.1", 19 | "fibers": "^1.0.15", 20 | "fluent-ffmpeg": "^2.1.0", 21 | "i18next": "^3.5.2", 22 | "i18next-node-fs-backend": "^0.1.2", 23 | "icy": "^2.1.0", 24 | "le-table": "^6.1.4", 25 | "lodash": "^4.17.2", 26 | "minimist": "^1.2.0", 27 | "moment": "^2.17.1", 28 | "mongoose": "^4.7.3", 29 | "node-dogstatsd": "0.0.6", 30 | "node-opus": "^0.2.4", 31 | "node-osu": "^1.1.0", 32 | "opusscript": "0.0.1", 33 | "osu-api": "0.0.3", 34 | "raven": "^0.12.3", 35 | "request": "^2.79.0", 36 | "shortid": "^2.2.6", 37 | "socket.io-client": "^1.7.2", 38 | "stream-to": "^2.0.0", 39 | "unzip": "^0.1.11", 40 | "x2js": "^3.1.0", 41 | "youtube-api": "^2.0.4", 42 | "youtube-dl": "^1.11.1", 43 | "youtube-search": "^1.0.6", 44 | "ytdl-core": "^0.7.20" 45 | }, 46 | "devDependencies": { 47 | "winston": "^2.2.0" 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /sharding.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 19.09.2016. 3 | */ 4 | const Discord = require('discord.js'); 5 | const config = require('./config/main.json'); 6 | var winston = require('winston'); 7 | var request = require("request"); 8 | let guilds = 0; 9 | let users = 0; 10 | if (!config.beta) { 11 | var StatsD = require('node-dogstatsd').StatsD; 12 | var dogstatsd = new StatsD(); 13 | } 14 | let ShardManager = new Discord.ShardingManager('./index.js', {}, config.shards, true); 15 | ShardManager.spawn(config.shards, 8000).then(shards => { 16 | winston.info('Spawned Shards!'); 17 | timerFetchGuilds(); 18 | }).catch(winston.error); 19 | function timerFetchGuilds() { 20 | winston.info('Fetching Guilds - timer!'); 21 | setTimeout(() => { 22 | fetchGuilds(); 23 | setInterval(() => { 24 | fetchGuilds(); 25 | }, 1000 * 60 * 5); 26 | }, 1000 * 10); 27 | } 28 | function fetchGuilds() { 29 | winston.info('Fetching Guilds!'); 30 | ShardManager.fetchClientValues('guilds.size').then(results => { 31 | ShardManager.broadcastEval('var x=0;this.guilds.map(g => {x += g.memberCount});x;').then(res => { 32 | winston.info(res); 33 | res = res.reduce((a, b) => a + b); 34 | users = res; 35 | winston.info('loaded guilds!'); 36 | guilds = results.reduce((prev, val) => prev + val, 0); 37 | winston.info(`${results.reduce((prev, val) => prev + val, 0)} total guilds`); 38 | updateStats(); 39 | }).catch(err => { 40 | winston.error(err); 41 | }); 42 | }).catch(err => { 43 | winston.error(err); 44 | }); 45 | } 46 | function updateStats() { 47 | if (!config.beta) { 48 | dogstatsd.gauge('musicbot.guilds', guilds); 49 | dogstatsd.gauge('musicbot.users', users); 50 | } 51 | let requestOptions = { 52 | headers: { 53 | Authorization: config.discord_bots_token 54 | }, 55 | url: `https://bots.discord.pw/api/bots/${config.bot_id}/stats`, 56 | method: 'POST', 57 | json: { 58 | "server_count": guilds 59 | } 60 | }; 61 | request(requestOptions, function (err, response, body) { 62 | if (err) { 63 | return winston.error(err); 64 | } 65 | winston.info('Stats Updated!'); 66 | winston.info(body); 67 | }); 68 | if (!config.beta) { 69 | let requestOptionsCarbon = { 70 | url: `https://www.carbonitex.net/discord/data/botdata.php`, 71 | method: 'POST', 72 | json: { 73 | "server_count": guilds, 74 | "key": config.carbon_token 75 | } 76 | }; 77 | request(requestOptionsCarbon, function (err, response, body) { 78 | if (err) { 79 | return winston.error(err); 80 | } 81 | winston.info('Stats Updated Carbon!'); 82 | winston.info(body); 83 | }); 84 | } 85 | } -------------------------------------------------------------------------------- /utility/Cache/cacheManager.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 01.10.2016. 3 | */ 4 | -------------------------------------------------------------------------------- /utility/assets/hide.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DasWolke/discordbot/ff49ef732c5a6226eb45f69a1182d7877c0c8596/utility/assets/hide.jpg -------------------------------------------------------------------------------- /utility/assets/template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DasWolke/discordbot/ff49ef732c5a6226eb45f69a1182d7877c0c8596/utility/assets/template.png -------------------------------------------------------------------------------- /utility/cleverbot.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 10.07.2016. 3 | */ 4 | var Cleverbot = require("cleverbot-node"); 5 | var logger = require('./logger'); 6 | var winston = logger.getT(); 7 | var talkCleverBot = function talkCleverBot(message) { 8 | var clever = new Cleverbot; 9 | var re = /<@[0-9].*>/g; 10 | var messageClean = message.content.replace(re, ""); 11 | Cleverbot.prepare(function(){ 12 | clever.write(messageClean, function (response) { 13 | // winston.info(response); 14 | message.reply(response.message); 15 | }); 16 | }); 17 | }; 18 | module.exports = {talk:talkCleverBot}; 19 | -------------------------------------------------------------------------------- /utility/cmdManager.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julian on 16.05.2016. 3 | */ 4 | var commands = {}; 5 | const fs = require('fs'); 6 | const path = require('path'); 7 | var logger = require('./logger'); 8 | var winston = logger.getT(); 9 | var config = require('../config/main.json'); 10 | commands.load = {}; 11 | commands.load.cat = 'admin'; 12 | commands.load.cmd = "load"; 13 | commands.load.accessLevel = 2; 14 | commands.load.exec = function (msg) { 15 | if (msg.author.id == config.owner_id) { 16 | var args = msg.content.split(' ')[1]; 17 | try { 18 | delete commands[args]; 19 | delete require.cache[path.join(__dirname, '../commands/', `${args}.js`)]; 20 | let cmd = require(path.join(__dirname, '../commands/', `${args}.js`)); 21 | commands[cmd.cmd] = cmd; 22 | msg.channel.sendMessage('Loaded ' + args); 23 | } catch (err) { 24 | msg.channel.sendMessage("Command not found or error loading\n`" + err.message + "`"); 25 | } 26 | } 27 | }; 28 | 29 | commands.unload = {}; 30 | commands.unload.cat = 'admin'; 31 | commands.unload.cmd = "unload"; 32 | commands.unload.accessLevel = 2; 33 | commands.unload.exec = function (msg) { 34 | if (msg.author.id == config.owner_id) { 35 | var args = msg.content.split(' ')[1]; 36 | try { 37 | delete commands[args]; 38 | delete require.cache[path.join(__dirname, '../commands/', `${args}.js`)]; 39 | msg.channel.sendMessage('Unloaded ' + args); 40 | } 41 | catch (err) { 42 | msg.channel.sendMessage("Command not found"); 43 | } 44 | } 45 | }; 46 | 47 | commands.reload = {}; 48 | commands.reload.cat = 'admin'; 49 | commands.reload.accessLevel = 2; 50 | commands.reload.cmd = "reload"; 51 | commands.reload.exec = function (msg) { 52 | if (msg.author.id == config.owner_id) { 53 | var args = msg.content.split(' ')[1]; 54 | try { 55 | delete commands[args]; 56 | delete require.cache[path.join(__dirname, '../commands/', `${args}.js`)]; 57 | let cmd = require(path.join(__dirname, '../commands/', `${args}.js`)); 58 | commands[cmd.cmd] = cmd; 59 | msg.channel.sendMessage('Reloaded ' + args); 60 | } 61 | catch (err) { 62 | msg.channel.sendMessage("Command not found"); 63 | } 64 | } 65 | }; 66 | var init = function () { 67 | loadCommands(); 68 | }; 69 | var loadCommands = function () { 70 | fs.readdir(path.join(__dirname, '../commands'), (err, files) => { 71 | for (let file of files) { 72 | if (file.endsWith('.js')) { 73 | var command = require(path.join(__dirname, '../commands/', file)); 74 | commands[command.cmd] = command; 75 | } 76 | } 77 | winston.info('Loaded Commands'); 78 | saveCommands(commands); 79 | }); 80 | }; 81 | var getCommands = function () { 82 | return commands; 83 | }; 84 | var saveCommands = function (t) { 85 | commands = t; 86 | }; 87 | var checkCommand = function (msg) { 88 | try { 89 | let command = msg.content.substr(msg.prefix.length).split(' ')[0]; 90 | let accessLevel = commands[command].accessLevel; 91 | let userAccessLevel = 2; 92 | if (userAccessLevel >= accessLevel) { 93 | winston.info(msg.content); 94 | commands[command].exec(msg); 95 | } else { 96 | msg.reply(`Your current access level of ${userAccessLevel} is not enough for the needed accesslevel of ${accessLevel}`) 97 | } 98 | } 99 | catch (err) { 100 | winston.error(err.message); 101 | winston.error(err.stack); 102 | } 103 | }; 104 | module.exports = { 105 | init: init, 106 | checkCommand: checkCommand, 107 | loadCommands: loadCommands, 108 | getCommands: getCommands, 109 | saveCommands: saveCommands 110 | }; -------------------------------------------------------------------------------- /utility/errorReporter.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 18.09.2016. 3 | */ 4 | var errorBean; 5 | var setT = (t) => { 6 | errorBean = t; 7 | }; 8 | var getT = () => { 9 | return errorBean; 10 | }; 11 | module.exports = {setT:setT, getT:getT};/** 12 | * Created by julia on 19.09.2016. 13 | */ 14 | -------------------------------------------------------------------------------- /utility/general.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 18.07.2016. 3 | */ 4 | var random = function getRandomArbitrary(min, max) { 5 | return Math.floor(Math.random() * (max - min) + min); 6 | }; 7 | var convertSeconds = function (s) { 8 | return (s - (s %= 60)) / 60 + (9 < s ? ':' : ':0') + s 9 | }; 10 | module.exports = {random: random, convertSeconds:convertSeconds}; -------------------------------------------------------------------------------- /utility/i18nManager.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 18.09.2016. 3 | */ 4 | var i18nBean; 5 | var setT = (t) => { 6 | i18nBean = t; 7 | }; 8 | var getT = () => { 9 | return i18nBean; 10 | }; 11 | module.exports = {setT:setT, getT:getT}; -------------------------------------------------------------------------------- /utility/logger.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 19.09.2016. 3 | */ 4 | var logger; 5 | var setT = (t) => { 6 | logger = t; 7 | }; 8 | var getT = () => { 9 | return logger; 10 | }; 11 | module.exports = {setT:setT, getT:getT}; 12 | -------------------------------------------------------------------------------- /utility/music.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 01.10.2016. 3 | */ 4 | var songModel = require('../DB/song'); 5 | var YoutubeReg = /(?:http?s?:\/\/)?(?:www\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=)?([a-zA-Z0-9_-]+)(&.*|)/; 6 | var SoundcloudReg = /(?:http?s?:\/\/)?(?:www\.)?(?:soundcloud\.com|snd\.sc)\/(?:.*)/; 7 | var createSong = function (title, alt_title, id, addedBy, duration, url, dl, path, proxy, setId) { 8 | return new Promise((resolve, reject) => { 9 | let song = new songModel({ 10 | title: title, 11 | alt_title: alt_title, 12 | id: id, 13 | addedBy: addedBy, 14 | addedAt: new Date(), 15 | duration: duration, 16 | type: "audio/mp3", 17 | url: url, 18 | dl: dl, 19 | dlBy: proxy, 20 | cached: true, 21 | cachedAt: new Date(), 22 | cachedUntil: new Date(), 23 | path: path, 24 | setId:setId 25 | }); 26 | song.save((err) => { 27 | if (err) return reject(err); 28 | resolve(song); 29 | }) 30 | }); 31 | }; 32 | var checkOsuMap = function (url) { 33 | let setRegex = /(?:http(?:s|):\/\/osu.ppy.sh\/(s|b)\/([0-9]*)((\?|\&)m=[0-9]|))/; 34 | return(!!setRegex.test(url)); 35 | }; 36 | var checkMedia = function (url) { 37 | if (YoutubeReg.test(url)) { 38 | return true; 39 | } else { 40 | return !!SoundcloudReg.test(url); 41 | } 42 | }; 43 | module.exports = { 44 | createSong: createSong, 45 | checkOsuMap: checkOsuMap, 46 | checkMedia: checkMedia, 47 | ytRegex: YoutubeReg, 48 | scRegex: SoundcloudReg 49 | }; -------------------------------------------------------------------------------- /utility/proxer/login/login.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 05.09.2016. 3 | */ 4 | var request = require('request'); 5 | var config = require('../../../config/main.json'); 6 | var data = { 7 | 'username': config.proxer_user, 8 | 'password': config.proxer_pass, 9 | 'api_key': config.proxer_api 10 | }; 11 | var options = { 12 | method: 'POST', 13 | url: 'http://proxer.me/api/v1/user/login', 14 | headers: { 15 | 'cache-control': 'no-cache' 16 | }, 17 | formData: data 18 | }; 19 | var login = function (cb) { 20 | request.post(options, function (err, res, body) { 21 | if (err) return cb(err); 22 | var parsedBody = JSON.parse(body); 23 | if (parsedBody.error === 0) { 24 | return cb(null, parsedBody); 25 | } 26 | }); 27 | }; 28 | module.exports = login; -------------------------------------------------------------------------------- /utility/proxer/messenger/getUserInfo.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 14.09.2016. 3 | */ 4 | var request = require('request'); 5 | var config = require('../../../config/main.json'); 6 | var getUserInfo = function (id,token,cb) { 7 | var data = { 8 | user_id:id, 9 | 'api_key': config.proxer_api 10 | }; 11 | var options = { 12 | method: 'POST', 13 | url: 'https://proxer.me/api/v1/messenger/userinfo', 14 | headers: { 15 | 'cache-control': 'no-cache', 16 | 'proxer-api-token':token 17 | }, 18 | formData: data 19 | }; 20 | request.post(options, function (err, res, body) { 21 | if (err) return cb(err); 22 | var parsedBody = JSON.parse(body); 23 | if (parsedBody.error === 0 && typeof (parsedBody.data) !== 'undefined') { 24 | return cb(null, parsedBody.data); 25 | } else { 26 | return cb(parsedBody, null); 27 | } 28 | }); 29 | }; 30 | module.exports = getUserInfo; -------------------------------------------------------------------------------- /utility/proxer/messenger/sendMessage.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 14.09.2016. 3 | */ 4 | var request = require('request'); 5 | var config = require('../../../config/main.json'); 6 | var sendMessage = function (username,text,token,cb) { 7 | var data = { 8 | text:text, 9 | username:username, 10 | 'api_key': config.proxer_api 11 | }; 12 | var options = { 13 | method: 'POST', 14 | url: 'https://proxer.me/api/v1/messenger/newconference', 15 | headers: { 16 | 'cache-control': 'no-cache', 17 | 'proxer-api-token':token 18 | }, 19 | formData: data 20 | }; 21 | request.post(options, function (err, res, body) { 22 | if (err) return cb(err); 23 | var parsedBody = JSON.parse(body); 24 | if (parsedBody.error === 0) { 25 | return cb(null, parsedBody); 26 | } else { 27 | return cb(parsedBody); 28 | } 29 | }); 30 | }; 31 | module.exports = sendMessage; -------------------------------------------------------------------------------- /utility/proxer/user/verifyUser.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 05.09.2016. 3 | */ 4 | var userModel = require('../../../DB/user'); 5 | var login = require('./../login/login'); 6 | var getInfo = require('./../messenger/getUserInfo'); 7 | var sendMessage = require('./../messenger/sendMessage'); 8 | var verify = function (discordId, proxerId, cb) { 9 | login(function (err, body) { 10 | if (err) return cb(err); 11 | const token = body.data.token; 12 | getInfo(proxerId, token, function (err, data) { 13 | if (err) { 14 | return cb(err); 15 | } 16 | if (typeof (data.username) !== 'undefined' && data.username !== '') { 17 | let proxer_name = data.username; 18 | var verificationToken = Math.floor((Math.random() * 1000) + (Math.random() * 1000)); 19 | sendMessage(data.username, `Dein Verifizierungstoken für den Proxer Discord: ${verificationToken}`, token, function (err, data) { 20 | if (err) return cb(err); 21 | userModel.update({id: discordId}, { 22 | $set: { 23 | verificationToken: verificationToken, 24 | proxerId: proxerId 25 | } 26 | }, function (err) { 27 | if (err) return cb(err); 28 | cb(null, data, proxer_name); 29 | }); 30 | }); 31 | } else { 32 | cb('Username is undefined!'); 33 | } 34 | }); 35 | }); 36 | 37 | }; 38 | module.exports = verify; -------------------------------------------------------------------------------- /utility/socket/basic.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 24.07.2016. 3 | */ 4 | var config = require('../../config/main.json'); 5 | var logger = require('../logger'); 6 | var winston = logger.getT(); 7 | var init = function init(socket) { 8 | socket.on('connect', function(){ 9 | winston.info('Connected to Socket Server!'); 10 | }); 11 | socket.on('connect_error', function(error){ 12 | // winston.info('Error connecting:' + error); 13 | }); 14 | socket.on('disconnect', function(){ 15 | winston.info('Disconnected from Socket Server!'); 16 | }); 17 | socket.on('auth', function () { 18 | socket.emit('auth', {token:config.web_token}); 19 | }); 20 | socket.on('auth:success', function () { 21 | winston.info('Authenticated Successfully with Server!'); 22 | }); 23 | var interval = setInterval(function () { 24 | socket.emit('online'); 25 | }, 1000*10) 26 | }; 27 | module.exports = {init:init}; -------------------------------------------------------------------------------- /utility/voice/open.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by julia on 31.10.2016. 3 | */ 4 | var fs = require('fs'); 5 | var path = require('path'); 6 | process.on('message', (m) => { 7 | let stream = fs.createReadStream(path.resolve(m.path)); 8 | stream.pipe(fs.createWriteStream(null, {fd: 3})) 9 | stream.on('end', () => { 10 | setTimeout(() => { 11 | process.exit(0); 12 | }, 1000); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /utility/voice/randomQueue.js: -------------------------------------------------------------------------------- 1 | var voice = require("../voice.js"); 2 | var async = require("async"); 3 | var general = require("../general.js"); 4 | var songModel = require('../../DB/song'); 5 | /** 6 | * Created by julia on 31.10.2016. 7 | */ 8 | var addToQueue = (iteration, cb) => { 9 | songModel.count({type: {$ne: 'radio'}}, function (err, C) { 10 | // if (err) return message.channel.sendMessage(t('qa.db-error', {lngs: message.lang})); 11 | var random = general.random(0, C); 12 | songModel.find({type: {$ne: 'radio'}}, function (err, Songs) { 13 | if (err) return cb(err); 14 | let Song; 15 | if (iteration === 0) { 16 | if (typeof(Songs[random]) !== 'undefined') { 17 | Song = Songs[random]; 18 | voice.addToQueue(message, Song, false, (err, result) => { 19 | if (err) return cb(err); 20 | cb(null, result); 21 | }); 22 | 23 | } else { 24 | cb({error: 'no-voice'}); 25 | } 26 | } else if (iteration <= 100) { 27 | var randoms = []; 28 | for (var i = 0; i < iteration; i++) { 29 | random = general.random(0, Songs.length); 30 | Song = Songs[random]; 31 | Songs.splice(random, 1); 32 | randoms.push(Song); 33 | } 34 | let addedSongs = 0; 35 | async.eachSeries(randoms, ((randomSong, cb) => { 36 | voice.addToQueue(message, randomSong, false, (err, result) => { 37 | if (err) return cb(err); 38 | addedSongs = addedSongs + 1; 39 | return cb(); 40 | }); 41 | }), (err) => { 42 | if (err) return cb(err); 43 | if (addedSongs > 0) { 44 | let table = new AsciiTable(); 45 | for (var i = 0; i < addedSongs; i++) { 46 | table.addRow(i + 1, randoms[i].title); 47 | } 48 | // message.channel.sendMessage(t('rq.success-multiple', { 49 | // table: table.toString(), 50 | // lngs: message.lang, 51 | // interpolation: {escape: false} 52 | // })).then(msg => { 53 | // msg.delete(60 * 1000); 54 | // }).catch(winston.info); 55 | } 56 | }); 57 | 58 | { 59 | return cb({error: ':x: :keycap_ten: :zero: :musical_note: '}); 60 | } 61 | } 62 | 63 | }); 64 | }); 65 | }; -------------------------------------------------------------------------------- /utility/youtube/sub/downloadProxy.js: -------------------------------------------------------------------------------- 1 | var fs = require("fs"); 2 | var request = require("request"); 3 | var winston = require('winston'); 4 | var songModel = require('../../../DB/song'); 5 | var mongoose = require("mongoose"); 6 | var config = require('../../../config/main.json'); 7 | let url; 8 | if (config.beta) { 9 | url = 'mongodb://localhost/discordbot-beta'; 10 | } else { 11 | url = 'mongodb://localhost/discordbot'; 12 | } 13 | mongoose.connect(url, (err) => { 14 | if (err) { 15 | return winston.error("Unable to connect to Mongo Server!"); 16 | } 17 | }); 18 | process.on('message', (m) => { 19 | downloadProxy(m.url, m.author, 1, (err, info) => { 20 | process.send({err: err, info: info}); 21 | }) 22 | }); 23 | var downloadProxy = function (url, authorId, proxy, cb) { 24 | let proxy_url; 25 | if (proxy === 0) { 26 | proxy_url = "http://localhost:7005"; 27 | } else if (proxy === 1) { 28 | proxy_url = config.dl_url_1; 29 | } else { 30 | proxy_url = config.dl_url_2; 31 | } 32 | let options = { 33 | url: `${proxy_url}/api/dl`, 34 | headers: { 35 | auth: config.dl_token 36 | }, 37 | form: { 38 | url: url 39 | }, 40 | method: 'POST', 41 | timeout: 240000 42 | }; 43 | request(options, (error, response, body) => { 44 | if (error) { 45 | // client.captureMessage(error, {extra: {'url': url, 'proxy': proxy}}); 46 | return cb(error); 47 | } 48 | let parsedBody = {error: 1}; 49 | try { 50 | parsedBody = JSON.parse(body); 51 | } catch (e) { 52 | // client.captureMessage(e, {extra: {'url': url, 'proxy': proxy, 'json': body}}); 53 | } 54 | console.log(parsedBody); 55 | if (parsedBody.error === 0) { 56 | winston.info(parsedBody.path); 57 | winston.info(`${proxy_url}${parsedBody.path}`); 58 | var stream = request(`${proxy_url}/${parsedBody.path}`).on('error', (err) => { 59 | return cb(err); 60 | }).pipe(fs.createWriteStream(`audio/${parsedBody.info.id}.mka`)); 61 | stream.on('finish', () => { 62 | var song = new songModel({ 63 | title: parsedBody.info.title, 64 | alt_title: parsedBody.info.alt_title, 65 | id: parsedBody.info.id, 66 | addedBy: authorId, 67 | addedAt: Date.now(), 68 | duration: convertDuration(parsedBody.info), 69 | type: "audio/mka", 70 | url: url, 71 | dl: "stream", 72 | dlBy: `proxy_${proxy}`, 73 | cached: true, 74 | cachedAt: new Date(), 75 | path: `audio/${parsedBody.info.id}.mka` 76 | }); 77 | song.save((err) => { 78 | if (err) return cb(err); 79 | cb(null, parsedBody.info); 80 | }); 81 | }); 82 | } else { 83 | if (proxy === 2) { 84 | // client.captureMessage('The Proxy did not work.', { 85 | // extra: { 86 | // 'url': url, 87 | // 'proxy': proxy, 88 | // 'guild': message.guild.name 89 | // } 90 | // }); 91 | return cb('The Proxy did not work.'); 92 | } else { 93 | downloadProxy(url, authorId, proxy + 1, cb); 94 | } 95 | } 96 | }); 97 | }; 98 | var convertDuration = function (info) { 99 | let durationConv = ""; 100 | if (typeof (info.duration) === 'undefined' && typeof (info.length_seconds) === 'undefined') { 101 | // client.captureMessage('Duration undefined!', {extra: {'info': info}}); 102 | } 103 | if (typeof (info.duration) !== 'undefined') { 104 | let durationSplit = info.duration.split(':'); 105 | for (var i = 0; i < durationSplit.length; i++) { 106 | if (i !== durationSplit.length - 1) { 107 | if (durationSplit[i].length === 1) { 108 | durationConv = durationConv + '0' + durationSplit[i] + ':'; 109 | } else { 110 | durationConv = durationConv + durationSplit[i] + ':'; 111 | } 112 | } else { 113 | if (durationSplit[i].length === 1) { 114 | durationConv = durationConv + '0' + durationSplit[i]; 115 | } else { 116 | durationConv = durationConv + durationSplit[i]; 117 | } 118 | } 119 | } 120 | winston.info(durationConv); 121 | } else { 122 | let d = Number(info.length_seconds); 123 | var h = Math.floor(d / 3600); 124 | var m = Math.floor(d % 3600 / 60); 125 | var s = Math.floor(d % 3600 % 60); 126 | return ((h > 0 ? h + ":" + (m < 10 ? "0" : "") : "") + m + ":" + (s < 10 ? "0" : "") + s); 127 | } 128 | return durationConv; 129 | }; --------------------------------------------------------------------------------