diff --git a/chat-plugins/ez-tc.js b/chat-plugins/ez-tc.js new file mode 100644 index 0000000000000..0abc56f030841 --- /dev/null +++ b/chat-plugins/ez-tc.js @@ -0,0 +1,128 @@ +/******************************** +* EZ-TC Plugin by jd * +* Makes adding trainer cards EZ * +********************************/ + +var fs = require('fs'); +var serialize = require('node-serialize'); +var trainerCards = {}; + +function loadTrainerCards() { + try { + trainerCards = serialize.unserialize(fs.readFileSync('config/trainercards.json', 'utf8')); + Object.merge(CommandParser.commands, trainerCards); + } catch (e) { + Rooms('staff').add("TRAINER CARDS failed to be loaded.").update(); + } +} +setTimeout(function(){loadTrainerCards();},1000); + +function saveTrainerCards() { + fs.writeFileSync('config/trainercards.json', serialize.serialize(trainerCards)); + Object.merge(CommandParser.commands, trainerCards); +} + +exports.commands = { + eztc: 'trainercard', + trainercards: 'trainercard', + tc: 'trainercard', + trainercard: function (target, room, user) { + if (!target) target = 'help'; + var parts = target.split(','); + for (var u in parts) parts[u] = parts[u].trim(); + + switch (parts[0]) { + case 'add': + if (!this.can('pban')) return false; + if (!parts[2]) return this.sendReply("Usage: /trainercard add, [command name], [html]"); + var commandName = toId(parts[1]); + if (CommandParser.commands[commandName]) return this.sendReply("/trainercards - The command \"" + commandName + "\" already exists."); + try { + var html = parts.splice(2, parts.length).join(','); + trainerCards[commandName] = new Function('target', 'room', 'user', "if (!room.disableTrainerCards) if (!this.canBroadcast()) return; this.sendReplyBox('" + html.replace(/'/g, "\\'") + "');"); + saveTrainerCards(); + this.sendReply("The trainer card \"" + commandName + "\" has been added."); + this.logModCommand(user.name + " added the trainer card " + commandName); + Rooms.get('staff').add(user.name + " added the trainer card " + commandName); + } catch (e) { + this.errorReply("Something went wrong when trying to add this command. Did you use a backwards slash mark? If so, try it again without using this."); + } + break; + + case 'rem': + case 'del': + case 'delete': + case 'remove': + if (!this.can('pban')) return false; + if (!parts[1]) return this.sendReply("Usage: /trainercard remove, [command name]"); + var commandName = toId(parts[1]); + if (!trainerCards[commandName]) return this.sendReply("/trainercards - The command \"" + commandName + "\" does not exist, or was added manually."); + delete CommandParser.commands[commandName]; + delete trainerCards[commandName]; + saveTrainerCards(); + this.sendReply("The trainer card \"" + commandName + "\" has been removed."); + this.logModCommand(user.name + " removed the trainer card " + commandName); + try { + Rooms.rooms.staff.add(user.name + " removed the trainer card " + commandName); + } catch (e) {}; + break; + + case 'list': + if (!this.can('trainercard')) return false; + var output = "There's a total of " + Object.size(trainerCards) + " trainer cards added with this command:
"; + for (var tc in trainerCards) { + output += tc + "
"; + } + this.sendReplyBox(output); + break; + + case 'off': + if (!this.can('roommod', null, room)) return false; + if (room.disableTrainerCards) return this.sendReply("Broadcasting trainer cards is already disabled in this room."); + room.disableTrainerCards = true; + room.chatRoomData.disableTrainerCards = true; + Rooms.global.writeChatRoomData(); + this.privateModCommand("(" + user.name + " has disabled broadcasting trainer cards in this room.)"); + break; + + case 'on': + if (!this.can('roommod', null, room)) return false; + if (!room.disableTrainerCards) return this.sendReply("Broadcasing trainer cards is already enabled in this room."); + delete room.disableTrainerCards; + delete room.chatRoomData.disableTrainerCards; + Rooms.global.writeChatRoomData(); + this.privateModCommand("(" + user.name + " has enabled broadcasting trainer cards in this room.)"); + break; + + case 'reload': + if (!this.can('pban')) return false; + return this.sendReply("Trainer cards have been reloaded."); + loadTrainerCards(); + break; + + case 'source': + if (!this.can('pban')) return false; + if (!parts[1]) return this.errorReply("Usage: /tc source, [commands] - displays the source code of a trainer card."); + if (!CommandParser.commands[parts[1]]) return this.errorReply("Command not found. Check spelling?"); + return this.sendReply(CommandParser.commands[parts[1]]); + break; + + case 'info': + case 'help': + default: + if (!this.canBroadcast()) return; + this.sendReplyBox( + "EZ-TC Commands:
" + + "/trainercard add, [command name], [html] - Adds a trainer card.
" + + "/trainercard remove, [command name] - Removes a trainer card.
" + + "/trainercard list - Shows a list of all trainer cards added with this command.
" + + "/trainercard off - Disables broadcasting trainer cards in the current room.
" + + "/trainercard on - Enables broadcasting trainer cards in the current room.
" + + "/trainercard reload - Reloads trainer cards if they break (shouldn't happen).
" + + "/trainercard source, [command] - Displays the source code for a trainer card.
" + + "/trainercard help - Shows this help command.
" + + "EZ-TC Plugin by jd" + ); + } + } +};