-
Notifications
You must be signed in to change notification settings - Fork 8
/
Jobs Request System.txt
360 lines (250 loc) · 9.61 KB
/
Jobs Request System.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
/*
REQUEST SYSTEM: The easier way to add and sort jobs.
req <title>=<contents>
req/<type> <title>=<contents>
Request from staff. Different types have different outcomes, which can be
fairly easily modified with the "request types" section, at the end.
It is also simple to create a specialty command, such as:
$+request *:@trigger %!/trig.command.request=/request %0, %#
$+beat *:@trigger %!/trig.command.request=/beat [moniker( %# )]=%0, %#
... and so forth.
I've also put a single return (%r) before the contents, because it's always
driven me batty that the content starts right after a spammy timestamp. e.g.:
[1+] Thenomain added on Wed Feb 11 19:20:37 2015:
content
vs.
[1+] Thenomain added on Wed Feb 11 19:20:37 2015: content
*/
// =============================================================================
// == SETUP ====================================================================
@create Jobs Request System <jrs>=10
@set Jobs Request System <jrs>=inherit safe
@fo me=&d.jrs me=search( name=Jobs Request System <jrs> )
@desc Jobs Request System <jrs>=
I know the following request types: %r
[titlestr(
iter(
lattr( %!/d.*.bucket ),
edit( elements( %i0, 2, . ), _, %b ),
, %,%b
)
)]
// links to the Anomaly Jobs setup
@fo me=&d.jgo me=[search( name=Job Global Object <JGO> )]
@fo me=@va [v( d.jrs )]=[get( v( d.jgo )/va )]
@fo me=@vb [v( d.jrs )]=[get( v( d.jgo )/vb )]
@fo me=@vc [v( d.jrs )]=[get( v( d.jgo )/vc )]
@if not( isdbref( v( d.jgo )))=think ansi(
rh,
HEY! HEY!,
n,
%bI didn't find the `Jobs Global Object <JGO>`.
The jobs request system isn't going to work.
)
// Create an '+allstaff' generic group when one isn't set or valid
@if not( search( eobject=cand( strmatch( name( ## ), +allstaff ), strmatch( loc( ## ), get( jrs/vb )))))=
{
+jgroup/create +allstaff=All staff belong to this group.
};
@wait 3=&ismember [search( eobject=cand( strmatch( name( ## ), +allstaff ), strmatch( loc( ## ), get( jrs/vb ))))]=isstaff%( %%0 %);
// Link to the Code Object Data Parent
@fo me=@parent [v( d.jrs )]=[search( name=Code Object Data Parent <codp> )]
// =============================================================================
// == COMMANDS =================================================================
// req[uest]/<switch>, if no <switch> then default switch is 'request':
&c.request [v( d.jrs )]=
$^\+?req(uest)?(.*)$:@trig %!/trig.command.request=objeval( %#, s( %2 )), %#
@set v( d.jrs )/c.request=regex
@set v( d.jrs )/c.request=no_parse
// =============================================================================
// == TRIGGERS =================================================================
// -----------------------------------------------------------------------------
// -- Run the Command ----------------------------------------------------------
// 0: input
// 1: enactor (%#)
// s: switch
// t: title
// c: contents
// m: matches
&trig.command.request [v( d.jrs )]=
@break u( %va/FN_GUEST, %1 )={
@pemit %1=u( .msg, %qr, This command is not available to guests. )
};
think strcat(
s:%b, setr( s, trim( rest( before( %0 ), / ))), %r,
0:%b, setr( 0, trim( if( strlen( %qs ), rest( %0 ), %0 ))), %r,
t:%b, setr( t, first( %q0, = )), %r,
c:%b, setr( c, rest( %q0, = )), %r,
s:%b, setr( s, if( strlen( %qs ), %qs, request )), %r,
m:%b, setr( m, lattr( %!/d.%qs*.bucket )), %r,
m:%b, setr( m, if( words( %qm ), %qm, lattr( %!/d.*.bucket ))), %r,
);
@assert hasattr( %!, d.%qs.bucket )={
@pemit %1=u( .msg, req/%qs,
strcat(
Request type not found., %b,
It could have been:, %b,
lcstr( itemize( edit( %qm, D., , .BUCKET, ), , or ))
)
)
};
@assert u( f.validate.access, %qs, %1 )={
@pemit %1=u( .msg, req/%qs, This request type is staff-only. )
};
@assert strlen( %qt )={
@pemit %1=u( .msg, req/%qs, Your request needs a title. )
};
@assert strlen( %qc )={
@pemit %1=u( .msg, req/%qs, Your request needs some content. )
};
@trig %!/trig.create.request=%qs, %1, %qt, %qc;
// -----------------------------------------------------------------------------
// -- Create the request -------------------------------------------------------
// 0: switch (validated)
// 1: enactor (%#)
// 2: title
// 3: contents
// a: bucket name
// b: bucket dbref
// i: +jgroup name
// j: +jgroup dbref
&trig.create.request [v( d.jrs )]=
think strcat(
a:%b, setr( a, ucstr( u( f.get.bucket, %0 ))), %r,
b:%b, setr( b, u( %va/FN_FIND-BUCKET, %qa )), %r,
i:%b, setr( i, lcstr( u( f.get.jgroup, %0 ))), %r,
j:%b, setr( j, u( %va/FN_FIND-JGROUP, %qi )), %r,
);
@assert t( %qb )={
@pemit %1=u( .msg, req/%0, I can't find the '%qa' bucket for this. )
};
@assert t( %qj )={
@pemit %1=u( .msg, req/%0, I can't find the '%qi' jgroup for this. )
};
@pemit %1=u( .msg, req/%0, u( f.get.msg, %0, %2, %3 ));
@trigger %!/trig.create.job=
%1,
%qb,
u( f.get.level, %0 ),
[if(
strlen( u( f.get.prefix, %0, %1 )),
[u( f.get.prefix, %0, %1 )]:%b
)]
[u( %va/FN_STRTRUNC, trim( %2 ), 30 )],
u( %va/FN_STRTRUNC, trim( %3 ), get( %va/BUFFER )),
%qj;
// -----------------------------------------------------------------------------
// -- Create the job itself ----------------------------------------------------
// As a hook for other systems
// 0: enactor (%#)
// 1: bucket dbref (%qb)
// 2: alert level (1, 2, or 3)
// 3: job title
// 4: job contents
// 5: +jgroup dbref (%qj)
&trig.create.job [v( d.jrs )]=
@trigger %va/TRIG_CREATE=
%0,
%1,
%2,
%3,
%r%4,
,
%5,
2
// =============================================================================
// == FUNCTIONS ================================================================
&.msg [v( d.jrs )]=ansi( h, <%0>, n, %b%1 )
// -----------------------------------------------------------------------------
// -- Function: Validations ----------------------------------------------------
// (used in most, but not all, cases)
&f.validate.access [v( d.jrs )]=
cor(
isstaff( %1 ),
not( udefault( f.%0.staff-only, 0 ))
)
// -----------------------------------------------------------------------------
// -- Functions: Get information for job creation ------------------------------
// 0: switch
// 1: input (if any; msg gets the title, isstaff is enactor)
// returns: what is needed for trig.request.create
&f.get.bucket [v( d.jrs )]=udefault( d.%0.bucket, REQ )
&f.get.jgroup [v( d.jrs )]=udefault( d.%0.assign, +allstaff )
&f.get.prefix [v( d.jrs )]=udefault( d.%0.prefix, @@( none ), %1 )
&f.get.level [v( d.jrs )]=udefault( d.%0.level, 1 )
&f.get.msg [v( d.jrs )]=udefault(
d.%0.msg,
You have requested
'[u( display.msg.job_title, %1 )]'
from staff. Please allow for some time to process it.,
%1, %2
)
// =============================================================================
// == DISPLAYS & FORMATTING ====================================================
&display.msg.job_title [v( d.jrs )]=
ansi( h, secure( u( %va/FN_STRTRUNC, trim( %0 ), 30 )))
&display.generic_msg [v( d.jrs )]=
You have requested [u( display.msg.job_title, %0 )]
as a '%1' request from staff. Please allow for some time to process it.
// =============================================================================
// == REQUEST TYPES ============================================================
/*
&d.<type>.<info>
<type>
Does what you probably think.
`+req/foo` will look for information from `d.foo.<info>`.
<info>
bucket: <bucket> [required]
assign: <+jgroup> [required]
msg: <message> to send to enactor [defaulted if not set]
prefix: <prefix to message, e.g. 'BUG'> [optional]
level: <alert level, default to '2', '3' for bugs> [optional]
staff-only: '1' if staff-only
*/
// =============================================================================
// == REQUEST TYPES (game infrastructure) ======================================
/*
request (generic)
bug
code
build
equip
xp
*/
// -----------------------------------------------------------------------------
// -- Switch: Request ----------------------------------------------------------
&d.request.bucket [v( d.jrs )]=REQ
&d.request.jgroup [v( d.jrs )]=+allstaff
// -----------------------------------------------------------------------------
// -- Switch: Bug --------------------------------------------------------------
&d.bug.bucket [v( d.jrs )]=CODE
&d.bug.jgroup [v( d.jrs )]=+code
&d.bug.prefix [v( d.jrs )]=BUG
&d.bug.level [v( d.jrs )]=3
&d.bug.msg [v( d.jrs )]=
You have notified production staff of the
[u( display.msg.job_title, %0 )] bug with the details
'[secure( u( %va/FN_STRTRUNC, trim( %1 ), get( %va/BUFFER )))]'.
Staff will need the EXACT command(s) used to create this bug and,
if possible, how the result differs from what you were expecting to happen.
If you did not enter this information, please do so now.
// -----------------------------------------------------------------------------
// -- Switch: Code -------------------------------------------------------------
&d.code.bucket [v( d.jrs )]=CODE
&d.code.jgroup [v( d.jrs )]=+code
&d.code.msg [v( d.jrs )]=u( display.generic_msg, %0, code )
// -----------------------------------------------------------------------------
// -- Switch: Build ------------------------------------------------------------
&d.build.bucket [v( d.jrs )]=BUILD
&d.build.jgroup [v( d.jrs )]=+build
&d.build.msg [v( d.jrs )]=u( display.generic_msg, %0, build )
// =============================================================================
// == SWITCHES (roleplay administration) =======================================
/*
vampire
demon
werewolf
city
society
law
*/