corrade-lsl-templates – Diff between revs 41 and 42

Subversion Repositories:
Rev:
Show entire fileIgnore whitespace
Rev 41 Rev 42
Line 1... Line 1...
1 /////////////////////////////////////////////////////////////////////////// 1 ///////////////////////////////////////////////////////////////////////////
2 // Copyright (C) Wizardry and Steamworks 2016 - License: CC BY 2.0 // 2 // Copyright (C) Wizardry and Steamworks 2016 - License: GNU GPLv3 //
3 /////////////////////////////////////////////////////////////////////////// 3 ///////////////////////////////////////////////////////////////////////////
4 // 4 //
5 // A module that invites people to the group members. 5 // A module that invites people to the group members.
6 // 6 //
7 /////////////////////////////////////////////////////////////////////////// 7 ///////////////////////////////////////////////////////////////////////////
Line 15... Line 15...
15 list a = llParseStringKeepNulls(data, ["&", "="], []); 15 list a = llParseStringKeepNulls(data, ["&", "="], []);
16 integer i = llListFindList(llList2ListStrided(a, 0, -1, 2), [ k ]); 16 integer i = llListFindList(llList2ListStrided(a, 0, -1, 2), [ k ]);
17 if(i != -1) return llList2String(a, 2*i+1); 17 if(i != -1) return llList2String(a, 2*i+1);
18 return ""; 18 return "";
19 } 19 }
20 20  
21 /////////////////////////////////////////////////////////////////////////// 21 ///////////////////////////////////////////////////////////////////////////
22 // Copyright (C) 2013 Wizardry and Steamworks - License: CC BY 2.0 // 22 // Copyright (C) 2013 Wizardry and Steamworks - License: GNU GPLv3 //
23 /////////////////////////////////////////////////////////////////////////// 23 ///////////////////////////////////////////////////////////////////////////
24 string wasKeyValueEncode(list data) { 24 string wasKeyValueEncode(list data) {
25 list k = llList2ListStrided(data, 0, -1, 2); 25 list k = llList2ListStrided(data, 0, -1, 2);
26 list v = llList2ListStrided(llDeleteSubList(data, 0, 0), 0, -1, 2); 26 list v = llList2ListStrided(llDeleteSubList(data, 0, 0), 0, -1, 2);
27 data = []; 27 data = [];
Line 32... Line 32...
32 } while(llGetListLength(k) != 0); 32 } while(llGetListLength(k) != 0);
33 return llDumpList2String(data, "&"); 33 return llDumpList2String(data, "&");
34 } 34 }
Line 35... Line 35...
35   35  
36 /////////////////////////////////////////////////////////////////////////// 36 ///////////////////////////////////////////////////////////////////////////
37 // Copyright (C) 2011 Wizardry and Steamworks - License: CC BY 2.0 // 37 // Copyright (C) 2011 Wizardry and Steamworks - License: GNU GPLv3 //
38 /////////////////////////////////////////////////////////////////////////// 38 ///////////////////////////////////////////////////////////////////////////
39 // http://was.fm/secondlife/wanderer 39 // http://was.fm/secondlife/wanderer
40 vector wasCirclePoint(float radius) { 40 vector wasCirclePoint(float radius) {
41 float x = llPow(-1, 1 + (integer) llFrand(2)) * llFrand(radius*2); 41 float x = llPow(-1, 1 + (integer) llFrand(2)) * llFrand(radius*2);
Line 44... Line 44...
44 return <x, y, 0>; 44 return <x, y, 0>;
45 return wasCirclePoint(radius); 45 return wasCirclePoint(radius);
46 } 46 }
Line 47... Line 47...
47   47  
48 /////////////////////////////////////////////////////////////////////////// 48 ///////////////////////////////////////////////////////////////////////////
49 // Copyright (C) 2015 Wizardry and Steamworks - License: CC BY 2.0 // 49 // Copyright (C) 2015 Wizardry and Steamworks - License: GNU GPLv3 //
50 /////////////////////////////////////////////////////////////////////////// 50 ///////////////////////////////////////////////////////////////////////////
51 // escapes a string in conformance with RFC1738 51 // escapes a string in conformance with RFC1738
52 string wasURLEscape(string i) { 52 string wasURLEscape(string i) {
53 string o = ""; 53 string o = "";
Line 68... Line 68...
68 } while(i != ""); 68 } while(i != "");
69 return o; 69 return o;
70 } 70 }
Line 71... Line 71...
71   71  
72 /////////////////////////////////////////////////////////////////////////// 72 ///////////////////////////////////////////////////////////////////////////
73 // Copyright (C) 2015 Wizardry and Steamworks - License: CC BY 2.0 // 73 // Copyright (C) 2015 Wizardry and Steamworks - License: GNU GPLv3 //
74 /////////////////////////////////////////////////////////////////////////// 74 ///////////////////////////////////////////////////////////////////////////
75 list wasCSVToList(string csv) { 75 list wasCSVToList(string csv) {
76 list l = []; 76 list l = [];
77 list s = []; 77 list s = [];
Line 107... Line 107...
107 // postcondition: length(s) = 0 107 // postcondition: length(s) = 0
108 return l + m; 108 return l + m;
109 } 109 }
Line 110... Line 110...
110   110  
111 /////////////////////////////////////////////////////////////////////////// 111 ///////////////////////////////////////////////////////////////////////////
112 // Copyright (C) 2015 Wizardry and Steamworks - License: CC BY 2.0 // 112 // Copyright (C) 2015 Wizardry and Steamworks - License: GNU GPLv3 //
113 /////////////////////////////////////////////////////////////////////////// 113 ///////////////////////////////////////////////////////////////////////////
114 string wasListToCSV(list l) { 114 string wasListToCSV(list l) {
115 list v = []; 115 list v = [];
116 do { 116 do {
117 string a = llDumpList2String( 117 string a = llDumpList2String(
118 llParseStringKeepNulls( 118 llParseStringKeepNulls(
119 llList2String( 119 llList2String(
120 l, 120 l,
121 0 121 0
122 ), 122 ),
123 ["\""], 123 ["\""],
124 [] 124 []
125 ), 125 ),
126 "\"\"" 126 "\"\""
127 ); 127 );
128 if(llParseStringKeepNulls( 128 if(llParseStringKeepNulls(
129 a, 129 a,
130 [" ", ",", "\n", "\""], [] 130 [" ", ",", "\n", "\""], []
131 ) != 131 ) !=
132 (list) a 132 (list) a
133 ) a = "\"" + a + "\""; 133 ) a = "\"" + a + "\"";
134 v += a; 134 v += a;
135 l = llDeleteSubList(l, 0, 0); 135 l = llDeleteSubList(l, 0, 0);
136 } while(l != []); 136 } while(l != []);
137 return llDumpList2String(v, ","); 137 return llDumpList2String(v, ",");
Line 138... Line 138...
138 } 138 }
139   139  
140 /////////////////////////////////////////////////////////////////////////// 140 ///////////////////////////////////////////////////////////////////////////
141 // Copyright (C) 2015 Wizardry and Steamworks - License: CC BY 2.0 // 141 // Copyright (C) 2015 Wizardry and Steamworks - License: GNU GPLv3 //
142 /////////////////////////////////////////////////////////////////////////// 142 ///////////////////////////////////////////////////////////////////////////
143 // unescapes a string in conformance with RFC1738 143 // unescapes a string in conformance with RFC1738
144 string wasURLUnescape(string i) { 144 string wasURLUnescape(string i) {
145 return llUnescapeURL( 145 return llUnescapeURL(
146 llDumpList2String( 146 llDumpList2String(
147 llParseString2List( 147 llParseString2List(
148 llDumpList2String( 148 llDumpList2String(
149 llParseString2List( 149 llParseString2List(
150 i, 150 i,
151 ["+"], 151 ["+"],
152 [] 152 []
153 ), 153 ),
154 " " 154 " "
155 ), 155 ),
156 ["%0D%0A"], 156 ["%0D%0A"],
157 [] 157 []
158 ), 158 ),
159 "\n" 159 "\n"
160 ) 160 )
Line 161... Line 161...
161 ); 161 );
162 } 162 }
163   -  
164 // configuration data -  
165 string configuration = ""; 163  
166 // callback URL 164 // configuration data
167 string URL = ""; 165 string configuration = "";
168 // store message over state. 166 // store message over state.
Line 187... Line 185...
187 } 185 }
188 on_rez(integer num) { 186 on_rez(integer num) {
189 llResetScript(); 187 llResetScript();
190 } 188 }
191 changed(integer change) { 189 changed(integer change) {
192 if((change & CHANGED_INVENTORY) || 190 if((change & CHANGED_INVENTORY) ||
193 (change & CHANGED_REGION_START) || 191 (change & CHANGED_REGION_START) ||
194 (change & CHANGED_OWNER)) { 192 (change & CHANGED_OWNER)) {
195 llResetScript(); 193 llResetScript();
196 } 194 }
197 } 195 }
198 state_exit() { 196 state_exit() {
Line 207... Line 205...
207 } 205 }
208 link_message(integer sender, integer num, string message, key id) { 206 link_message(integer sender, integer num, string message, key id) {
209 // We only care about notifications now. 207 // We only care about notifications now.
210 if(id != "notification") 208 if(id != "notification")
211 return; 209 return;
212 210  
213 // This script only processes group notifications. 211 // This script only processes group notifications.
214 if(wasKeyValueGet("type", message) != "group") 212 if(wasKeyValueGet("type", message) != "group" ||
-   213 (wasKeyValueGet("type", message) == "group" &&
-   214 wasURLUnescape(wasKeyValueGet("group", message)) !=
-   215 wasKeyValueGet("group", configuration)))
215 return; 216 return;
216 217  
217 // Get the sent message. 218 // Get the sent message.
218 data = wasURLUnescape( 219 data = wasURLUnescape(
219 wasKeyValueGet( 220 wasKeyValueGet(
220 "message", 221 "message",
221 message 222 message
222 ) 223 )
223 ); 224 );
224 225  
225 // Check if this is an eggdrop command. 226 // Check if this is an eggdrop command.
226 if(llGetSubString(data, 0, 0) != 227 if(llGetSubString(data, 0, 0) !=
227 wasKeyValueGet("command", configuration)) 228 wasKeyValueGet("command", configuration))
228 return; 229 return;
229 230  
230 // Check if the command matches the current module. 231 // Check if the command matches the current module.
231 list command = llParseString2List(data, [" "], []); 232 list command = llParseString2List(data, [" "], []);
232 if(llList2String(command, 0) != 233 if(llList2String(command, 0) !=
233 wasKeyValueGet("command", configuration) + "invite") 234 wasKeyValueGet("command", configuration) + "invite")
234 return; 235 return;
235 236  
236 // Remove command. 237 // Remove command.
237 command = llDeleteSubList(command, 0, 0); 238 command = llDeleteSubList(command, 0, 0);
238 239  
239 // Dump the rest of the message. 240 // Dump the rest of the message.
240 data = llDumpList2String(command, " "); 241 data = llDumpList2String(command, " ");
241 -  
242 // Get an URL. -  
243 state url; -  
244 } -  
245 on_rez(integer num) { -  
246 llResetScript(); -  
247 } -  
248 changed(integer change) { -  
249 if((change & CHANGED_INVENTORY) || -  
250 (change & CHANGED_REGION_START) || -  
251 (change & CHANGED_OWNER)) { -  
252 llResetScript(); -  
253 } -  
254 } -  
255 } -  
Line 256... Line -...
256   -  
257 state url { -  
258 state_entry() { -  
259 // DEBUG -  
260 llOwnerSay("[Invite] Requesting URL..."); 242  
261 llRequestURL(); -  
262 } -  
263 http_request(key id, string method, string body) { -  
264 if(method != URL_REQUEST_GRANTED) return; -  
265 URL = body; -  
266 // DEBUG -  
267 llOwnerSay("[Invite] Got URL..."); 243 // Search for agent.
268 state search; 244 state search;
269 } 245 }
270 on_rez(integer num) { 246 on_rez(integer num) {
271 llResetScript(); 247 llResetScript();
272 } 248 }
273 changed(integer change) { 249 changed(integer change) {
274 if((change & CHANGED_INVENTORY) || 250 if((change & CHANGED_INVENTORY) ||
275 (change & CHANGED_REGION_START) || 251 (change & CHANGED_REGION_START) ||
276 (change & CHANGED_OWNER)) { 252 (change & CHANGED_OWNER)) {
277 llResetScript(); 253 llResetScript();
278 } 254 }
279 } 255 }
Line 283... Line 259...
283 state_entry() { 259 state_entry() {
284 // DEBUG 260 // DEBUG
285 llOwnerSay("[Invite] Searching for agent."); 261 llOwnerSay("[Invite] Searching for agent.");
286 llInstantMessage( 262 llInstantMessage(
287 wasKeyValueGet( 263 wasKeyValueGet(
288 "corrade", 264 "corrade",
289 configuration 265 configuration
290 ), 266 ),
291 wasKeyValueEncode( 267 wasKeyValueEncode(
292 [ 268 [
293 "command", "directorysearch", 269 "command", "directorysearch",
294 "group", wasURLEscape( 270 "group", wasURLEscape(
295 wasKeyValueGet( 271 wasKeyValueGet(
296 "group", 272 "group",
297 configuration 273 configuration
298 ) 274 )
299 ), 275 ),
300 "password", wasURLEscape( 276 "password", wasURLEscape(
301 wasKeyValueGet( 277 wasKeyValueGet(
302 "password", 278 "password",
303 configuration 279 configuration
304 ) 280 )
305 ), 281 ),
306 "type", "people", 282 "type", "people",
307 "name", wasURLEscape(data), 283 "name", wasURLEscape(data),
Line 311... Line 287...
311 "match", 287 "match",
312 wasURLEscape("(?i),?([^,$]*" + data +"[^,$]*),?") 288 wasURLEscape("(?i),?([^,$]*" + data +"[^,$]*),?")
313 ] 289 ]
314 ) 290 )
315 ),*/ 291 ),*/
316 "callback", wasURLEscape(URL) 292 "callback", wasURLEscape(
-   293 wasKeyValueGet(
-   294 "URL",
-   295 configuration
-   296 )
-   297 )
317 ] 298 ]
318 ) 299 )
319 ); 300 );
320 llSetTimerEvent(60); 301 llSetTimerEvent(60);
321 } 302 }
322 http_request(key id, string method, string body) { 303 link_message(integer sender, integer num, string body, key id) {
323 llHTTPResponse(id, 200, "OK"); 304 // Only process callbacks for the database command.
324 if(wasKeyValueGet("command", body) != "directorysearch" || 305 if(id != "callback" || wasKeyValueGet("command", body) != "directorysearch")
-   306 return;
-   307  
325 wasKeyValueGet("success", body) != "True") { 308 if(wasKeyValueGet("success", body) != "True") {
326 // DEBUG 309 // DEBUG
327 llOwnerSay("[Invite] Unable to search for agent: " + 310 llOwnerSay("[Invite] Unable to search for agent: " +
328 wasURLUnescape( 311 wasURLUnescape(
329 wasKeyValueGet("error", body) 312 wasKeyValueGet("error", body)
330 ) 313 )
331 ); 314 );
332 llReleaseURL(URL); -  
333 state listen_group; 315 state listen_group;
334 } 316 }
335 317  
336 list first_last = llParseString2List(data, [" "], []); 318 list first_last = llParseString2List(data, [" "], []);
337 firstname = llList2String(first_last, 0); 319 firstname = llList2String(first_last, 0);
338 lastname = llList2String(first_last, 1); 320 lastname = llList2String(first_last, 1);
339 321  
340 list found_agent = wasCSVToList( 322 list found_agent = wasCSVToList(
341 wasURLUnescape( 323 wasURLUnescape(
342 wasKeyValueGet("data", body) 324 wasKeyValueGet("data", body)
343 ) 325 )
344 ); 326 );
345 327  
346 if(llToUpper( 328 if(llToUpper(
347 llList2String( 329 llList2String(
348 found_agent, 330 found_agent,
349 llListFindList( 331 llListFindList(
350 found_agent, 332 found_agent,
351 (list)"FirstName" 333 (list)"FirstName"
352 ) + 1 334 ) + 1
353 ) 335 )
354 ) != llToUpper(firstname) || 336 ) != llToUpper(firstname) ||
355 llToUpper( 337 llToUpper(
Line 360... Line 342...
360 (list)"LastName" 342 (list)"LastName"
361 ) + 1 343 ) + 1
362 ) 344 )
363 ) != llToUpper(lastname)) { 345 ) != llToUpper(lastname)) {
364 data = "Agent not found."; 346 data = "Agent not found.";
365 llReleaseURL(URL); -  
366 state tell; 347 state tell;
367 } 348 }
368 349  
369 state invite; 350 state invite;
370 } 351 }
371 timer() { 352 timer() {
372 llReleaseURL(URL); -  
373 state listen_group; 353 state listen_group;
374 } 354 }
375 on_rez(integer num) { 355 on_rez(integer num) {
376 llResetScript(); 356 llResetScript();
377 } 357 }
378 changed(integer change) { 358 changed(integer change) {
379 if((change & CHANGED_INVENTORY) || 359 if((change & CHANGED_INVENTORY) ||
380 (change & CHANGED_REGION_START) || 360 (change & CHANGED_REGION_START) ||
381 (change & CHANGED_OWNER)) { 361 (change & CHANGED_OWNER)) {
382 llResetScript(); 362 llResetScript();
383 } 363 }
384 } 364 }
385 state_exit() { 365 state_exit() {
Line 391... Line 371...
391 state_entry() { 371 state_entry() {
392 // DEBUG 372 // DEBUG
393 llOwnerSay("[Invite] inviting..."); 373 llOwnerSay("[Invite] inviting...");
394 llInstantMessage( 374 llInstantMessage(
395 wasKeyValueGet( 375 wasKeyValueGet(
396 "corrade", 376 "corrade",
397 configuration 377 configuration
398 ), 378 ),
399 wasKeyValueEncode( 379 wasKeyValueEncode(
400 [ 380 [
401 "command", "invite", 381 "command", "invite",
402 "group", wasURLEscape( 382 "group", wasURLEscape(
403 wasKeyValueGet( 383 wasKeyValueGet(
404 "group", 384 "group",
405 configuration 385 configuration
406 ) 386 )
407 ), 387 ),
408 "password", wasURLEscape( 388 "password", wasURLEscape(
409 wasKeyValueGet( 389 wasKeyValueGet(
410 "password", 390 "password",
411 configuration 391 configuration
412 ) 392 )
413 ), 393 ),
414 "firstname", firstname, 394 "firstname", firstname,
415 "lastname", lastname, 395 "lastname", lastname,
416 "soft", "True", 396 "soft", "True",
417 "verify", "False", 397 "verify", "False",
418 "callback", wasURLEscape(URL) 398 "callback", wasURLEscape(
-   399 wasKeyValueGet(
-   400 "URL",
-   401 configuration
-   402 )
-   403 )
419 ] 404 ]
420 ) 405 )
421 ); 406 );
422 llSetTimerEvent(60); 407 llSetTimerEvent(60);
423 } 408 }
424 http_request(key id, string method, string body) { 409 link_message(integer sender, integer num, string body, key id) {
425 llHTTPResponse(id, 200, "OK"); 410 // Only process callbacks for the database command.
426 llReleaseURL(URL); -  
427 if(wasKeyValueGet("command", body) != "invite" || 411 if(id != "callback" || wasKeyValueGet("command", body) != "invite")
-   412 return;
-   413  
428 wasKeyValueGet("success", body) != "True") { 414 if(wasKeyValueGet("success", body) != "True") {
429 // DEBUG 415 // DEBUG
430 llOwnerSay("[Eject] Unable to invite agent: " + 416 llOwnerSay("[Eject] Unable to invite agent: " +
431 wasURLUnescape( 417 wasURLUnescape(
432 wasKeyValueGet("error", body) 418 wasKeyValueGet("error", body)
433 ) 419 )
434 ); 420 );
435 state listen_group; 421 state listen_group;
436 } 422 }
437 423  
438 data = "Butters (Jym) was sent to pick them up!"; 424 data = "Butters (Jym) was sent to pick them up!";
439 425  
440 state tell; 426 state tell;
441 } 427 }
442 timer() { 428 timer() {
443 llReleaseURL(URL); -  
444 state listen_group; 429 state listen_group;
445 } 430 }
446 on_rez(integer num) { 431 on_rez(integer num) {
447 llResetScript(); 432 llResetScript();
448 } 433 }
449 changed(integer change) { 434 changed(integer change) {
450 if((change & CHANGED_INVENTORY) || 435 if((change & CHANGED_INVENTORY) ||
451 (change & CHANGED_REGION_START) || 436 (change & CHANGED_REGION_START) ||
452 (change & CHANGED_OWNER)) { 437 (change & CHANGED_OWNER)) {
453 llResetScript(); 438 llResetScript();
454 } 439 }
455 } 440 }
456 state_exit() { 441 state_exit() {
Line 462... Line 447...
462 state_entry() { 447 state_entry() {
463 // DEBUG 448 // DEBUG
464 llOwnerSay("[Invite] Sending to group."); 449 llOwnerSay("[Invite] Sending to group.");
465 llInstantMessage( 450 llInstantMessage(
466 wasKeyValueGet( 451 wasKeyValueGet(
467 "corrade", 452 "corrade",
468 configuration 453 configuration
469 ), 454 ),
470 wasKeyValueEncode( 455 wasKeyValueEncode(
471 [ 456 [
472 "command", "tell", 457 "command", "tell",
473 "group", wasURLEscape( 458 "group", wasURLEscape(
474 wasKeyValueGet( 459 wasKeyValueGet(
475 "group", 460 "group",
476 configuration 461 configuration
477 ) 462 )
478 ), 463 ),
479 "password", wasURLEscape( 464 "password", wasURLEscape(
480 wasKeyValueGet( 465 wasKeyValueGet(
481 "password", 466 "password",
482 configuration 467 configuration
483 ) 468 )
484 ), 469 ),
485 "entity", "group", 470 "entity", "group",
486 "message", wasURLEscape(data) 471 "message", wasURLEscape(data)