]> git.mxchange.org Git - friendica-addons.git/commitdiff
[twitter] Add unfollow hook function
authorHypolite Petovan <hypolite@mrpetovan.com>
Thu, 23 Sep 2021 03:01:09 +0000 (23:01 -0400)
committerHypolite Petovan <hypolite@mrpetovan.com>
Sat, 25 Sep 2021 20:19:20 +0000 (16:19 -0400)
twitter/twitter.php

index 45f8fe13119e391cd513b6caff3b63cc4a7a6fd6..e0fa6f3aa45e214ddb1d6762bd68f50ea54492cc 100644 (file)
@@ -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()) {