Cleaned up things, RENAMED VARIABLES! now we have ANSW_R_* and ANSW_L_* namespaces...
authorHarvie <tomas@mudrunka.cz>
Tue, 22 Feb 2011 02:32:37 +0000 (03:32 +0100)
committerHarvie <tomas@mudrunka.cz>
Tue, 22 Feb 2011 02:32:37 +0000 (03:32 +0100)
README.md
answerscripts.c
purple/answerscripts.d/00-debug-notify.sh
purple/answerscripts.d/00-debug.sh
purple/answerscripts.d/00-forward.sh
purple/answerscripts.d/00-notify.sh
purple/answerscripts.d/00-repeat.sh
purple/answerscripts.d/10-menu.pl
purple/answerscripts.sh

index 537540367bfea2712978035ebe60d4fecc298a82..57921952dcbd76f96669caf6f342664b2fdb6905 100644 (file)
--- a/README.md
+++ b/README.md
@@ -25,23 +25,19 @@ There are lot of hacks that you can do with this simple framework if you know so
   * Basically
     * Each time you receive message, the main **answerscripts.sh script (answerscripts.exe on M$ Windows) is executed** on background
     * Every line that is outputed by this script to it's **STDOUT is sent** as response to message that executed it
-    * Following **environment values are passed** to the script:
+    * Following **environment values are passed** to the script (ANSW\_L = local user, ANSW\_R = remote user = your buddy who sent the message):
+      * ANSW\_ACTION   (what happend: im, chat, show setting dialog, event, etc...)
       * ANSW\_MSG      (text of the message)
-      * ANSW\_FROM     (who sent you the message)
-      * ANSW\_FROM\_GROUP      (group which contains that buddy)
       * ANSW\_PROTOCOL (protocol used to deliver the message. eg.: xmpp, irc,...)
