diff --git a/module/rdd-commands.js b/module/rdd-commands.js index 38a564a7..9b21f0ea 100644 --- a/module/rdd-commands.js +++ b/module/rdd-commands.js @@ -22,7 +22,20 @@ const rddRollNumeric = /^(\d+)\s*([\+\-]?\d+)?\s*(s)?/; export class RdDCommands { static init() { - game.system.rdd.commands = new RdDCommands(); + const rddCommands = new RdDCommands(); + + Hooks.on("chatMessage", (html, content, msg) => { + if (content[0] == '/') { + let regExp = /(\S+)/g; + let commands = content.match(regExp); + if (rddCommands.processChatCommand(commands, content, msg)) { + return false; + } + } + return true; + }); + + game.system.rdd.commands = rddCommands; } constructor() { @@ -50,8 +63,8 @@ export class RdDCommands {
/table rencontre deso affiche la table des rencontres en Désolation
/table rencontre mauvaise affiche la table des mauvaises rencontres` }); - this.registerCommand({ path: ["/table", "milieu"], func: (content, msg, params) => this.tableMilieu(msg, params,'liste'), descr: "Affiche la table des ressource naturelles pour un milieu donné" }); - + this.registerCommand({ path: ["/table", "milieu"], func: (content, msg, params) => this.tableMilieu(msg, params, 'liste'), descr: "Affiche la table des ressource naturelles pour un milieu donné" }); + this.registerCommand({ path: ["/tirer", "comp"], func: (content, msg, params) => RdDRollTables.getCompetence('chat'), descr: "Tire une compétence au hasard" }); this.registerCommand({ path: ["/tirer", "queue"], func: (content, msg, params) => RdDRollTables.getQueue('chat'), descr: "Tire une Queue de Dragon" }); this.registerCommand({ path: ["/tirer", "ombre"], func: (content, msg, params) => RdDRollTables.getOmbre('chat'), descr: "Tire une Ombre de Thanatos" }); @@ -63,7 +76,7 @@ export class RdDCommands { this.registerCommand({ path: ["/tirer", "desir"], func: (content, msg, params) => RdDRollTables.getDesirLancinant('chat'), descr: "Tire un Désir Lancinant" }); this.registerCommand({ path: ["/tirer", "rencontre"], func: (content, msg, params) => this.getRencontreTMR(params), descr: `Détermine une rencontre dans les TMR (synonyme de "/tmrr")` }); this.registerCommand({ path: ["/tirer", "milieu"], func: (content, msg, params) => this.tableMilieu(msg, params, 'chat'), descr: "Effectue un tirage dans la table desressource naturelles pour un milieu donné" }); - + this.registerCommand({ path: ["/meteo"], func: (content, msg, params) => this.getMeteo(msg, params), descr: "Propose une météo marine" }); this.registerCommand({ path: ["/nom"], func: (content, msg, params) => RdDNameGen.getName(msg, params), descr: "Génère un nom aléatoire" }); @@ -154,14 +167,7 @@ export class RdDCommands { /* -------------------------------------------- */ registerCommand(command) { - this._addCommand(this.getCommands(), command.path, '', command); - } - - getCommands() { - if (!this.commandsTable){ - this._registerCommands(); - } - return this.commandsTable; + this._addCommand(this.commandsTable, command.path, '', command); } /* -------------------------------------------- */ @@ -198,18 +204,29 @@ export class RdDCommands { processChatCommand(commandLine, content = '', msg = {}) { // Setup new message's visibility let rollMode = game.settings.get("core", "rollMode"); - if (["gmroll", "blindroll"].includes(rollMode)) msg["whisper"] = ChatMessage.getWhisperRecipients("GM"); - if (rollMode === "blindroll") msg["blind"] = true; + if (["gmroll", "blindroll"].includes(rollMode)) { + msg["whisper"] = ChatMessage.getWhisperRecipients("GM"); + } + if (rollMode === "blindroll"){ + msg["blind"] = true; + } msg["type"] = 0; + if (!this.commandsTable) { + this._registerCommands(); + } + let command = commandLine[0].toLowerCase(); - let params = commandLine.slice(1); - - return this.process(command, params, content, msg); + if (this._isCommandHandled(command)) { + let params = commandLine.slice(1); + this._processCommand(this.commandsTable, command, params, content, msg); + return true; + } + return false; } - process(command, params, content, msg) { - return this._processCommand(this.getCommands(), command, params, content, msg); + _isCommandHandled(command){ + return this.commandsTable[command] != undefined; } async _processCommand(commandsTable, name, params, content = '', msg = {}, path = "") { @@ -217,18 +234,20 @@ export class RdDCommands { path = path + name + " "; if (command && command.subTable) { if (params[0]) { - return this._processCommand(command.subTable, params[0], params.slice(1), content, msg, path) + this._processCommand(command.subTable, params[0], params.slice(1), content, msg, path) } else { this.help(msg, command.subTable); - return true; } + return true; } if (command && command.func) { - const result = await command.func(content, msg, params); - if (result == false) { - RdDCommands._chatAnswer(msg, command.descr); - } + new Promise(async () => { + const result = await command.func(content, msg, params); + if (result == false) { + RdDCommands._chatAnswer(msg, command.descr); + } + }); return true; } return false; @@ -240,7 +259,7 @@ export class RdDCommands { } async help(msg, table) { let commands = [] - this._buildSubTableHelp(commands, table ?? this.getCommands()); + this._buildSubTableHelp(commands, table ?? this.commandsTable); let html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/settings/dialog-aide-commands.html", { commands: commands }); let d = new Dialog( @@ -366,7 +385,7 @@ export class RdDCommands { } return false; } - + async tableRencontres(msg, params) { if (params && params.length > 0) { const search = Misc.join(params, ' '); diff --git a/module/rdd-main.js b/module/rdd-main.js index 50f49f90..f4d5c361 100644 --- a/module/rdd-main.js +++ b/module/rdd-main.js @@ -345,17 +345,3 @@ async function migrationPngWebp_1_5_34() { /* -------------------------------------------- */ Hooks.once('diceSoNiceReady', (dice3d) => RdDDice.diceSoNiceReady(dice3d)); -/* -------------------------------------------- */ -/* Foundry VTT chat message */ -/* -------------------------------------------- */ -Hooks.on("chatMessage", (html, content, msg) => { - if (content[0] == '/') { - let regExp = /(\S+)/g; - let commands = content.match(regExp); - if (game.system.rdd.commands.processChatCommand(commands, content, msg)) { - return false; - } - } - return true; -}); -