UNPKG

cosa-nostra-backstabbers

Version:
158 lines (99 loc) 4.24 kB
var Setup = require("../game_templates/Setup.js"); var auxils = require("../auxils.js"); var executable = require("../executable.js"); module.exports = async function (message, params, config) { // Check if specific rolelist specified if (params.length > 0) { // Run the sampling var setup = new Setup(); var best_match = setup.getSetupMatch(params[0]); if (best_match.score < 0.7) { await message.channel.send(":x: I cannot find that setup!"); return null; }; setup.setSetup(best_match.identifier); // Determine game var setup_name = setup.setup.NAME; var sample_text = setup.setup.VARIABLE ? " (sample) " : new String(); if (params.length > 1) { var limit = parseInt(params[1]); if (isNaN(limit)) { await message.channel.send(":x: Wrong syntax! Please use `" + config["command-prefix"] + "rolelist <gamemode> [players]` instead!"); return null; }; if (setup.setup.PLAYER_LIMITS[0] > limit || setup.setup.PLAYER_LIMITS[1] < limit) { await message.channel.send(":x: The setup **" + setup_name + "** can only hold **" + setup.setup.PLAYER_LIMITS[0] + "** - **" + setup.PLAYER_LIMITS[1] + "** player" + auxils.vocab("s", setup.setup.PLAYER_LIMITS[1]) + "!"); return null; }; var output = setup.evaluateRange(limit, limit); } else { var output = setup.evaluateRange(); }; await message.channel.send(":clipboard: Role list for gamemode **" + setup_name + "**" + sample_text + "\n```ini\n" + evaluateRolelist(output) + "```"); return null; }; if (process.game) { var game = process.game; var setup = game.setup; // Determine game var setup_name = setup.setup.NAME; var sample_text = setup.setup.VARIABLE ? " (sample) " : new String(); // Redefine config var config = game.config; var players = game.players.length; var output = setup.evaluateRange(players, players); await message.channel.send(":clipboard: Role list for current game [**" + setup_name + "**]" + sample_text + "\n```ini\n" + evaluateRolelist(output) + "```"); return null; }; if (process.lobby) { // Determine game var setup = process.lobby.setup; var setup_name = setup.setup.NAME; var sample_text = setup.setup.VARIABLE ? " (sample) " : new String(); var output = setup.evaluateRange(); await message.channel.send(":clipboard: Role list for gamemode **" + setup_name + "**" + sample_text + ":\n```ini\n" + evaluateRolelist(output) + "```"); return null; }; await message.channel.send(":x: Wrong syntax! Please use `" + config["command-prefix"] + "rolelist <gamemode> [players]` instead!"); return null; }; function evaluateRolelist (output) { var ret = new String(); var keys = Object.keys(output); // Evaluate role list for (i = 0; i < keys.length; i++) { var entry = output[keys[i]]; var roles = new Array(); for (var j = 0; j < entry.roles.length; j++) { var identifier = entry.roles[j]; var current_role = roles.find(x => x.identifier === identifier); if (!current_role) { roles.push({identifier: identifier, count: 1, role: executable.roles.getRole(entry.roles[j])}) } else { current_role.count++; }; }; roles.sort(function (a, b) { return b.count - a.count; }); if (keys.length === 1) { var alignments = new Array(); // Find all alignments for (var j = 0; j < roles.length; j++) { if (!alignments.includes(cpl(roles[j].role.alignment))) { alignments.push(cpl(roles[j].role.alignment)); }; }; alignments.sort(); for (var k = 0; k < alignments.length; k++) { ret += "[" + alignments[k] + "] " + roles.filter(x => alignments[k] === cpl(x.role.alignment)).map(x => (x.count > 1 ? x.count + "x " : "") + cpl(x.role["role-name"])).join(", ") + "\n\n"; }; } else { ret += "[" + keys[i] + "] " + roles.map(x => (x.count > 1 ? x.count + "x " : "") + cpl(x.role["role-name"])).join(", ") + "\n\n"; }; }; return ret; }; function cpl (string) { return string.charAt(0).toUpperCase() + string.slice(1); };