-      * ANSW\_STATUS   (unique ID of status. eg.: available, away,...)
-      * ANSW\_STATUS\_MSG      (status message set by user)
-      * ANSW\_AGENT    (ID of IM client used with answerscripts)
-      * ANSW\_AGENT\_VERSION   (Version of client)
-      * ANSW\_LOCAL\_NAME      (Name of local user - untested)
-      * ANSW\_LOCAL\_ALIAS     (Alias of local user - untested)
-      * ANSW\_REMOTE\_NAME     (???)
-      * ANSW\_REMOTE\_ALIAS\_ONLY      (buggy)
-      * ANSW\_REMOTE\_SERVER\_ALIAS    (buggy)
-      * ANSW\_REMOTE\_CONTACT\_ALIAS   (buggy)
-      * ANSW\_REMOTE\_LOCAL\_ALIAS     (???)
-      * ANSW\_REMOTE\_ALIAS    (???)
+      * ANSW\_R\_NAME  (ID of remote user - "buddy")
+      * ANSW\_R\_GROUP (group which contains that buddy OR empty string)
+      * ANSW\_R\_ALIAS (buddy's alias, server alias, contact alias, username OR empty string)
+      * ANSW\_L\_NAME  (ID of local user)
+      * ANSW\_L\_ALIAS (Alias of local user OR empty string)
+      * ANSW\_L\_STATUS        (unique ID of local user's status. eg.: available, away,...)
+      * ANSW\_L\_STATUS\_MSG   (status message set by local user)
+      * ANSW\_L\_AGENT (ID of IM client used with answerscripts)
+      * ANSW\_L\_AGENT\_VERSION        (Version of client)
     * **WARNING: You should mind security (don't let attackers to execute their messages/nicks!)**
     * I guess that you will want to use more than one answerscript, so i made such answerscript which will execute all answerscripts in **~/.purple/answerscripts.d**
       * It's quite smart and all you need to do is set the filenames and permissions of answerscripts in that directory properly...
@@ -51,7 +47,7 @@ There are lot of hacks that you can do with this simple framework if you know so
 Following answerscript will reply to each incoming message if you are not available. Reply will consist of two messages: one with username of your buddy who sent you a message and text of that message; and second with your status message. Simple huh?
 
     #!/bin/sh
-    [ "$ANSW_STATUS" != 'available' ] && echo "<$ANSW_FROM> $ANSW_MSG" && echo "My status: $ANSW_STATUS_MSG";
+    [ "$ANSW_L_STATUS" != 'available' ] && echo "<$ANSW_R_NAME> $ANSW_MSG" && echo "My status: $ANSW_L_STATUS_MSG";
 
 ##Building & installation
 
index 59ac0d36d38d88efbad99cafa621b88beeda91a1..b13113f016873a1f7aa6c0602b62e64d92d40b9d 100755 (executable)
@@ -66,28 +66,31 @@ static void received_im_msg_cb(PurpleAccount *account, char *who, char *buffer,
        //Get message
        message = purple_markup_strip_html(buffer);
 
-       //Here are prototypes of some functions interesting to implement github feature request #3
-
        //LOCAL USER:
        const char* local_alias = purple_account_get_alias(account);
        const char* local_name = (char *) purple_account_get_name_for_display(account);
-       setenv(ENV_PREFIX "LOCAL_NAME", local_name, 1); //Name of local user - untested
-       setenv(ENV_PREFIX "LOCAL_ALIAS", local_alias, 1);       //Alias of local user - untested
 
        //REMOTE USER (Buddy):
+       //Here are prototypes of some functions interesting to implement github feature request #3
        //const char *  purple_contact_get_alias (PurpleContact *contact)
-       const char* remote_name = purple_buddy_get_name(buddy);
-       const char* remote_alias_only = purple_buddy_get_alias_only(buddy);
-       const char* remote_server_alias = purple_buddy_get_server_alias(buddy);
-       const char* remote_contact_alias = purple_buddy_get_contact_alias(buddy);
-       const char* remote_local_alias = purple_buddy_get_local_alias(buddy);
-       const char* remote_alias = purple_buddy_get_alias(buddy);
+       /*
+       const char* remote_name = purple_buddy_get_name(buddy); //correct name to display for a blist chat
+       const char* remote_alias_only = purple_buddy_get_alias_only(buddy); //NULL
+       const char* remote_server_alias = purple_buddy_get_server_alias(buddy); //NULL
+       const char* remote_contact_alias = purple_buddy_get_contact_alias(buddy);       //NULL
+       const char* remote_local_alias = purple_buddy_get_local_alias(buddy);   //buddy's alias; buddy's contact alias; buddy's user name.
+       */
+       /*
        setenv(ENV_PREFIX "REMOTE_NAME", remote_name, 1);       //???
        setenv(ENV_PREFIX "REMOTE_ALIAS_ONLY", remote_alias_only, 1);   //buggy
        setenv(ENV_PREFIX "REMOTE_SERVER_ALIAS", remote_server_alias, 1);       //buggy
        setenv(ENV_PREFIX "REMOTE_CONTACT_ALIAS", remote_contact_alias, 1);     //buggy
        setenv(ENV_PREFIX "REMOTE_LOCAL_ALIAS", remote_local_alias, 1); //???
-       setenv(ENV_PREFIX "REMOTE_ALIAS", remote_alias, 1);     //???
+       */
+
+       //Get buddy alias
+       const char* remote_alias = purple_buddy_get_alias(buddy);
+       if(remote_alias == NULL) remote_alias = "";
 
        //Get buddy group
        PurpleGroup *group = purple_buddy_get_group(buddy);
@@ -114,12 +117,16 @@ static void received_im_msg_cb(PurpleAccount *account, char *who, char *buffer,
        }
 
        //Export variables to environment
+       setenv(ENV_PREFIX "ACTION", "IM", 1);   //what happend: im, chat, show setting dialog, event, etc...
        setenv(ENV_PREFIX "MSG", message, 1);   //text of the message
-       setenv(ENV_PREFIX "FROM", who, 1);      //who sent you the message
-       setenv(ENV_PREFIX "FROM_GROUP", from_group, 1); //group which contains that buddy
        setenv(ENV_PREFIX "PROTOCOL", protocol_id, 1);  //protocol used to deliver the message. eg.: xmpp, irc,...
-       setenv(ENV_PREFIX "STATUS", status_id, 1);      //unique ID of status. eg.: available, away,...
-       setenv(ENV_PREFIX "STATUS_MSG", status_msg, 1); //status message set by user
+       setenv(ENV_PREFIX "R_NAME", who, 1);    //ID of remote user - "buddy"
+       setenv(ENV_PREFIX "R_GROUP", from_group, 1);    //group which contains that buddy OR empty string
+       setenv(ENV_PREFIX "R_ALIAS", remote_alias, 1);  //buddy's alias, server alias, contact alias, username OR empty string
+       setenv(ENV_PREFIX "L_NAME", local_name, 1);     //ID of local user
+       setenv(ENV_PREFIX "L_ALIAS", local_alias, 1);   //Alias of local user OR empty string
+       setenv(ENV_PREFIX "L_STATUS", status_id, 1);    //unique ID of local user's status. eg.: available, away,...
+       setenv(ENV_PREFIX "L_STATUS_MSG", status_msg, 1);       //status message set by local user
 
        //Launch job on background
        answerscripts_job *job = (answerscripts_job*) malloc(sizeof(answerscripts_job));
@@ -164,18 +171,14 @@ static PurplePluginInfo info = {
 
        "core-answerscripts",
        "AnswerScripts",
-       "0.3.1",
+       "0.4.0",
        "Framework for hooking scripts to process received messages for libpurple clients",
        "\nThis plugin will execute script \"~/.purple/" ANSWERSCRIPT "\" "
                "(or any other executable called \"" ANSWERSCRIPT "\" and found in purple_user_dir()) "
                "each time when instant message is received.\n"
                "\n- Any text printed to STDOUT by this script will be sent back as answer to received message."
                "\n- Following environment values will be set, so script can use them for responding:\n"
-               "\t- ANSW_MSG\n"
-               "\t- ANSW_FROM\n"
-               "\t- ANSW_PROTOCOL\n"
-               "\t- ANSW_STATUS\n"
-               "\t- ANSW_STATUS_MSG\n"
+               "\t- " ENV_PREFIX "* (see documentation or env for more)\n"
                "\nPlease see sample scripts, documentation, website and source code for more informations...\n"
                "\n(-; Peace ;-)\n",
        "Tomas Mudrunka <harvie@email.cz>",
@@ -196,8 +199,8 @@ static PurplePluginInfo info = {
 
 static void init_plugin(PurplePlugin * plugin) {
        //Export static environment variables
-       setenv(ENV_PREFIX "AGENT", (char *) purple_core_get_ui(), 1);   //ID of IM client used with answerscripts
-       setenv(ENV_PREFIX "AGENT_VERSION", (char *) purple_core_get_version(), 1);      //Version of client
+       setenv(ENV_PREFIX "L_AGENT", (char *) purple_core_get_ui(), 1); //ID of IM client used with answerscripts
+       setenv(ENV_PREFIX "L_AGENT_VERSION", (char *) purple_core_get_version(), 1);    //Version of client
 }
 
 PURPLE_INIT_PLUGIN(autoanswer, init_plugin, info)
index 18bc0c4d3c6ccfec1b752e987827fc695d240bb6..c5fb354065795ba7428b27dbbd1cacf456dcf93c 100755 (executable)
@@ -1,3 +1,3 @@
 #!/bin/sh
 #Debug for systems with notify
-notify-send AnswerScripts "$(env | grep '^ANSW_')" &>/dev/null
+notify-send AnswerScripts "$(env | grep '^ANSW_' | sort)" &>/dev/null
index de7c5491947a308e3c00fc28d89fcdef2c4f88ff..3ccca3a18c7c5c8eaa917b96d96a558d5381bf69 100755 (executable)
@@ -2,6 +2,6 @@
 #Debug
 (
 echo "DATE: $(date)";
-env | grep '^ANSW_';
+env | grep '^ANSW_' | sort;
 echo =============================================
 ) >&2;
index 4ecad9fb4d2a2f284ea8f20e7072c9b618f1141b..a61ce0023f9ff2fe81532157ab261a754b568119 100755 (executable)
@@ -3,4 +3,4 @@
 FORWARD_PROTOCOL='irc';
 FORWARD_ACCOUNT='Harvie@irc.freenode.net';
 FORWARD_TO='hrv';
-purple-remote "$FORWARD_PROTOCOL:goim?account=$FORWARD_ACCOUNT&screenname=$FORWARD_TO&message=""$(echo "<$ANSW_PROTOCOL:$ANSW_FROM> $ANSW_MSG" | tr '&' ' ')"
+purple-remote "$FORWARD_PROTOCOL:goim?account=$FORWARD_ACCOUNT&screenname=$FORWARD_TO&message=""$(echo "<$ANSW_PROTOCOL:$ANSW_R_NAME> $ANSW_MSG" | tr '&' ' ')"
index 3008282de8a1d38e88a3d5b27f62ffde0cc09e7a..021ef5aa2cec494902808c12c217f1429c976fb0 100755 (executable)
@@ -1,3 +1,3 @@
 #!/bin/sh
 #Show notification for each incomming message
-notify-send "$ANSW_PROTOCOL:$ANSW_FROM" "$ANSW_MSG"
+notify-send "$ANSW_PROTOCOL:$ANSW_R_NAME" "$ANSW_MSG"
index af2520fda3fc6d31a8dc76fdbbf0470780cf58fa..7dab6e0c0c8e514c63b48007d6b5a2c3e04909c5 100755 (executable)
@@ -1,3 +1,3 @@
 #!/bin/sh
 #Dumb libpurple core-answerscripts script. Hello world!
-echo "REPEAT:$ANSW_PROTOCOL:$ANSW_FROM> $ANSW_MSG";
+echo "REPEAT:$ANSW_PROTOCOL:$ANSW_R_NAME> $ANSW_MSG";
index f9bf7f7efed40a5bbe0d6798433a00befa20ae46..e64ad6a28063f67cda3df3e7d4275c1c10c5f0bc 100755 (executable)
@@ -7,10 +7,10 @@ use v5.10; #given/when (if you need to use older PERL, you can find older versio
 given ($ENV{ANSW_MSG}) {
        when (/^!help$/)        { print qx{ grep -o 'when \(/[^\$/]*' "$0" | grep -o '!.*' | tr '\n' ',' }; }
        when (/^!ping$/)        { print "PONG"; }
-       when (/^!whoami$/)      { print "You are: $ENV{ANSW_FROM}"; }
-       when (/^!whoareyou$/)   { print "Hello, my name is $ENV{ANSW_LOCAL_NAME} ;-)"; }
-       when (/^!version$/)     { print "$ENV{ANSW_AGENT} $ENV{ANSW_AGENT_VERSION}"; }
-       when (/^!status$/)      { print "[$ENV{ANSW_STATUS}] $ENV{ANSW_STATUS_MSG}"; }
+       when (/^!whoami$/)      { print "You are: $ENV{ANSW_R_NAME}"; }
+       when (/^!whoareyou$/)   { print "Hello, my name is $ENV{ANSW_L_NAME} ;-)"; }
+       when (/^!version$/)     { print "$ENV{ANSW_L_AGENT} $ENV{ANSW_L_AGENT_VERSION}"; }
+       when (/^!status$/)      { print "[$ENV{ANSW_L_STATUS}] $ENV{ANSW_L_STATUS_MSG}"; }
        when (/^!(reboot|reset|restart|halt)$/) { print "Broadcast message: The system is going down for reboot NOW !!"; }
        when (/^!google/)       { print "UTFG Yourself: http://google.com/"; }
        when (/^!uptime$/)      { print qx{uptime}; }
index 44ce2be292ec5952b1e4b072618a1edb98edd6ac..3b72f961a438905d4ff97246aae90e2777e110b8 100755 (executable)
 #              - 51-79 executed after delay, multiline output (serial processing)
 #              - 80-99 reserved for future
 
-#legacy support, please do NOT use PURPLE_* variables in new scripts,
-#this will be removed in future releases:
-export PURPLE_FROM="$ANSW_FROM"
-export PURPLE_MSG="$ANSW_MSG"
-
 #this may be modified to use run-parts from coreutils in future (can't get it to work):
 
 dir="$(dirname "$0")"; cd "$dir" #chdir to ~/.purple/ or similar
This page took 0.211518 seconds and 4 git commands to generate.