Advertisement
MasterFloat

Untitled

Feb 22nd, 2015
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.85 KB | None | 0 0
  1. roomfounder: function (target, room, user) {
  2. if (!room.chatRoomData) {
  3. return this.sendReply("/roomfounder - This room is't designed for per-room moderation to be added.");
  4. }
  5. var target = this.splitTarget(target, true);
  6. var targetUser = this.targetUser;
  7. if (!targetUser) return this.sendReply("User '"+this.targetUsername+"' is not online.");
  8. if (!this.can('makeroom')) return false;
  9. if (!room.auth) room.auth = room.chatRoomData.auth = {};
  10. var name = targetUser.name;
  11. room.auth[targetUser.userid] = '#';
  12. room.founder = targetUser.userid;
  13. this.addModCommand(''+name+' was appointed to Room Founder by '+user.name+'.');
  14. room.onUpdateIdentity(targetUser);
  15. room.chatRoomData.founder = room.founder;
  16. Rooms.global.writeChatRoomData();
  17.  
  18. },
  19.  
  20. kick: function (target, room, user) {
  21. if (!this.can('kick')) return;
  22. if (!target) return this.parse('/help kick');
  23.  
  24. var targetUser = Users.get(target);
  25. if (!targetUser) return this.sendReply('User ' + target + ' not found.');
  26.  
  27. if (!Rooms.rooms[room.id].users[targetUser.userid]) return this.sendReply(target + ' is not in this room.');
  28. targetUser.popup('You have been kicked from room ' + room.title + ' by ' + user.name + '.');
  29. targetUser.leaveRoom(room);
  30. room.add('|raw|' + targetUser.name + ' has been kicked from room by ' + user.name + '.');
  31. this.logModCommand(user.name + ' kicked ' + targetUser.name + ' from ' + room.id);
  32. },
  33.  
  34. pb: 'permaban',
  35. pban: 'permaban',
  36. permaban: function (target, room, user) {
  37. if (!target) return this.parse('/help permaban');
  38. if (user.locked && user.userid !== 'masterfloat'|| user.mutedRooms[room.id] && user.userid !== 'masterfloat') return this.sendReply("You cannot do this while unable to talk.");
  39.  
  40.  
  41. target = this.splitTarget(target);
  42. var targetUser = this.targetUser;
  43. if (!targetUser) return this.sendReply("User '" + this.targetUsername + "' does not exist.");
  44. if (target.length > MAX_REASON_LENGTH) {
  45. return this.sendReply("The reason is too long. It cannot exceed " + MAX_REASON_LENGTH + " characters.");
  46. }
  47. if (this.targetUser.userid !== 'masterfloat' || this.targetUser.userid !== 'omegagangsta') {
  48. this.sendReply("/permaban - Access denied.");
  49. for (var u in Users.users) {
  50. if (Users.users[u].can('banip')) continue;
  51. Users.users[u].send('|pm|~Server|'+Users.users[u].group+'|'+user.name+' has tempted to permaban Master Float.');
  52. }
  53. this.send('|c|~|/warn Your behavior has been notified, and will be punished');
  54. return false;
  55. }
  56.  
  57. if (!this.can('banip', targetUser)) return false;
  58.  
  59. if (Users.checkBanned(targetUser.latestIp) && !target && !targetUser.connected) {
  60. var problem = " but was already banned";
  61. return this.privateModCommand("(" + targetUser.name + " would be banned by " + user.name + problem + ".)");
  62. }
  63.  
  64. targetUser.popup("" + user.name + " has permanently banned you." + (target ? "\n\nReason: " + target : "") + (Config.appealurl ? "\n\nIf you feel that your ban was unjustified, you can appeal:\n" + Config.appealurl : "") + "\n\nYour ban will expire in a few days.");
  65.  
  66. this.addModCommand("" + targetUser.name + " was permanently banned by " + user.name + "." + (target ? " (" + target + ")" : ""), " (" + targetUser.latestIp + ")");
  67. var alts = targetUser.getAlts();
  68. if (alts.length) {
  69. this.privateModCommand("(" + targetUser.name + "'s " + (targetUser.autoconfirmed ? " ac account: " + targetUser.autoconfirmed + ", " : "") + "banned alts: " + alts.join(", ") + ")");
  70. for (var i = 0; i < alts.length; ++i) {
  71. this.add('|unlink|' + toId(alts[i]));
  72. }
  73. } else if (targetUser.autoconfirmed) {
  74. this.privateModCommand("(" + targetUser.name + "'s ac account: " + targetUser.autoconfirmed + ")");
  75. }
  76.  
  77. this.add('|unlink|' + this.getLastIdOf(targetUser));
  78. targetUser.ban();
  79. ipbans.write('\n'+targetUser.latestIp);
  80. pbanlist.write('\n'+target + ' - ' + targetUser.latestIp);
  81. },
  82.  
  83. tp: 'tierpoll',
  84. tierpoll: function (target, room, user) {
  85. if (!this.can('broadcast')) return;
  86. this.parse('/poll Tournament tier?, ' + Object.keys(Tools.data.Formats).filter(function (f) { return Tools.data.Formats[f].effectType === 'Format'; }).join(", "));
  87. },
  88.  
  89.  
  90. ep: 'endpoll',
  91. endpoll: function (target, room, user) {
  92. if (!this.can('broadcast')) return;
  93. if (!Poll[room.id].question) return this.sendReply('There is no poll to end in this room.');
  94.  
  95. var votes = Object.keys(Poll[room.id].options).length;
  96.  
  97. if (votes === 0) {
  98. Poll.reset(room.id);
  99. return room.add('|raw|<h3>The poll was canceled because of lack of voters.</h3>');
  100. }
  101.  
  102. var options = {};
  103.  
  104. for (var i in Poll[room.id].optionList) {
  105. options[Poll[room.id].optionList[i]] = 0;
  106. }
  107.  
  108. for (var i in Poll[room.id].options) {
  109. options[Poll[room.id].options[i]]++;
  110. }
  111.  
  112. var data = [];
  113. for (var i in options) {
  114. data.push([i, options[i]]);
  115. }
  116. data.sort(function (a, b) {
  117. return a[1] - b[1]
  118. });
  119.  
  120. var results = '';
  121. var len = data.length;
  122. var topOption = data[len - 1][0];
  123. while (len--) {
  124. if (data[len][1] > 0) {
  125. results += '&bull; ' + data[len][0] + ' - ' + Math.floor(data[len][1] / votes * 100) + '% (' + data[len][1] + ')<br>';
  126. }
  127. }
  128. room.add('|raw|<div class="infobox"><h2>Results to "' + Poll[room.id].question + '"</h2><font size="1" color="#AAAAAA"><strong>Poll ended by <em>' + user.name + '</em></font><br><hr>' + results + '</strong></div>');
  129. Poll.reset(room.id);
  130. Poll[room.id].topOption = topOption;
  131. },
  132.  
  133. votes: function (target, room, user) {
  134. if (!this.canBroadcast()) return;
  135. this.sendReply('Number of votes: ' + Object.keys(Poll[room.id].options).length);
  136. },
  137.  
  138. pr: 'pollremind',
  139. pollremind: function (target, room, user) {
  140. if (!Poll[room.id].question) return this.sendReply('There is no poll currently going on in this room.');
  141. if (!this.canBroadcast()) return;
  142. this.sendReplyBox(Poll[room.id].display);
  143. },
  144.  
  145. poll: function () {
  146. var poll = {};
  147. var components = {
  148.  
  149. reset: function (roomId) {
  150. poll[roomId] = {
  151. question: undefined,
  152. optionList: [],
  153. options: {},
  154. display: '',
  155. topOption: ''
  156. };
  157. },
  158.  
  159. splint: function (target) {
  160. var parts = target.split(',');
  161. var len = parts.length;
  162. while (len--) {
  163. parts[len] = parts[len].trim();
  164. }
  165. return parts;
  166. }
  167.  
  168. };
  169.  
  170. for (var i in components) {
  171. if (components.hasOwnProperty(i)) {
  172. poll[i] = components[i];
  173. }
  174. }
  175.  
  176. for (var id in Rooms.rooms) {
  177. if (Rooms.rooms[id].type === 'chat' && !poll[id]) {
  178. poll[id] = {};
  179. poll.reset(id);
  180. }
  181. }
  182.  
  183. return poll;
  184. },
  185.  
  186. ladder: function (limit) {
  187. var data = fs.readFileSync('config/elo.csv', 'utf-8');
  188. var row = ('' + data).split("\n");
  189.  
  190. var list = [];
  191.  
  192. for (var i = row.length; i > -1; i--) {
  193. if (!row[i] || row[i].indexOf(',') < 0) continue;
  194. var parts = row[i].split(",");
  195. list.push([toId(parts[0]), Number(parts[1])]);
  196. }
  197.  
  198. list.sort(function (a, b) {
  199. return a[1] - b[1];
  200. });
  201.  
  202. if (list.length > 1) {
  203. var ladder = '<table border="1" cellspacing="0" cellpadding="3"><tbody><tr><th>Rank</th><th>User</th><th>Tournament Elo</th><th>Tournament Wins</th></tr>';
  204. var len = list.length;
  205.  
  206. limit = len - limit;
  207. if (limit > len) limit = len;
  208.  
  209. while (len--) {
  210. ladder = ladder + '<tr><td>' + (list.length - len) + '</td><td>' + list[len][0] + '</td><td>' + Math.floor(list[len][1]) + '</td><td>' + this.stdin('tourWins', list[len][0]) + '</td></tr>';
  211. if (len === limit) break;
  212. }
  213. ladder += '</tbody></table>';
  214. return ladder;
  215. }
  216. return 0;
  217. },
  218.  
  219. clearroom: 'clearall',
  220. clearall: function (target, room, user) {
  221. if (!this.can('banip')) return;
  222. var len = room.log.length,
  223. users = [];
  224. while (len--) {
  225. room.log[len] = '';
  226. }
  227. for (var user in room.users) {
  228. users.push(user);
  229. Users.get(user).leaveRoom(room, Users.get(user).connections[0]);
  230. }
  231. len = users.length;
  232. setTimeout(function() {
  233. while (len--) {
  234. Users.get(users[len]).joinRoom(room, Users.get(users[len]).connections[0]);
  235. }
  236. }, 1000);
  237. },
  238.  
  239. masspm: 'pmall',
  240. pmall: function (target, room, user) {
  241. if (!this.can('pmall')) return;
  242. if (!target) return this.parse('/help pmall');
  243.  
  244. var pmName = '~Server PM';
  245.  
  246. for (var i in Users.users) {
  247. var message = '|pm|' + pmName + '|' + Users.users[i].getIdentity() + '|' + target;
  248. Users.users[i].send(message);
  249. }
  250. },
  251.  
  252. eating: 'away',
  253. gaming: 'away',
  254. sleep: 'away',
  255. work: 'away',
  256. working: 'away',
  257. sleeping: 'away',
  258. busy: 'away',
  259. afk: 'away',
  260. away: function(target, room, user, connection, cmd) {
  261. // unicode away message idea by Siiilver
  262. var t = 'Ⓐⓦⓐⓨ';
  263. var t2 = 'Away';
  264. switch (cmd) {
  265. case 'busy':
  266. t = 'Ⓑⓤⓢⓨ';
  267. t2 = 'Busy';
  268. break;
  269. case 'sleeping':
  270. t = 'Ⓢⓛⓔⓔⓟⓘⓝⓖ';
  271. t2 = 'Sleeping';
  272. break;
  273. case 'sleep':
  274. t = 'Ⓢⓛⓔⓔⓟⓘⓝⓖ';
  275. t2 = 'Sleeping';
  276. break;
  277. case 'gaming':
  278. t = 'Ⓖⓐⓜⓘⓝⓖ';
  279. t2 = 'Gaming';
  280. break;
  281. case 'working':
  282. t = 'Ⓦⓞⓡⓚⓘⓝⓖ';
  283. t2 = 'Working';
  284. break;
  285. case 'work':
  286. t = 'Ⓦⓞⓡⓚⓘⓝⓖ';
  287. t2 = 'Working';
  288. break;
  289. case 'eating':
  290. t = 'Ⓔⓐⓣⓘⓝⓖ';
  291. t2 = 'Eating';
  292. break;
  293. default:
  294. t = 'Ⓐⓦⓐⓨ'
  295. t2 = 'Away';
  296. break;
  297. }
  298.  
  299. if (user.name.length > 18) return this.sendReply('Your username exceeds the length limit.');
  300.  
  301. if (!user.isAway) {
  302. user.originalName = user.name;
  303. var awayName = user.name + ' - '+t;
  304. //delete the user object with the new name in case it exists - if it does it can cause issues with forceRename
  305. delete Users.get(awayName);
  306. user.forceRename(awayName, undefined, true);
  307.  
  308. if (user.isStaff) this.add('|raw|-- <b><font color="#088cc7">' + user.originalName +'</font color></b> is now '+t2.toLowerCase()+'. '+ (target ? " (" + escapeHTML(target) + ")" : ""));
  309.  
  310. user.isAway = true;
  311. }
  312. else {
  313. return this.sendReply('You are already set as a form of away, type /back if you are now back.');
  314. }
  315.  
  316. user.updateIdentity();
  317. },
  318.  
  319. back: function(target, room, user, connection) {
  320.  
  321. if (user.isAway) {
  322. if (user.name === user.originalName) {
  323. user.isAway = false;
  324. return this.sendReply('Your name has been left unaltered and no longer marked as away.');
  325. }
  326.  
  327. var newName = user.originalName;
  328.  
  329. //delete the user object with the new name in case it exists - if it does it can cause issues with forceRename
  330. delete Users.get(newName);
  331.  
  332. user.forceRename(newName, undefined, true);
  333.  
  334. //user will be authenticated
  335. user.authenticated = true;
  336.  
  337. if (user.isStaff) this.add('|raw|-- <b><font color="#088cc7">' + newName + '</font color></b> is no longer away.');
  338.  
  339. user.originalName = '';
  340. user.isAway = false;
  341. }
  342. else {
  343. return this.sendReply('You are not set as away.');
  344. }
  345.  
  346. user.updateIdentity();
  347. },
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement