""" Unshare or Remove users who have been inactive for X days. Prints out last seen for all users. Just run. Comment out `remove_friend(username)` and `unshare(username)` to test. """ import requests import datetime import time from plexapi.server import PlexServer ## EDIT THESE SETTINGS ## TAUTULLI_APIKEY = 'xxxx' # Your Tautulli API key TAUTULLI_URL = 'http://localhost:8182/' # Your Tautulli URL PLEX_TOKEN = 'xxxx' PLEX_URL = 'http://localhost:32400' REMOVE_LIMIT = 30 # days UNSHARE_LIMIT = 15 # days USER_IGNORE = ('user1') ##/EDIT THESE SETTINGS ## sess = requests.Session() sess.verify = False plex = PlexServer(PLEX_URL, PLEX_TOKEN, session=sess) sections_lst = [x.title for x in plex.library.sections()] today = time.mktime(datetime.datetime.today().timetuple()) def get_users_table(): # Get the Tautulli history. payload = {'apikey': TAUTULLI_APIKEY, 'cmd': 'get_users_table', 'order_column': 'last_seen', 'order_dir': 'asc'} try: r = requests.get(TAUTULLI_URL.rstrip('/') + '/api/v2', params=payload) response = r.json() res_data = response['response']['data']['data'] return [data for data in res_data if data['last_seen']] except Exception as e: print("Tautulli API 'get_history' request failed: {0}.".format(e)) def unshare(user): print('{user} has reached inactivity limit. Unsharing.'.format(user=user)) plex.myPlexAccount().updateFriend(user=user, server=plex, removeSections=True, sections=sections_lst) print('Unshared all libraries from {user}.'.format(user=user)) def remove_friend(user): print('{user} has reached inactivity limit. Removing.'.format(user=user)) plex.myPlexAccount().removeFriend(user) print('Removed {user}.'.format(user=user)) def main(): user_tables = get_users_table() for user in user_tables: last_seen = (today - user['last_seen']) / 24 / 60 / 60 if int(last_seen) != 0: last_seen = int(last_seen) username = user['friendly_name'] if username not in USER_IGNORE: if last_seen > REMOVE_LIMIT: print('{} was last seen {} days ago. Removing.'.format(username, last_seen)) remove_friend(username) elif last_seen > UNSHARE_LIMIT: print('{} was last seen {} days ago. Unshsring.'.format(username, last_seen)) unshare(username) elif last_seen > 1: print('{} was last seen {} days ago.'.format(username, last_seen)) elif int(last_seen) == 1: print('{} was last seen yesterday.'.format(username)) else: hours_ago = last_seen * 24 if int(hours_ago) != 0: hours_ago = int(hours_ago) print('{} was last seen {} hours ago.'.format(username, hours_ago)) else: minutes_ago = int(hours_ago * 60) print('{} was last seen {} minutes ago.'.format(username, minutes_ago)) if __name__ == '__main__': main()