blob: d063e88a5d78a97ce326b7045816f5bd66714e02 [file] [log] [blame]
#pragma no_shadow, no_inherit
#pragma strong_types,save_types,rtt_checks
#pragma pedantic,range_check,warn_deprecated
#pragma warn_empty_casts,warn_missing_return,warn_function_inconsistent
inherit "/std/thing";
#include <properties.h>
#include <defines.h>
#define BARCHIV "/d/erzmagier/boing/balance/barchives"
#define BS(x) break_string(x,78,0,BS_LEAVE_MY_LFS)
private varargs void print_map(mapping tmp,int short);
protected void create()
{
::create();
SetProp(P_NAME,"Balance-Tool");
AddId(({"btool","balancetool","balance-tool"}));
SetProp(P_SHORT,"Ein Balance-Tool light");
SetProp(P_LONG,
BS("Dies ist das Balance-Tool light. Es versteht folgende Befehle:\n"
"- btop <n>: Zeigt den letzten genehmigten Antrag zu Top n.\n"
"- bsuch [-s] <str>: Sucht case-sensitiv nach str, -s bricht jeden "
"Eintrag nach 78 Zeichen ab.\n"
"- binhalt [-s]: Zeigt den gesamten Inhalt des Balancearchives, -s "
"bricht jeden Eintrag nach 78 Zeichen ab.\n\n"
"Es kann vorkommen, dass Eintraege der falschen UID zugeordnet sind, "
"oder dass die Genehmigung nicht sehr aussagekraeftig ist, in diesem "
"Fall bitte eine Mail an das Balanceteam schreiben."));
AddCmd("btop",
function int(string str)
{
int n;
if(!str || sscanf(str,"%d",n)!=1)
{
notify_fail(
BS("Syntax: btop <n>"));
return 0;
}
this_interactive()->ReceiveMsg(
BARCHIV->GetLightAnnounce(n),
MT_NOTIFICATION|MSG_BS_LEAVE_LFS);
return 1;
});
AddCmd("bsuch",
function int()
{
string str=this_interactive()->_unparsed_args();
if(!str || !sizeof(str))
{
notify_fail(
BS("Syntax: bsuch <str>"));
return 0;
}
int short;
string* arr=old_explode(str," ");
if(arr[0]=="-s")
{
short=1;
str=implode(arr[1..]," ");
}
mapping tmp=BARCHIV->SearchIndex(str);
if(!sizeof(tmp))
{
this_interactive()->ReceiveMsg(
"Keine Eintraege gefunden.",
MT_NOTIFICATION);
}
else
{
print_map(tmp,short);
}
return 1;
});
AddCmd("binhalt",
function int(string str)
{
int short;
if(sizeof(str))
{
string* arr=old_explode(str," ");
if(arr[0]=="-s")
{
short=1;
}
}
print_map(BARCHIV->GetIndexForWizards(),short);
return 1;
});
}
private varargs void print_map(mapping tmp,int short)
{
if (!mappingp(tmp))
{
this_interactive()->ReceiveMsg("Keine Daten vorhanden.\n");
return;
}
int* sort=sort_array(m_indices(tmp),#'>);
string ret="";
foreach(int i : sort)
{
string str=sprintf(" %4d: %s {%s} (%s)",i,tmp[i,0],tmp[i,2],
strftime("%d.%m.%y",tmp[i,1]));
if(short)
{
ret+=BS(str[0..77]);
}
else
{
ret+=BS(str);
}
}
this_interactive()->More(ret);
}