MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | inherit "std/thing"; |
| 2 | |
| 3 | #include <properties.h> |
| 4 | #include <language.h> |
| 5 | #include <config.h> |
| 6 | #include <news.h> |
| 7 | #include <defines.h> |
| 8 | |
| 9 | #define UA PL->_unparsed_args() |
| 10 | |
| 11 | void create() |
| 12 | { |
| 13 | string str; |
| 14 | if (!clonep(this_object())) return; |
| 15 | ::create(); |
| 16 | SetProp(P_LONG,"Ein News-Gruppen-Tool.\n\ |
| 17 | Befehle: addg <grname> <ownername> : Gruppe erzeugen\n\ |
| 18 | removeg <grname> : Gruppe loeschen\n\ |
| 19 | addw <grname> <username> : Schreibberechtigten eintragen\n\ |
| 20 | removew <grname> <username> : Schreibberechtigten austragen\n\ |
| 21 | addd <grname> <username> : Loeschberechtigten eintragen\n\ |
| 22 | removed <grname> <username> : Loeschberechtigten austragen\n\ |
| 23 | addr <grname> <username> : Leseberechtigten eintragen\n\ |
| 24 | remover <grname> <username> : Leseberechtigten austragen\n\ |
| 25 | ginfo <grname> : Info ueber Gruppe abfragen\n\ |
| 26 | setexpire <grname> <tage> : Expiretime setzen\n\ |
| 27 | setmaxmsg <grname> <anz> : Maxmsg setzen\n\ |
| 28 | setg <grname> <loeschlev> <schreiblev> <leselev> <maxmsg> <expire>\n"); |
| 29 | str=capitalize(((str=getuid(this_player()))[<1]=='s'||str[<1]=='x'|| |
| 30 | str[<1]=='z')?str+="'":str+="s"); |
| 31 | SetProp(P_SHORT,str+" NewsTool"); |
| 32 | SetProp(P_NAME,str+" NewsTool"); |
| 33 | SetProp(P_GENDER,NEUTER); |
| 34 | SetProp(P_ARTICLE,0); |
| 35 | AddId("newstool"); |
| 36 | AddId("newsgruppentool"); |
| 37 | AddId("news-gruppen-tool"); |
| 38 | SetProp(P_AUTOLOADOBJ,1); |
| 39 | SetProp(P_NODROP,1); |
| 40 | } |
| 41 | |
| 42 | void init() |
| 43 | { |
| 44 | add_action("addg","addg"); |
| 45 | add_action("removeg","removeg"); |
| 46 | add_action("addw","addw"); |
| 47 | add_action("removew","removew"); |
| 48 | add_action("addd","addd"); |
| 49 | add_action("removed","removed"); |
| 50 | add_action("addr","addr"); |
| 51 | add_action("remover","remover"); |
| 52 | add_action("setg","setg"); |
| 53 | add_action("setexpire","setexpire"); |
| 54 | add_action("expire","expire"); |
| 55 | add_action("ginfo","ginfo"); |
| 56 | add_action("setmaxmsg","setmaxmsg"); |
| 57 | } |
| 58 | |
| 59 | int addr(string str) |
| 60 | { |
| 61 | mixed *arr; |
| 62 | string st1, st2; |
| 63 | |
| 64 | if ((str=UA)=="" || sscanf(str,"%s %s",st1,st2) !=2){ |
| 65 | write("addr <groupname> <username>\nAnschliessend darf der User unabhaengig vom Wizlevel die Gruppe lesen.\n"); |
| 66 | return 1; |
| 67 | } |
| 68 | |
| 69 | arr=old_explode(st2," ")-({""}); |
| 70 | switch ("/secure/news"->AddAllowed(st1,({}),({}),arr)){ |
| 71 | case 0: write("Param err\n"); break; |
| 72 | case 1: write("Ok.\n"); break; |
| 73 | case -1: write("No permission\n"); break; |
| 74 | case -2: write("No such board\n"); break; |
| 75 | } |
| 76 | return 1; |
| 77 | } |
| 78 | |
| 79 | int remover(string str) |
| 80 | { |
| 81 | mixed *arr; |
| 82 | string st1, st2; |
| 83 | |
| 84 | if (!(str=UA) || sscanf(str,"%s %s",st1,st2) !=2){ |
| 85 | write("remover <gruppenname> <username>\nDanach darf der User die Gruppe nur noch lesen, wenn sein Wizlevel dies erlaubt.\n"); |
| 86 | return 1; |
| 87 | } |
| 88 | |
| 89 | arr=old_explode(st2," ")-({""}); |
| 90 | switch ("/secure/news"->RemoveAllowed(st1,({}),({}),arr)){ |
| 91 | case 0: write("Param err\n"); break; |
| 92 | case 1: write("Ok.\n"); break; |
| 93 | case -1: write("No permission\n"); break; |
| 94 | case -2: write("No such board\n"); break; |
| 95 | } |
| 96 | return 1; |
| 97 | } |
| 98 | |
| 99 | int addd(string str) |
| 100 | { |
| 101 | mixed *arr; |
| 102 | string st1, st2; |
| 103 | |
| 104 | if (!(str=UA) || sscanf(str,"%s %s",st1,st2) !=2){ |
| 105 | write("addd <gruppe> <user>\nUser darf Artikel loeschen (unabh vom Wizlevel)\n"); |
| 106 | return 1; |
| 107 | } |
| 108 | |
| 109 | arr=old_explode(st2," ")-({""}); |
| 110 | switch ("/secure/news"->AddAllowed(st1,arr,({}),({}))){ |
| 111 | case 0: write("Param err\n"); break; |
| 112 | case 1: write("Ok.\n"); break; |
| 113 | case -1: write("No permission\n"); break; |
| 114 | case -2: write("No such board\n"); break; |
| 115 | } |
| 116 | return 1; |
| 117 | } |
| 118 | |
| 119 | int removed(string str) |
| 120 | { |
| 121 | mixed *arr; |
| 122 | string st1, st2; |
| 123 | |
| 124 | if (!(str=UA) || sscanf(str,"%s %s",st1,st2) !=2){ |
| 125 | write("removed <gruppe> <user>\nUser darf nur noch Artikel loeschen, wenn sein Wizlevel das erlaubt.\n"); |
| 126 | return 1; |
| 127 | } |
| 128 | |
| 129 | arr=old_explode(st2," ")-({""}); |
| 130 | switch ("/secure/news"->RemoveAllowed(st1,arr,({}),({}))){ |
| 131 | case 0: write("Param err\n"); break; |
| 132 | case 1: write("Ok.\n"); break; |
| 133 | case -1: write("No permission\n"); break; |
| 134 | case -2: write("No such board\n"); break; |
| 135 | } |
| 136 | return 1; |
| 137 | } |
| 138 | |
| 139 | int addw(string str) |
| 140 | { |
| 141 | mixed *arr; |
| 142 | string st1, st2; |
| 143 | |
| 144 | if (!(str=UA) || sscanf(str,"%s %s",st1,st2) !=2){ |
| 145 | write("addw <gruppe> <user>\nUser darf Artikel schreiben (unabh vom Wizlevel)\n"); |
| 146 | return 1; |
| 147 | } |
| 148 | |
| 149 | arr=old_explode(st2," ")-({""}); |
| 150 | switch ("/secure/news"->AddAllowed(st1,({}),arr,({}))){ |
| 151 | case 0: write("Param err\n"); break; |
| 152 | case 1: write("Ok.\n"); break; |
| 153 | case -1: write("No permission\n"); break; |
| 154 | case -2: write("No such board\n"); break; |
| 155 | } |
| 156 | return 1; |
| 157 | } |
| 158 | |
| 159 | int removew(string str) |
| 160 | { |
| 161 | mixed *arr; |
| 162 | string st1, st2; |
| 163 | |
| 164 | if (!(str=UA) || sscanf(str,"%s %s",st1,st2) !=2){ |
| 165 | write("removew <gruppe> <user>\nUser darf nur noch Artikel schreiben, wenn sein Wizlevel dies erlaubt.\n"); |
| 166 | return 1; |
| 167 | } |
| 168 | |
| 169 | arr=old_explode(st2," ")-({""}); |
| 170 | switch ("/secure/news"->RemoveAllowed(st1,({}),arr,({}))){ |
| 171 | case 0: write("Param err\n"); break; |
| 172 | case 1: write("Ok.\n"); break; |
| 173 | case -1: write("No permission\n"); break; |
| 174 | case -2: write("No such board\n"); break; |
| 175 | } |
| 176 | return 1; |
| 177 | } |
| 178 | |
| 179 | int setg(string str) |
| 180 | { |
| 181 | string name; |
| 182 | int dlevel, wlevel, rlevel, maxmessages, expire; |
| 183 | |
| 184 | if (!(str=UA) || |
| 185 | sscanf(str,"%s %d %d %d %d %d",name,dlevel,wlevel,rlevel,maxmessages,expire) != 6) { |
| 186 | write("setg <gruppe> <loeschlevel> <schreiblevel> <leselevel> <maxmessages> <expire>\nGruppenparameter setzen, Bedeutung (Defaultwerte in Klammern):\n\ |
| 187 | name : Der Name der Newsgroup\n\ |
| 188 | loeschlevel (20) : Wizlevel, ab dem User Artikel loeschen koennen\n\ |
| 189 | schreiblevel ( 0) : Wizlevel, ab dem User Artikel schreiben koennen\n\ |
| 190 | leselevel ( 0) : Wizlevel, ab dem User Artikel lesen koennen\n\ |
| 191 | maxmessages (40) : Maximale Anzahl Artikel in einer Newsgruppe\n\ |
| 192 | expire (-1) : Expiretime in Tagen, -1 = nie\n"); |
| 193 | return 1; |
| 194 | } |
| 195 | expire=86400*expire; |
| 196 | switch("/secure/news"->SetGroup(name, dlevel, wlevel, rlevel, maxmessages,expire)){ |
| 197 | case 1: write("Ok\n"); break; |
| 198 | case 0: write("Param error.\n"); break; |
| 199 | case -1: write("No permission\n"); break; |
| 200 | case -2: write("No such group\n"); break; |
| 201 | } |
| 202 | return 1; |
| 203 | } |
| 204 | |
| 205 | int setexpire(string str) |
| 206 | { |
| 207 | string name; |
| 208 | int expire; |
| 209 | mixed *gr; |
| 210 | |
| 211 | if (!(str=UA)||sscanf(str,"%s %d",name,expire)!=2) |
| 212 | { |
| 213 | write("setexpire <gruppe> <tage>\n"); |
| 214 | return 1; |
| 215 | } |
| 216 | expire=86400*expire; |
| 217 | if (!pointerp((gr="/secure/news"->GetGroup(name)))) |
| 218 | { |
| 219 | write("Get group error\n"); |
| 220 | return 1; |
| 221 | } |
| 222 | switch("/secure/news"->SetGroup(name, gr[G_DLEVEL], gr[G_WLEVEL], gr[G_RLEVEL], gr[G_MAX_MSG],expire)){ |
| 223 | case 1: write("Ok\n"); break; |
| 224 | case 0: write("Param error.\n"); break; |
| 225 | case -1: write("No permission\n"); break; |
| 226 | case -2: write("No such group\n"); break; |
| 227 | } |
| 228 | return 1; |
| 229 | } |
| 230 | |
| 231 | int setmaxmsg(string str) |
| 232 | { |
| 233 | string name; |
| 234 | int maxmsg; |
| 235 | mixed *gr; |
| 236 | |
| 237 | if (!(str=UA)||sscanf(str,"%s %d",name,maxmsg)!=2) |
| 238 | { |
| 239 | write("setexpire <gruppe> <tage>\n"); |
| 240 | return 1; |
| 241 | } |
| 242 | if (!pointerp((gr="/secure/news"->GetGroup(name)))) |
| 243 | { |
| 244 | write("Get group error\n"); |
| 245 | return 1; |
| 246 | } |
| 247 | switch("/secure/news"->SetGroup(name, gr[G_DLEVEL], gr[G_WLEVEL], gr[G_RLEVEL], maxmsg, gr[G_EXPIRE])){ |
| 248 | case 1: write("Ok\n"); break; |
| 249 | case 0: write("Param error.\n"); break; |
| 250 | case -1: write("No permission\n"); break; |
| 251 | case -2: write("No such group\n"); break; |
| 252 | } |
| 253 | return 1; |
| 254 | } |
| 255 | |
| 256 | int ginfo(string str) |
| 257 | { |
| 258 | mixed *gr; |
| 259 | int i; |
| 260 | |
| 261 | if (!(str=UA)) |
| 262 | { |
| 263 | write("Usage: ginfo <gname>\n"); |
| 264 | return 1; |
| 265 | } |
| 266 | if (!pointerp((gr="/secure/news"->GetGroup(str)))) |
| 267 | { |
| 268 | write("Get group error\n"); |
| 269 | return 1; |
| 270 | } |
| 271 | if (gr[11]==-1) |
| 272 | { |
| 273 | write("Group \""+gr[0]+"\" does not exist.\n"); |
| 274 | return 1; |
| 275 | } |
| 276 | // 1 2 3 4 5 6 7 |
| 277 | //123456789012345678901234567890123456789012345678901234567890123456789012345678 |
| 278 | printf("------------------------------------------------------------------------------\n"); |
| 279 | |
| 280 | printf("Rubrik : %s (%s) Savefile: %s\n\n",gr[0],capitalize(gr[1]),gr[2]); |
| 281 | printf("Messages: %i/%i Expire: %i Tage.\n\n", |
| 282 | (pointerp(gr[11])?sizeof(gr[11]):0),gr[10],gr[3]/86400); |
| 283 | |
| 284 | printf( break_string((sizeof(gr[6])?"("+(CountUp(map(gr[6],#'capitalize)))+")":" "), 78, "Readers : "+gr[9]+" ",16)); |
| 285 | |
| 286 | printf( break_string((sizeof(gr[5])?"("+(CountUp(map(gr[5],#'capitalize)))+")":" "), 78, "Writers : "+gr[8]+" ",16)); |
| 287 | |
| 288 | printf( break_string((sizeof(gr[4])?"("+(CountUp(map(gr[4],#'capitalize)))+")":" "), 78, "Deleters: "+gr[7]+" ",16)); |
| 289 | |
| 290 | printf("------------------------------------------------------------------------------\n"); |
| 291 | return 1; |
| 292 | } |
| 293 | |
| 294 | int removeg(string str) |
| 295 | { |
| 296 | if (!(str=UA)) |
| 297 | { |
| 298 | write("removeg <gruppenname>\nGruppe LOESCHEN.\n"); |
| 299 | return 0; |
| 300 | } |
| 301 | switch("/secure/news"->RemoveGroup(str)){ |
| 302 | case 1: write("Ok. Bitte nicht vergessen, das Savefile der Newsgroup von Hand zu entfernen !\n"); break; |
| 303 | case 0: write("Param error.\n"); break; |
| 304 | case -1: write("No permission\n"); break; |
| 305 | case -2: write("No such group"); break; |
| 306 | } |
| 307 | return 1; |
| 308 | } |
| 309 | |
| 310 | int addg(string str) |
| 311 | { |
| 312 | string name, owner; |
| 313 | |
| 314 | if (!(str=UA) || sscanf(str,"%s %s",name,owner)!=2) |
| 315 | { |
| 316 | write("addg <gruppe> <user>\nGruppe anlegen, <user> wird Besitzer der Gruppe\n"); |
| 317 | return 1; |
| 318 | } |
| 319 | switch ("secure/news"->AddGroup(name, owner)){ |
| 320 | case 1: write("Ok.\n"); break; |
| 321 | case 0: write("Param error.\n"); break; |
| 322 | case -1: write("No permission.\n"); break; |
| 323 | case -2: write("Group already there\n"); break; |
| 324 | case -3: write("Owner not found.\n"); break; |
| 325 | case -4: write("Savefile already in use.\n"); break; |
| 326 | } |
| 327 | return 1; |
| 328 | } |
| 329 | |
| 330 | int expire() |
| 331 | { |
| 332 | "/secure/news"->expire_all(); |
| 333 | write("Expiring startet.\n"); |
| 334 | return 1; |
| 335 | } |