Advertisement
Guest User

Untitled

a guest
Aug 12th, 2017
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.74 KB | None | 0 0
  1. 'use strict';
  2. var Discord = require("discord.io");
  3. var EventEmitter = require("events").EventEmitter;
  4. var inherits = require('inherits');
  5. var util = require('./../web/script/common/util');
  6.  
  7. module.exports = Inbox;
  8. inherits(Inbox, EventEmitter);
  9.  
  10. var botExclusionBypass = [];
  11.  
  12. function Inbox(config) {
  13. var bot = new Discord.Client({ autorun: true, token: config.get('token') });
  14. EventEmitter.call(this);
  15. this.bot = bot;
  16. var self = this;
  17. bot.on('ready', bot.getAllUsers);
  18. bot.on('allUsers', function() {
  19. if(self.servers) return; // Don't re-initialize if reconnecting
  20. console.log(new Date(), 'Logged in as: ' + bot.username + ' - (' + bot.id + ')');
  21. bot.setPresence({game:{name:"disworld.unreal-designs.co.uk"}});
  22. var serverList = config.get('servers');
  23. var serverIDs = [];
  24. self.servers = {};
  25. for(var i = 0; i < serverList.length; i++) {
  26. if(!bot.servers[serverList[i].id]) { // Skip unknown servers
  27. console.log('Unknown server ID:',serverList[i].id);
  28. continue;
  29. }
  30. var newServer = { discordID: serverList[i].id, name: bot.servers[serverList[i].id].name };
  31. newServer.users = bot.servers[serverList[i].id].members;
  32. newServer.usersBots = Object.keys(newServer.users).filter(function(item){
  33. return item.bot;
  34. });
  35. if((newServer.usersBots.length/newServer.users.length) > 0.5 && !(serverList[i].id in botExclusionBypass)) {
  36.  
  37. 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() {
  38. bot.leaveServer(serverList[i].id, function() {
  39. console.log("Left "+serverList[i].id+" due to 50% or more bots");
  40. bot.disconnect();
  41. self.emit('abort','abort');
  42. });
  43. });
  44.  
  45. } else {
  46. newServer.id = util.abbreviate(newServer.name, serverIDs);
  47. serverIDs.push(newServer.id);
  48. if(serverList[i].password) newServer.password = serverList[i].password;
  49. if(serverList[i].ignoreChannels) newServer.ignoreChannels = serverList[i].ignoreChannels;
  50. if(serverList[i].listenChannels) newServer.listenChannels = serverList[i].listenChannels;
  51. if(serverList[i].default) self.servers.default = newServer;
  52. self.servers[serverList[i].id] = newServer;
  53. }
  54. }
  55. console.log('Connected to',Object.keys(self.servers).length-1, 'server(s)');
  56. self.emit('connected');
  57. require('fs').writeFileSync('./bot.json', JSON.stringify(bot, null, '\t'));
  58. });
  59. bot.on('message', function(user, userID, channelID, message, rawEvent) {
  60. if(bot.directMessages[channelID] && userID === "193060889111298048" && message.trim() === "reboot") {
  61. bot.sendMessage({
  62. to: userID,
  63. message: "rebooting"
  64. },
  65. function(e, r) {
  66. console.log(e, r);
  67. });
  68. self.emit('cmdReboot');
  69. return;
  70. }
  71. if(!bot.channels[channelID]) return;
  72. var serverID = bot.channels[channelID].guild_id;
  73. if(!self.servers || !self.servers[serverID]) return;
  74. if(self.servers[serverID].ignoreChannels // Check if this channel is ignored
  75. && self.servers[serverID].ignoreChannels.indexOf(bot.channels[channelID].name) >= 0) return;
  76. if(self.servers[serverID].listenChannels // Check if this channel is listened to
  77. && self.servers[serverID].listenChannels.indexOf(bot.channels[channelID].name) < 0) return;
  78. var messageObject = {
  79. type: 'message', servers: [serverID],
  80. data: { uid: userID, message: bot.fixMessage(message), channel: channelID }
  81. };
  82. self.emit('message',messageObject);
  83. });
  84. bot.on('presence', function(user, userID, status, rawEvent) {
  85. var userInServers = [];
  86. for(var sKey in bot.servers) { if(!bot.servers.hasOwnProperty(sKey)) continue;
  87. if(bot.servers[sKey].members && bot.servers[sKey].members[userID]) userInServers.push(sKey);
  88. }
  89. var presence = {
  90. type: 'presence', servers: userInServers, data: { uid: userID, status: status }
  91. };
  92. self.emit('presence',presence);
  93. });
  94. bot.on('disconnect', function() {
  95. console.log("Bot disconnected, reconnecting...");
  96. setTimeout(function(){
  97. bot.connect(); //Auto reconnect after 5 seconds
  98. },5000);
  99. });
  100. bot.on('guildCreate', function(server) {
  101. setTimeout(function(){
  102. self.emit('guildCreate',server);
  103. },5000);
  104. });
  105. }
  106.  
  107. Inbox.prototype.getUsers = function(connectRequest) {
  108. var server = this.servers[connectRequest.server];
  109. if(!server) { // If requested server ID is not a Discord ID, check abbreviated IDs
  110. for(var sKey in this.servers) { if(!this.servers.hasOwnProperty(sKey)) continue;
  111. if(this.servers[sKey].id == connectRequest.server) {
  112. server = this.servers[sKey];
  113. break;
  114. }
  115. }
  116. }
  117. if(!server) return 'unknown-server';
  118. if(server.password && server.password !== connectRequest.password) return 'bad-password';
  119. var discordServer = this.bot.servers[server.discordID], users = {};
  120. var discordSize = Object.keys(discordServer.members).length;
  121. for(var uid in discordServer.members) {
  122. if(!discordServer.members.hasOwnProperty(uid)) continue;
  123.  
  124. var member = discordServer.members[uid];
  125.  
  126. if(discordSize > 1000 && member.status == 'offline') continue;
  127. if(discordSize > 2000 && member.status == 'idle') continue;
  128.  
  129. users[uid] = {
  130. id: member.id,
  131. username: member.nick || member.username,
  132. status: member.status
  133. };
  134. users[uid].roleColor = false;
  135. users[uid].roleName = false;
  136. var rolePosition = -1;
  137. for(var i = 0; i < discordServer.members[uid].roles.length; i++) {
  138. var role = discordServer.roles[discordServer.members[uid].roles[i]];
  139. if(!role || !role.color || role.position < rolePosition) continue;
  140. users[uid].roleColor = '#'+('00000'+role.color.toString(16)).substr(-6);
  141. users[uid].roleName = role.name;
  142. rolePosition = role.position;
  143. }
  144. }
  145. return { server: server, userList: users };
  146. };
  147.  
  148. Inbox.prototype.getServers = function() {
  149. var serverList = {};
  150. for(var sKey in this.servers) { if(!this.servers.hasOwnProperty(sKey)) continue;
  151. var key = sKey == 'default' ? sKey : this.servers[sKey].id;
  152. serverList[key] = { discordID: this.servers[sKey].discordID, id: this.servers[sKey].id, name: this.servers[sKey].name };
  153. if(this.servers[sKey].password) serverList[key].passworded = true;
  154. }
  155. return serverList;
  156. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement