Difference between revisions of "HTTP API/Bot Commands/get balance"

From SmartBots Developers Docs
Jump to: navigation, search
(Edited to use get_post_value() as seen on http://wiki.secondlife.com/wiki/Http_response)
Line 27: Line 27:
 
key httpReq=NULL_KEY;
 
key httpReq=NULL_KEY;
  
default {
+
//Get posted data's value.
 +
//This function is from http://wiki.secondlife.com/wiki/Http_response
 +
string get_post_value(string content, string returns) {
 +
    //Get the parameters and number of parameters.
 +
    list params =  llParseString2List(content,["&"],[]);
 +
    integer index = ~llGetListLength(params);
  
     touch_start(integer total_number) {
+
     //Create list for our information.
        string params = llDumpList2String([
+
    list keys;
          "action="  + "get_balance",
+
    list values;
  
          "apikey=" + llEscapeURL(sbApiKey),
+
    //Loop through the parameters.
          "botname=" + llEscapeURL(sbBotName),
+
    while (++index) {
          "secret=" + llEscapeURL(sbBotAccessCode)
+
        //Add the parameters to our list.
         ], "&");
+
        list parsedParams llParseString2List(llList2String(params, index), ["="], []);
 +
        keys += llUnescapeURL(llList2String(parsedParams, 0));
 +
        values += llUnescapeURL(llList2String(parsedParams, 1));
 +
    }
 +
 +
    //Return our parameter or "FAIL".
 +
    integer found = llListFindList(keys, [returns]);
 +
    if(~found) {
 +
         return llList2String(values, found);
 +
    } else {
 +
        return "FAIL";
 +
    }
 +
}
  
         httpReq=llHTTPRequest("http://api.mysmartbots.com/api/bot.html",
+
default {
        [HTTP_METHOD,"POST"], params);
+
   
 +
    //When the owner touches the object.
 +
    touch_start(integer total_number) {
 +
         //If it's not the owner touching the object.
 +
        if(llDetectedKey(0) != llGetOwner()) {
 +
          llInstantMessage(llDetectedKey(0), "Only my owner can use me!");
 +
         
 +
        //If it is the owner touching the object.
 +
        } else {
 +
            //Set up the parameters we'll send to SmartBots.
 +
            string params = llDumpList2String([
 +
              "action="  + "get_balance",
 +
              "apikey="  + llEscapeURL(sbApiKey),
 +
              "botname=" + llEscapeURL(sbBotName),
 +
              "secret="  + llEscapeURL(sbBotAccessCode)
 +
            ], "&");
 +
   
 +
            //Send the POST request to SmartBots.
 +
            httpReq=llHTTPRequest("http://api.mysmartbots.com/api/bot.html", [HTTP_METHOD,"POST"], params);
 +
        }
 
     }
 
     }
  
     // This event is required only if you want to process the SmartBots's reply
+
     //Get the SmartBots reply from the server.
 
     http_response(key request_id, integer status, list metadata, string body) {
 
     http_response(key request_id, integer status, list metadata, string body) {
 +
 +
        //Return if this is not our request.
 
         if(request_id!=httpReq) return;
 
         if(request_id!=httpReq) return;
   
 
        // Store result here
 
        string result;
 
        string resulttext="";
 
        string action="";
 
        integer balance = 0;
 
 
          
 
          
         // Parse server reply
+
         //Parse the SmartBots reply.
         list pairs=llParseString2List(body,["&"],[]);
+
         string action    = get_post_value(body, "action");
         integer i=0;
+
         string result    = get_post_value(body, "result");
        for(i=0;i<llGetListLength(pairs);i++) {
+
        string resulttext = get_post_value(body, "resulttext");
            list keyv=llParseString2List(llList2String(pairs,i),["="],[]);
+
        string balance    = get_post_value(body, "balance");
            string keyname=llList2String(keyv,0);
+
            string value=llUnescapeURL(llList2String(keyv,1));
+
       
+
            //Store the result values.
+
            if(keyname=="result")      result=value;
+
            if(keyname=="resulttext") resulttext=value;
+
            if(keyname=="action")      action=value;
+
            if(keyname=="balance")     balance=(integer)value;
+
        }
+
 
      
 
      
 +
        //If the command failed.
 
         if(result=="FAIL") {
 
         if(result=="FAIL") {
 +
            //Tell the owner why the command has failed.
 
             llOwnerSay("Command '"+action+"' failed: "+resulttext);
 
             llOwnerSay("Command '"+action+"' failed: "+resulttext);
 +
 +
        //If the command was a success.
 
         } else {
 
         } else {
 
             //Say the bot's balance.
 
             //Say the bot's balance.
             llOwnerSay("Your bot has L$" + (string)balance);
+
             llOwnerSay("Your bot has L$" + balance + " in it's account!");
 
         }
 
         }
 
     }
 
     }

Revision as of 08:23, 23 December 2016

Returns avatar L$ balance.

Variables

The following table shows input values (you send them with the API call) and returned output values.

Variable Required Description
Input basic parameters:
action yes = get_balance
apikey yes Your personal developer's API key.
botname yes Your bot's SL login.
secret yes Bot access code of your bot.
dataType optional Set to "json" to get JSON reply instead of URL-encoded string
custom optional The custom data (string) to be passed back to caller script. This value will be returned back to the caller in HTTP response.
Input:
command takes no input parameters
Output:
(to be received in http_response LSL event, see docs for details)
result OK - command completed successfully
FAIL - command failed
resulttext Detailed reason for the failure.
custom The value from input "custom" parameter. See above.
balance The balance of the bot

Example

Requesting the avatar's balance from LSL:

string sbApiKey="...";
string sbBotName="OneSmartBot Resident";
string sbBotAccessCode="...";

key httpReq=NULL_KEY;

//Get posted data's value.
//This function is from http://wiki.secondlife.com/wiki/Http_response
string get_post_value(string content, string returns) {
    //Get the parameters and number of parameters.
    list params =  llParseString2List(content,["&"],[]);
    integer index = ~llGetListLength(params);

    //Create list for our information.
    list keys;
    list values;

    //Loop through the parameters.
    while (++index) {
        //Add the parameters to our list.
        list parsedParams =  llParseString2List(llList2String(params, index), ["="], []);
        keys += llUnescapeURL(llList2String(parsedParams, 0));
        values += llUnescapeURL(llList2String(parsedParams, 1));
    }
 
    //Return our parameter or "FAIL".
    integer found = llListFindList(keys, [returns]);
    if(~found) {
        return llList2String(values, found);
    } else {
        return "FAIL";
    }
}

default {
    
    //When the owner touches the object.
    touch_start(integer total_number) {
        //If it's not the owner touching the object.
        if(llDetectedKey(0) != llGetOwner()) {
           llInstantMessage(llDetectedKey(0), "Only my owner can use me!");
           
        //If it is the owner touching the object.
        } else {
            //Set up the parameters we'll send to SmartBots.
            string params = llDumpList2String([
              "action="  + "get_balance",
              "apikey="  + llEscapeURL(sbApiKey),
              "botname=" + llEscapeURL(sbBotName),
              "secret="  + llEscapeURL(sbBotAccessCode)
            ], "&");
    
            //Send the POST request to SmartBots.
            httpReq=llHTTPRequest("http://api.mysmartbots.com/api/bot.html", [HTTP_METHOD,"POST"], params);
        }
    }

    //Get the SmartBots reply from the server.
    http_response(key request_id, integer status, list metadata, string body) {

        //Return if this is not our request.
        if(request_id!=httpReq) return;
        
        //Parse the SmartBots reply.
        string action     = get_post_value(body, "action");
        string result     = get_post_value(body, "result");
        string resulttext = get_post_value(body, "resulttext");
        string balance    = get_post_value(body, "balance");
    
        //If the command failed.
        if(result=="FAIL") {
            //Tell the owner why the command has failed.
            llOwnerSay("Command '"+action+"' failed: "+resulttext);

        //If the command was a success.
        } else {
            //Say the bot's balance.
            llOwnerSay("Your bot has L$" + balance + " in it's account!");
        }
    }
}


<< return back to Bot commands

(Miss an API call or parameter? Submit your request in forum)