Last active
July 22, 2018 20:05
-
-
Save blacktwin/88fce565c8ecf56839641f22f4c5c422 to your computer and use it in GitHub Desktop.
If user has 2* or more concurrent streams kill all streams
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
If user has 2* or more concurrent streams kill all user's streams | |
*PlexPy > Settings > Notification> User Concurrent Stream Threshold | |
The number of concurrent streams by a single user for PlexPy to trigger a notification. Minimum 2. | |
PlexPy > Settings > Notification Agents > Scripts > Bell icon: | |
[X] Notify on user concurrent streams | |
PlexPy > Settings > Notification Agents > Scripts > Gear icon: | |
Playback User Concurrent Streams: kill_more_than.py | |
PlexPy > Settings > Notifications > Script > Script Arguments | |
{user} | |
""" | |
import requests | |
import platform | |
from uuid import getnode | |
import sys | |
import unicodedata | |
## EDIT THESE SETTINGS ## | |
PLEX_HOST = '' | |
PLEX_PORT = 32400 | |
PLEX_SSL = '' # s or '' | |
PLEX_TOKEN = 'xxxxxxx' | |
REASON = 'Because....too many streams' | |
# 2nd stream information is passed | |
USER = sys.argv[1] | |
ignore_lst = ('') | |
if USER in ignore_lst: | |
print(u"{} ignored.".format(USER)) | |
exit() | |
def fetch(path, t='GET'): | |
url = 'http%s://%s:%s/' % (PLEX_SSL, PLEX_HOST, PLEX_PORT) | |
headers = {'X-Plex-Token': PLEX_TOKEN, | |
'Accept': 'application/json', | |
'X-Plex-Provides': 'controller', | |
'X-Plex-Platform': platform.uname()[0], | |
'X-Plex-Platform-Version': platform.uname()[2], | |
'X-Plex-Product': 'Plexpy script', | |
'X-Plex-Version': '0.9.5', | |
'X-Plex-Device': platform.platform(), | |
'X-Plex-Client-Identifier': str(hex(getnode())) | |
} | |
try: | |
if t == 'GET': | |
r = requests.get(url + path, headers=headers, verify=False) | |
elif t == 'POST': | |
r = requests.post(url + path, headers=headers, verify=False) | |
elif t == 'DELETE': | |
r = requests.delete(url + path, headers=headers, verify=False) | |
if r and len(r.content): # incase it dont return anything | |
return r.json() | |
else: | |
return r.content | |
except Exception as e: | |
print e | |
def kill_stream(sessionId, message): | |
headers = {'X-Plex-Token': PLEX_TOKEN} | |
params = {'sessionId': sessionId, | |
'reason': message} | |
requests.get('http://{}:{}/status/sessions/terminate'.format(PLEX_HOST, PLEX_PORT), | |
headers=headers, params=params) | |
response = fetch('status/sessions') | |
sessions = [] | |
for s in response['MediaContainer']['Video']: | |
if s['User']['title'] == USER: | |
id = s['Session']['id'] | |
user = s['User']['title'] | |
title = (s['grandparentTitle'] + ' - ' if s['type'] == 'episode' else '') + s['title'] | |
title = unicodedata.normalize('NFKD', title).encode('ascii','ignore') | |
sessions.append((id, user, title)) | |
for session in sessions: | |
print(u"Killing {}'s second stream of {} for {}".format(session[1], session[2], REASON)) | |
kill_stream(session[0], REASON) |
I know this is not the current one, which I am using and is working great, but is there a way to kill a users 2nd stream even if it is on the same IP address? I ask because when I am watching something on my same network it doesn't kill the other stream cause it lists the same IP. Would be nice to just kill any stream past 1. Thanks!
Bump! would be great if you could make this work for all users!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@sbcrumb Please check the updated version of this script in my repo. If you have any problems please use the Issue section to report your problem. I don't get notifications from Gist comments.