diff --git a/README.md b/README.md index fe44a64..00ec35f 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,7 @@ Here's how slack concepts are mapped to purple: - `/delete`: remove your last message - `/thread|th [thread-timestamp] [message]`: post `message` in a thread, where `thread-timestamp` matches the configured display format (either `thread_timestamp` or `thread_datestamp`) - `/getthread|gth [thread-timestamp]`: fetch messages in a thread, where `thread-timestamp` matches the configured display format (either `thread_timestamp` or `thread_datestamp`) +- `/call`: start a new call ## Known issues - Handling of messages while not connected or not open is not great. diff --git a/slack-cmd.c b/slack-cmd.c index 49188fb..6adbae8 100644 --- a/slack-cmd.c +++ b/slack-cmd.c @@ -128,6 +128,23 @@ static PurpleCmdRet cmd_delete(PurpleConversation *conv, const gchar *cmd, gchar return PURPLE_CMD_RET_OK; } +static PurpleCmdRet cmd_startcall(PurpleConversation *conv, const gchar *cmd, gchar **args, gchar **error, void *data) { + SlackAccount *sa = get_slack_account(conv->account); + if (!sa) + return PURPLE_CMD_RET_FAILED; + + SlackObject *obj = slack_conversation_get_conversation(sa, conv); + if (!obj) { + return PURPLE_CMD_RET_FAILED; + } + + gchar *url = g_strconcat("https://app.slack.com/free-willy/", sa->team.id, "/", slack_conversation_id(obj), NULL); + slack_write_message(sa, obj, url, PURPLE_MESSAGE_SEND); + g_free(url); + + return PURPLE_CMD_RET_OK; +} + static PurpleCmdRet cmd_thread(PurpleConversation *conv, const gchar *cmd, gchar **args, gchar **error, void *data) { SlackAccount *sa = get_slack_account(conv->account); if (!sa) @@ -192,6 +209,10 @@ void slack_cmd_register() { SLACK_PLUGIN_ID, cmd_delete, "delete: remove your last message", NULL); commands = g_slist_prepend(commands, GUINT_TO_POINTER(id)); + id = purple_cmd_register("call", "", PURPLE_CMD_P_PRPL, PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, + SLACK_PLUGIN_ID, cmd_startcall, "call", NULL); + commands = g_slist_prepend(commands, GUINT_TO_POINTER(id)); + static const char *thread_cmds[] = {"thread", "th", NULL}; for (cmdp = thread_cmds; *cmdp; cmdp++) { id = purple_cmd_register(*cmdp, "s", PURPLE_CMD_P_PRPL, PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY,