Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 'use strict';
- var Discord = require("discord.io");
- var EventEmitter = require("events").EventEmitter;
- var inherits = require('inherits');
- var util = require('./../web/script/common/util');
- module.exports = Inbox;
- inherits(Inbox, EventEmitter);
- var botExclusionBypass = [];
- function Inbox(config) {
- var bot = new Discord.Client({ autorun: true, token: config.get('token') });
- EventEmitter.call(this);
- this.bot = bot;
- var self = this;
- bot.on('ready', bot.getAllUsers);
- bot.on('allUsers', function() {
- if(self.servers) return; // Don't re-initialize if reconnecting
- console.log(new Date(), 'Logged in as: ' + bot.username + ' - (' + bot.id + ')');
- bot.setPresence({game:{name:"disworld.unreal-designs.co.uk"}});
- var serverList = config.get('servers');
- var serverIDs = [];
- self.servers = {};
- for(var i = 0; i < serverList.length; i++) {
- if(!bot.servers[serverList[i].id]) { // Skip unknown servers
- console.log('Unknown server ID:',serverList[i].id);
- continue;
- }
- var newServer = { discordID: serverList[i].id, name: bot.servers[serverList[i].id].name };
- newServer.users = bot.servers[serverList[i].id].members;
- newServer.usersBots = Object.keys(newServer.users).filter(function(item){
- return item.bot;
- });
- if((newServer.usersBots.length/newServer.users.length) > 0.5 && !(serverList[i].id in botExclusionBypass)) {
- bot.sendMessage({to: bot.servers[serverList[i].id].owner_id, message: "Bot farm detected (50% or more bots). If you wish to be excluded from auto-removal, please contact IPv4 at discord.gg/qyXqA7y"}, function() {
- bot.leaveServer(serverList[i].id, function() {
- console.log("Left "+serverList[i].id+" due to 50% or more bots");
- bot.disconnect();
- self.emit('abort','abort');
- });
- });
- } else {
- newServer.id = util.abbreviate(newServer.name, serverIDs);
- serverIDs.push(newServer.id);
- if(serverList[i].password) newServer.password = serverList[i].password;
- if(serverList[i].ignoreChannels) newServer.ignoreChannels = serverList[i].ignoreChannels;
- if(serverList[i].listenChannels) newServer.listenChannels = serverList[i].listenChannels;
- if(serverList[i].default) self.servers.default = newServer;
- self.servers[serverList[i].id] = newServer;
- }
- }
- console.log('Connected to',Object.keys(self.servers).length-1, 'server(s)');
- self.emit('connected');
- require('fs').writeFileSync('./bot.json', JSON.stringify(bot, null, '\t'));
- });
- bot.on('message', function(user, userID, channelID, message, rawEvent) {
- if(bot.directMessages[channelID] && userID === "193060889111298048" && message.trim() === "reboot") {
- bot.sendMessage({
- to: userID,
- message: "rebooting"
- },
- function(e, r) {
- console.log(e, r);
- });
- self.emit('cmdReboot');
- return;
- }
- if(!bot.channels[channelID]) return;
- var serverID = bot.channels[channelID].guild_id;
- if(!self.servers || !self.servers[serverID]) return;
- if(self.servers[serverID].ignoreChannels // Check if this channel is ignored
- && self.servers[serverID].ignoreChannels.indexOf(bot.channels[channelID].name) >= 0) return;
- if(self.servers[serverID].listenChannels // Check if this channel is listened to
- && self.servers[serverID].listenChannels.indexOf(bot.channels[channelID].name) < 0) return;
- var messageObject = {
- type: 'message', servers: [serverID],
- data: { uid: userID, message: bot.fixMessage(message), channel: channelID }
- };
- self.emit('message',messageObject);
- });
- bot.on('presence', function(user, userID, status, rawEvent) {
- var userInServers = [];
- for(var sKey in bot.servers) { if(!bot.servers.hasOwnProperty(sKey)) continue;
- if(bot.servers[sKey].members && bot.servers[sKey].members[userID]) userInServers.push(sKey);
- }
- var presence = {
- type: 'presence', servers: userInServers, data: { uid: userID, status: status }
- };
- self.emit('presence',presence);
- });
- bot.on('disconnect', function() {
- console.log("Bot disconnected, reconnecting...");
- setTimeout(function(){
- bot.connect(); //Auto reconnect after 5 seconds
- },5000);
- });
- bot.on('guildCreate', function(server) {
- setTimeout(function(){
- self.emit('guildCreate',server);
- },5000);
- });
- }
- Inbox.prototype.getUsers = function(connectRequest) {
- var server = this.servers[connectRequest.server];
- if(!server) { // If requested server ID is not a Discord ID, check abbreviated IDs
- for(var sKey in this.servers) { if(!this.servers.hasOwnProperty(sKey)) continue;
- if(this.servers[sKey].id == connectRequest.server) {
- server = this.servers[sKey];
- break;
- }
- }
- }
- if(!server) return 'unknown-server';
- if(server.password && server.password !== connectRequest.password) return 'bad-password';
- var discordServer = this.bot.servers[server.discordID], users = {};
- var discordSize = Object.keys(discordServer.members).length;
- for(var uid in discordServer.members) {
- if(!discordServer.members.hasOwnProperty(uid)) continue;
- var member = discordServer.members[uid];
- if(discordSize > 1000 && member.status == 'offline') continue;
- if(discordSize > 2000 && member.status == 'idle') continue;
- users[uid] = {
- id: member.id,
- username: member.nick || member.username,
- status: member.status
- };
- users[uid].roleColor = false;
- users[uid].roleName = false;
- var rolePosition = -1;
- for(var i = 0; i < discordServer.members[uid].roles.length; i++) {
- var role = discordServer.roles[discordServer.members[uid].roles[i]];
- if(!role || !role.color || role.position < rolePosition) continue;
- users[uid].roleColor = '#'+('00000'+role.color.toString(16)).substr(-6);
- users[uid].roleName = role.name;
- rolePosition = role.position;
- }
- }
- return { server: server, userList: users };
- };
- Inbox.prototype.getServers = function() {
- var serverList = {};
- for(var sKey in this.servers) { if(!this.servers.hasOwnProperty(sKey)) continue;
- var key = sKey == 'default' ? sKey : this.servers[sKey].id;
- serverList[key] = { discordID: this.servers[sKey].discordID, id: this.servers[sKey].id, name: this.servers[sKey].name };
- if(this.servers[sKey].password) serverList[key].passworded = true;
- }
- return serverList;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement