From b1866b8c5dc9289d195f78dd77c6007131781d14 Mon Sep 17 00:00:00 2001 From: Harvie Date: Tue, 22 Feb 2011 03:32:37 +0100 Subject: [PATCH] Cleaned up things, RENAMED VARIABLES! now we have ANSW_R_* and ANSW_L_* namespaces for info about remote and local user --- README.md | 28 ++++++------- answerscripts.c | 49 ++++++++++++----------- purple/answerscripts.d/00-debug-notify.sh | 2 +- purple/answerscripts.d/00-debug.sh | 2 +- purple/answerscripts.d/00-forward.sh | 2 +- purple/answerscripts.d/00-notify.sh | 2 +- purple/answerscripts.d/00-repeat.sh | 2 +- purple/answerscripts.d/10-menu.pl | 8 ++-- purple/answerscripts.sh | 5 --- 9 files changed, 47 insertions(+), 53 deletions(-) diff --git a/README.md b/README.md index 5375403..5792195 100644 --- 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 diff --git a/answerscripts.c b/answerscripts.c index 59ac0d3..b13113f 100755 --- a/answerscripts.c +++ b/answerscripts.c @@ -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 ", @@ -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) diff --git a/purple/answerscripts.d/00-debug-notify.sh b/purple/answerscripts.d/00-debug-notify.sh index 18bc0c4..c5fb354 100755 --- a/purple/answerscripts.d/00-debug-notify.sh +++ b/purple/answerscripts.d/00-debug-notify.sh @@ -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 diff --git a/purple/answerscripts.d/00-debug.sh b/purple/answerscripts.d/00-debug.sh index de7c549..3ccca3a 100755 --- a/purple/answerscripts.d/00-debug.sh +++ b/purple/answerscripts.d/00-debug.sh @@ -2,6 +2,6 @@ #Debug ( echo "DATE: $(date)"; -env | grep '^ANSW_'; +env | grep '^ANSW_' | sort; echo ============================================= ) >&2; diff --git a/purple/answerscripts.d/00-forward.sh b/purple/answerscripts.d/00-forward.sh index 4ecad9f..a61ce00 100755 --- a/purple/answerscripts.d/00-forward.sh +++ b/purple/answerscripts.d/00-forward.sh @@ -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 '&' ' ')" diff --git a/purple/answerscripts.d/00-notify.sh b/purple/answerscripts.d/00-notify.sh index 3008282..021ef5a 100755 --- a/purple/answerscripts.d/00-notify.sh +++ b/purple/answerscripts.d/00-notify.sh @@ -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" diff --git a/purple/answerscripts.d/00-repeat.sh b/purple/answerscripts.d/00-repeat.sh index af2520f..7dab6e0 100755 --- a/purple/answerscripts.d/00-repeat.sh +++ b/purple/answerscripts.d/00-repeat.sh @@ -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"; diff --git a/purple/answerscripts.d/10-menu.pl b/purple/answerscripts.d/10-menu.pl index f9bf7f7..e64ad6a 100755 --- a/purple/answerscripts.d/10-menu.pl +++ b/purple/answerscripts.d/10-menu.pl @@ -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}; } diff --git a/purple/answerscripts.sh b/purple/answerscripts.sh index 44ce2be..3b72f96 100755 --- a/purple/answerscripts.sh +++ b/purple/answerscripts.sh @@ -17,11 +17,6 @@ # - 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 -- 2.30.2