blob: 0e67197b3618352dfb838f9a0e4c39be4e9ec051 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001inherit "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
11void create()
12{
13 string str;
14 if (!clonep(this_object())) return;
15 ::create();
16 SetProp(P_LONG,"Ein News-Gruppen-Tool.\n\
17Befehle: 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
42void 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
59int 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
79int 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
99int 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
119int 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
139int 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
159int 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
179int 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
205int 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
231int 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
256int 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
294int 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
310int 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
330int expire()
331{
332 "/secure/news"->expire_all();
333 write("Expiring startet.\n");
334 return 1;
335}