From 5769d99478ca140e933263990c00cbf77d7f3f38 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 22 Sep 2021 23:01:09 -0400 Subject: [PATCH] [twitter] Add unfollow hook function --- twitter/twitter.php | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/twitter/twitter.php b/twitter/twitter.php index 45f8fe13..e0fa6f3a 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -105,6 +105,7 @@ function twitter_install() Hook::register('jot_networks' , __FILE__, 'twitter_jot_nets'); Hook::register('cron' , __FILE__, 'twitter_cron'); Hook::register('follow' , __FILE__, 'twitter_follow'); + Hook::register('unfollow' , __FILE__, 'twitter_unfollow'); Hook::register('expire' , __FILE__, 'twitter_expire'); Hook::register('prepare_body' , __FILE__, 'twitter_prepare_body'); Hook::register('check_item_notification', __FILE__, 'twitter_check_item_notification'); @@ -173,6 +174,39 @@ function twitter_follow(App $a, array &$contact) } } +function twitter_unfollow(App $a, array &$hook_data) +{ + $contact = $hook_data['contact']; + Logger::info('Check if contact is twitter contact', ['url' => $contact["url"]]); + + if (!strstr($contact["url"], "://twitter.com") && !strstr($contact["url"], "@twitter.com")) { + return; + } + + // contact seems to be a twitter contact, so continue + $nickname = preg_replace("=https?://twitter.com/(.*)=ism", "$1", $contact["url"]); + $nickname = str_replace("@twitter.com", "", $nickname); + + $uid = $a->getLoggedInUserId(); + + $ckey = DI::config()->get('twitter', 'consumerkey'); + $csecret = DI::config()->get('twitter', 'consumersecret'); + $otoken = DI::pConfig()->get($uid, 'twitter', 'oauthtoken'); + $osecret = DI::pConfig()->get($uid, 'twitter', 'oauthsecret'); + + // If the addon is not configured (general or for this user) quit here + if (empty($ckey) || empty($csecret) || empty($otoken) || empty($osecret)) { + return; + } + + try { + $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); + $connection->post('friendships/destroy', ['screen_name' => $nickname]); + } catch(Exception $e) { + Logger::notice('[twitter] API call "friendships/destroy" failed', ['uid' => $uid, 'url' => $contact['url'], 'exception' => $e]); + } +} + function twitter_jot_nets(App $a, array &$jotnets_fields) { if (!local_user()) { -- 2.39.5