diff options
Diffstat (limited to 'protocols/twitter/twitter.c')
-rw-r--r-- | protocols/twitter/twitter.c | 48 |
1 files changed, 33 insertions, 15 deletions
diff --git a/protocols/twitter/twitter.c b/protocols/twitter/twitter.c index c0811a71..93ef4ae2 100644 --- a/protocols/twitter/twitter.c +++ b/protocols/twitter/twitter.c @@ -489,6 +489,29 @@ static void twitter_buddy_data_free(struct bee_user *bu) g_free(bu->data); } +/** Convert the given bitlbee tweet ID, bitlbee username, or twitter tweet ID + * into a twitter tweet ID. + * + * Returns 0 if the user provides garbage. + */ +static guint64 twitter_message_id_from_command_arg(struct im_connection *ic, struct twitter_data *td, char *arg) { + struct twitter_user_data *tud; + bee_user_t *bu; + guint64 id = 0; + if (g_str_has_prefix(arg, "#") && + sscanf(arg + 1, "%" G_GUINT64_FORMAT, &id) == 1) { + if (id < TWITTER_LOG_LENGTH && td->log) + id = td->log[id].id; + } else if ((bu = bee_user_by_handle(ic->bee, ic, arg)) && + (tud = bu->data) && tud->last_id) + id = tud->last_id; + else if (sscanf(arg, "%" G_GUINT64_FORMAT, &id) == 1){ + if (id < TWITTER_LOG_LENGTH && td->log) + id = td->log[id].id; + } + return id; +} + static void twitter_handle_command(struct im_connection *ic, char *message) { struct twitter_data *td = ic->proto_data; @@ -518,6 +541,15 @@ static void twitter_handle_command(struct im_connection *ic, char *message) g_free(cmds); return; + } else if (g_strcasecmp(cmd[0], "favourite") == 0 && cmd[1]) { + guint64 id; + if ((id = twitter_message_id_from_command_arg(ic, td, cmd[1]))) { + twitter_favourite_tweet(ic, id); + } else { + twitter_msg(ic, "Please provide a message ID or username."); + } + g_free(cmds); + return; } else if (g_strcasecmp(cmd[0], "follow") == 0 && cmd[1]) { twitter_add_buddy(ic, cmd[1], NULL); g_free(cmds); @@ -545,21 +577,7 @@ static void twitter_handle_command(struct im_connection *ic, char *message) g_free(cmds); return; } else if (g_strcasecmp(cmd[0], "rt") == 0 && cmd[1]) { - struct twitter_user_data *tud; - bee_user_t *bu; - guint64 id; - - if (g_str_has_prefix(cmd[1], "#") && - sscanf(cmd[1] + 1, "%" G_GUINT64_FORMAT, &id) == 1) { - if (id < TWITTER_LOG_LENGTH && td->log) - id = td->log[id].id; - } else if ((bu = bee_user_by_handle(ic->bee, ic, cmd[1])) && - (tud = bu->data) && tud->last_id) - id = tud->last_id; - else if (sscanf(cmd[1], "%" G_GUINT64_FORMAT, &id) == 1){ - if (id < TWITTER_LOG_LENGTH && td->log) - id = td->log[id].id; - } + guint64 id = twitter_message_id_from_command_arg(ic, td, cmd[1]); td->last_status_id = 0; if (id) |