/* IRC-Bot "Kvasir" Copyright (C) 2016 Fenris Wolf (fenris@folksprak.org) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ type tipo_agoj = { anigxi ?: (kanalo : string, modo ?: boolean)=>void; malanigxi ?: (kanalo : string)=>void; listigi ?: (celo : string)=>void; detaloj ?: (identigilo : string, celo : string)=>void; sxalti ?: (identigilo : string, aktiva ?: boolean, celo ?: string)=>void; resxargi ?: (identigilo : string, celo ?: string)=>void; aldoni ?: (nomo : string, celo ?: string)=>void; elmontri_helpon ?: (celo ?: string)=>void; }; /** * @author fenris */ class klaso_kromajxo_stirado extends klaso_kromajxo { /** * @author fenris */ protected permesuloj : Array; /** * @author fenris */ protected agoj : tipo_agoj; /** * @author fenris */ public constructor ( permesuloj : Array = new Array(), agoj : tipo_agoj ) { super("stirado", "Stirado", "stiras aliajn kromajxojn kaj elmontras informojn pri ili", null, "fenris"); this.permesuloj = permesuloj; this.agoj = agoj; } /** * @author fenris */ public reagi(enigo_kruda : Object, eligi : (eligo_kruda : Object)=>void) : void { let that : klaso_kromajxo_stirado = this; function ujumi(foo : ()=>void) : void { if (that.permesuloj.indexOf(enigo_kruda["parametroj"]["sendinto"]) >= 0) { foo(); } else { eligi ( { "tipo": "mesagxo", "parametroj": { "celo": enigo_kruda["parametroj"]["fonto"], "enhavo": "vi ne rajtas fari tion", } } ); } } switch (enigo_kruda["tipo"]) { case "mesagxo": { let resto : string = enigo_kruda["parametroj"]["enhavo"]; [ { "skemoj": [new RegExp("^!\\W*(?:kanalo|k) (?:anigxi|a|>) ((?:#|\\w)+)$")], "ago": x => ujumi(() => this.agoj.anigxi(x[0], true)), }, { "skemoj": [new RegExp("^!\\W*(?:kanalo|k) (?:malanigxi|m|<) ((?:#|\\w)+)$")], "ago": x => ujumi(() => this.agoj.anigxi(x[0], false)), }, { "skemoj": [new RegExp("^!\\W*(?:kromaĵo|kromajxo|krom|x) (?:listigi|l)$")/*, new RegExp("$\|")*/], "ago": x => this.agoj.listigi(enigo_kruda["parametroj"]["fonto"]), }, { "skemoj": [new RegExp("^!\\W*(?:kromaĵo|kromajxo|krom|x) (?:detaloj|d) (\\w+)$")/*, new RegExp("$#(\\w+)")*/], "ago": x => this.agoj.detaloj(x[0], enigo_kruda["parametroj"]["fonto"]), }, { "skemoj": [new RegExp("^!\\W*(?:kromaĵo|kromajxo|krom|x) (?:sxalti|s|toggle|t|%) (\\w+)$")/*, new RegExp("$~(\\w+)")*/], "ago": x => ujumi(() => this.agoj.sxalti(x[0], undefined, enigo_kruda["parametroj"]["fonto"])), }, { "skemoj": [new RegExp("^!\\W*(?:kromaĵo|kromajxo|krom|x) (?:aktivigi|a|\\+) (\\w+)$")/*, new RegExp("$\+(\\w+)")*/], "ago": x => ujumi(() => this.agoj.sxalti(x[0], true, enigo_kruda["parametroj"]["fonto"])), }, { "skemoj": [new RegExp("^!\\W*(?:kromaĵo|kromajxo|krom|x) (?:malaktivigi|m|-) (\\w+)$")/*, new RegExp("$-(\\w+)")*/], "ago": x => ujumi(() => this.agoj.sxalti(x[0], false, enigo_kruda["parametroj"]["fonto"])), }, { "skemoj": [new RegExp("^!\\W*(?:kromaĵo|kromajxo|krom|x) (?:resxargi|r|\\$) (\\w+)$")/*, new RegExp("$#(\\w+)")*/], "ago": x => ujumi(() => this.agoj.resxargi(x[0], enigo_kruda["parametroj"]["fonto"])), }, { "skemoj": [new RegExp("^!\\W*(?:kromaĵo|kromajxo|krom|x) (?:aldoni|\\*) (\\w+)$")/*, new RegExp("$\*(\\w+)")*/], "ago": x => ujumi(() => that.agoj.aldoni(x[0], enigo_kruda["parametroj"]["fonto"])), }, { "skemoj": [new RegExp("^!\\W*(?:helpo|help|h)$")], "ago": x => this.agoj.elmontri_helpon(enigo_kruda["parametroj"]["fonto"]), }, ].forEach ( function (ero : Object) : void { ero["skemoj"].some ( function (skemo : RegExp) : boolean { let sercxo : any = resto.match(skemo); if (sercxo != null) { ero["ago"](sercxo.slice(1)); return true; } else { return false; } } ); } ); } default: { break; } } } }