* 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...
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
//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);
}
//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));
"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>",
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)