Table of Contents

Sending Notices

This is a sample script that sends a command to Corrade to send a notice to a configured group. To use the script, the variable CORRADE must be changed to the key of your bot, GROUP must be set to the group to invite to and PASSWORD must be set to the password of the group configured in Corrade's configuration file Corrade.ini.

Once the settings are made, you can touch the primitive in order to send the group notice. The group notice is sent via the notice API call:

        llInstantMessage(CORRADE, 
            wasKeyValueEncode(
                [
                    "command", "notice",
                    "group", wasURLEscape(GROUP),
                    "password", PASSWORD,
                    "action", "send",
                    "subject", "Test",
                    "message", "Test message"
                ]
            )
        );

where:

  • subject is the subject of the notice and,
  • message is the message of the notice

These can be changed programatically using LSL.

Code

corrade_notice.lsl
///////////////////////////////////////////////////////////////////////////
//  Copyright (C) Wizardry and Steamworks 2013 - License: CC BY 2.0      //
///////////////////////////////////////////////////////////////////////////
 
///////////////////////////////////////////////////////////////////////////
//                            CONFIGURATION                              //
///////////////////////////////////////////////////////////////////////////
// The UUID / Key of the scripted agent.
string CORRADE = "aaa465f0-e18c-4aec-baa2-21b153092886";
// The name of the group to invite to.
string GROUP = "My Group";
// The password for that group in Corrade.ini.
string PASSWORD = "mypassword";
///////////////////////////////////////////////////////////////////////////
//                          END CONFIGURATION                            //
///////////////////////////////////////////////////////////////////////////
 
///////////////////////////////////////////////////////////////////////////
//    Copyright (C) 2013 Wizardry and Steamworks - License: CC BY 2.0    //
///////////////////////////////////////////////////////////////////////////
string wasKeyValueGet(string var, string kvp) {
    list dVars = llParseString2List(kvp, ["&"], []);
    do {
        list data = llParseString2List(llList2String(dVars, 0), ["="], []);
        string k = llList2String(data, 0);
        if(k != var) jump continue;
        return llList2String(data, 1);
@continue;
        dVars = llDeleteSubList(dVars, 0, 0);
    } while(llGetListLength(dVars));
    return "";
}
 
///////////////////////////////////////////////////////////////////////////
//    Copyright (C) 2013 Wizardry and Steamworks - License: CC BY 2.0    //
///////////////////////////////////////////////////////////////////////////
string wasKeyValueEncode(list kvp) {
    if(llGetListLength(kvp) < 2) return "";
    string k = llList2String(kvp, 0);
    kvp = llDeleteSubList(kvp, 0, 0);
    string v = llList2String(kvp, 0);
    kvp = llDeleteSubList(kvp, 0, 0);
    if(llGetListLength(kvp) < 2) return k + "=" + v;
    return k + "=" + v + "&" + wasKeyValueEncode(kvp);
}
 
///////////////////////////////////////////////////////////////////////////
//    Copyright (C) 2015 Wizardry and Steamworks - License: CC BY 2.0    //
///////////////////////////////////////////////////////////////////////////
// escapes a string in conformance with RFC1738
string wasURLEscape(string i) {
    string o = "";
    do {
        string c = llGetSubString(i, 0, 0);
        i = llDeleteSubString(i, 0, 0);
        if(c == "") jump continue;
        if(c == " ") {
            o += "+";
            jump continue;
        }
        if(c == "\n") {
            o += "%0D" + llEscapeURL(c);
            jump continue;
        }
        o += llEscapeURL(c);
@continue;
    } while(i != "");
    return o;
}
 
///////////////////////////////////////////////////////////////////////////
//    Copyright (C) 2015 Wizardry and Steamworks - License: CC BY 2.0    //
///////////////////////////////////////////////////////////////////////////
// unescapes a string in conformance with RFC1738
string wasURLUnescape(string i) {
    return llUnescapeURL(
        llDumpList2String(
            llParseString2List(
                llDumpList2String(
                    llParseString2List(
                        i, 
                        ["+"], 
                        []
                    ), 
                    " "
                ), 
                ["%0D%0A"], 
                []
            ), 
            "\n"
        )
    );
}
 
string URL = "";
 
default {
    state_entry() {
        llRequestURL();
    }
    http_request(key id, string method, string body) {
        if(method != URL_REQUEST_GRANTED) {
          llInstantMessage(llGetOwner(), "I cannot get any more URLs");
          return;
        }
        URL = body;
        state notify;
    }
}
 
state notify {
    touch_start(integer num) {
        llInstantMessage(CORRADE, 
            wasKeyValueEncode(
                [
                    "command", "notice",
                    "group", wasURLEscape(GROUP),
                    "password", PASSWORD,
                    "action", "send",
                    "subject", wasURLEscape("Test"),
                    "message", wasURLEscape("Test message"),
                    "callback", wasURLEscape(URL)
                ]
            )
        );
        llOwnerSay("Command sent to Corrade, reply should arrive soon...");
    }
    http_request(key id, string method, string body) {
        llHTTPResponse(id, 200, "");
        llOwnerSay(wasURLUnescape(body));
    }
}

Index


secondlife/scripted_agents/corrade/tutorials/sending_notices.txt ยท Last modified: 2019/01/03 01:36 (external edit)

Access website using Tor Access website using i2p Wizardry and Steamworks PGP Key


For the copyright, license, warranty and privacy terms for the usage of this website please see the license, privacy, copyright and the plagiarism pages.