/*
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)=>tipo_plenumanto, Error>;
malanigxi ?: (kanalo : string)=>tipo_plenumanto, Error>;
listigi ?: ()=>tipo_plenumanto, Error>;
detaloj ?: (identigilo : string)=>tipo_plenumanto, Error>;
sxalti ?: (identigilo : string, aktiva ?: boolean)=>tipo_plenumanto, Error>;
resxargi ?: (identigilo : string)=>tipo_plenumanto, Error>;
aldoni ?: (nomo : string)=>tipo_plenumanto, Error>;
elmontri_helpon ?: ()=>tipo_plenumanto, Error>;
};
/**
* @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
(
{
"identigilo": "stirado",
"nomo": "Stirado",
"priskribo": "stiras aliajn kromajxojn kaj elmontras informojn pri ili",
"uzo": null,
"auxtoro": "fenris",
}
);
this.permesuloj = permesuloj;
this.agoj = agoj;
}
/**
* @override
* @todo la principo de "listigi" uzendas
* @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",
}
}
);
}
}
function eligi_(linioj : Array) : void
{
linioj.forEach(linio => eligi({"tipo": "mesagxo", "parametroj": {"celo": enigo_kruda["parametroj"]["fonto"], "enhavo": linio}}));
}
function erari(x : Error) : void
{
console.warn(x);
}
switch (enigo_kruda["tipo"])
{
case "mesagxo":
{
let resto : string = enigo_kruda["parametroj"]["enhavo"];
[
{
"skemoj": [new RegExp("^!\\s*(?:kanalo|k)\\s*(?:anigxi|a|>)\\s*(#\\S+)$")],
"ago": x => ujumi(() => this.agoj.anigxi(x[0], true)(eligi_, erari)),
},
{
"skemoj": [new RegExp("^!\\s*(?:kanalo|k)\\s*(?:malanigxi|m|<)\\s*(#\\S+)$")],
"ago": x => ujumi(() => this.agoj.anigxi(x[0], false)(eligi_, erari)),
},
{
"skemoj": [new RegExp("^!\\s*(?:kromaĵo|kromajxo|krom|x)\\s*(?:listigi|l)$")/*, new RegExp("$\|")*/],
// "ago": x => ujumi(() => this.agoj.listigi()(eligi_, erari)),
"ago": x => this.agoj.listigi()(eligi_, erari),
},
{
"skemoj": [new RegExp("^!\\s*(?:kromaĵo|kromajxo|krom|x)\\s*(?:detaloj|d|\\?)\\s*(\\w+)$")/*, new RegExp("$#(\\w+)")*/],
"ago": x => this.agoj.detaloj(x[0])(eligi_, erari),
},
{
"skemoj": [new RegExp("^!\\s*(?:kromaĵo|kromajxo|krom|x)\\s*(?:aktivigi|a|\\+)\\s*(\\w+)$")/*, new RegExp("$\+(\\w+)")*/],
"ago": x => ujumi(() => this.agoj.sxalti(x[0], true)(eligi_, erari)),
},
{
"skemoj": [new RegExp("^!\\s*(?:kromaĵo|kromajxo|krom|x)\\s*(?:malaktivigi|m|-)\\s*(\\w+)$")/*, new RegExp("$-(\\w+)")*/],
"ago": x => ujumi(() => this.agoj.sxalti(x[0], false)(eligi_, erari)),
},
{
"skemoj": [new RegExp("^!\\s*(?:kromaĵo|kromajxo|krom|x)\\s*(?:sxalti|s|toggle|t|%)\\s*(\\w+)$")/*, new RegExp("$~(\\w+)")*/],
"ago": x => ujumi(() => this.agoj.sxalti(x[0])(eligi_, erari)),
},
{
"skemoj": [new RegExp("^!\\s*(?:kromaĵo|kromajxo|krom|x)\\s*(?:resxargi|r|\\$)\\s*(\\w+)$")/*, new RegExp("$#(\\w+)")*/],
"ago": x => ujumi(() => this.agoj.resxargi(x[0])(eligi_, erari)),
},
{
"skemoj": [new RegExp("^!\\s*(?:kromaĵo|kromajxo|krom|x)\\s*(?:aldoni|\\*)\\s*(\\S+)$")/*, new RegExp("$\*(\\w+)")*/],
"ago": x => ujumi(() => this.agoj.aldoni(x[0])(eligi_, erari)),
},
{
"skemoj": [new RegExp("^!\\s*(?:helpo|help|h)$")],
"ago": x => this.agoj.elmontri_helpon()(eligi_, erari),
},
].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;
}
}
}
}