Add list command and display blocked countries
This commit is contained in:
parent
8be0734375
commit
50c789c377
1 changed files with 32 additions and 10 deletions
|
|
@ -17,12 +17,13 @@ class Video:
|
||||||
DURATION_RE = r"P(\d+Y)?(\d+"
|
DURATION_RE = r"P(\d+Y)?(\d+"
|
||||||
DELAY = 2
|
DELAY = 2
|
||||||
|
|
||||||
def __init__(self, vid, title, duration, blocked):
|
def __init__(self, vid, title, duration, blocked, allowed):
|
||||||
self.id = vid
|
self.id = vid
|
||||||
self.title = title
|
self.title = title
|
||||||
self.raw_duration = isodate.parse_duration(duration)
|
self.raw_duration = isodate.parse_duration(duration)
|
||||||
self.duration = self.raw_duration + datetime.timedelta(seconds=self.DELAY)
|
self.duration = self.raw_duration + datetime.timedelta(seconds=self.DELAY)
|
||||||
self.blocked = blocked
|
self.blocked = list(sorted(blocked)) if blocked is not None else None
|
||||||
|
self.allowed = list(sorted(allowed)) if allowed is not None else None
|
||||||
|
|
||||||
class YouTube:
|
class YouTube:
|
||||||
def __init__(self, api_key):
|
def __init__(self, api_key):
|
||||||
|
|
@ -38,9 +39,10 @@ class YouTube:
|
||||||
vid = info["id"]
|
vid = info["id"]
|
||||||
title = info["snippet"]["title"]
|
title = info["snippet"]["title"]
|
||||||
duration = info["contentDetails"]["duration"]
|
duration = info["contentDetails"]["duration"]
|
||||||
blocked = None
|
blocked = info["contentDetails"].get("regionRestriction", {}).get("blocked", None)
|
||||||
|
allowed = info["contentDetails"].get("regionRestriction", {}).get("allowed", None)
|
||||||
|
|
||||||
video = Video(vid, title, duration, blocked)
|
video = Video(vid, title, duration, blocked, allowed)
|
||||||
videos[vid] = video
|
videos[vid] = video
|
||||||
|
|
||||||
return videos
|
return videos
|
||||||
|
|
@ -70,7 +72,14 @@ class Playlist:
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def format_list_entry(video, position, played_in):
|
def format_list_entry(video, position, played_in):
|
||||||
played_in = Playlist.format_duration(played_in)
|
played_in = Playlist.format_duration(played_in)
|
||||||
return f"[{position:2}] {video.title!r} will be played in [{played_in}]"
|
lines = [f"[{position:2}] {video.title!r} will be played in [{played_in}]"]
|
||||||
|
|
||||||
|
if video.blocked is not None:
|
||||||
|
lines.append(f"Blocked in {', '.join(video.blocked)}.")
|
||||||
|
if video.allowed is not None:
|
||||||
|
lines.append(f"Only viewable in {', '.join(video.allowed)}.")
|
||||||
|
|
||||||
|
return lines
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def format_play(video, player):
|
def format_play(video, player):
|
||||||
|
|
@ -155,9 +164,9 @@ class ArgonDJBot(yaboli.Bot):
|
||||||
"!skip, !s - skip the currently playing video\n"
|
"!skip, !s - skip the currently playing video\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Advanced queue manipulation:\n"
|
"Advanced queue manipulation:\n"
|
||||||
"NYI !list, !l - display a list of currently queued videos\n"
|
"!list, !l - display a list of currently queued videos\n"
|
||||||
"NYI !delete, !del, !d <index> - deletes video at that index in the queue\n"
|
"NYI !delete, !del, !d <index> - deletes video at that index in the queue\n"
|
||||||
"NYI !insert, !ins, !i <url or id> [before|after] <index> - insert a video into the queue\n"
|
"NYI !insert, !ins, !i <url or id> [before|after] <index> - insert a single video into the queue\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Fun stuff:\n"
|
"Fun stuff:\n"
|
||||||
"!dramaticskip, !dskip, !ds - dramatic version of !skip\n"
|
"!dramaticskip, !dskip, !ds - dramatic version of !skip\n"
|
||||||
|
|
@ -258,6 +267,8 @@ class ArgonDJBot(yaboli.Bot):
|
||||||
await self.command_vskip(room, message, command)
|
await self.command_vskip(room, message, command)
|
||||||
await self.command_dskip(room, message, command)
|
await self.command_dskip(room, message, command)
|
||||||
|
|
||||||
|
await self.command_list(room, message, command)
|
||||||
|
|
||||||
await self.command_queue(room, message, command, argstr)
|
await self.command_queue(room, message, command, argstr)
|
||||||
|
|
||||||
@yaboli.command("queue", "q")
|
@yaboli.command("queue", "q")
|
||||||
|
|
@ -286,7 +297,7 @@ class ArgonDJBot(yaboli.Bot):
|
||||||
until = self.playlist.playtime_until(position)
|
until = self.playlist.playtime_until(position)
|
||||||
|
|
||||||
info = Playlist.format_list_entry(video, position, until)
|
info = Playlist.format_list_entry(video, position, until)
|
||||||
lines.append(info)
|
lines.extend(info)
|
||||||
|
|
||||||
text = "\n".join(lines)
|
text = "\n".join(lines)
|
||||||
await room.send(text, message.mid)
|
await room.send(text, message.mid)
|
||||||
|
|
@ -325,8 +336,19 @@ class ArgonDJBot(yaboli.Bot):
|
||||||
self.playlist.skip(room)
|
self.playlist.skip(room)
|
||||||
|
|
||||||
@yaboli.command("list", "l")
|
@yaboli.command("list", "l")
|
||||||
async def command_list(self, room, message, argstr):
|
async def command_list(self, room, message):
|
||||||
pass
|
lines = []
|
||||||
|
for position, (video, _) in self.playlist.items():
|
||||||
|
until = self.playlist.playtime_until(position)
|
||||||
|
info = Playlist.format_list_entry(video, position, until)
|
||||||
|
lines.extend(info)
|
||||||
|
|
||||||
|
if lines:
|
||||||
|
text = "\n".join(lines)
|
||||||
|
else:
|
||||||
|
text = "Queue is empty"
|
||||||
|
|
||||||
|
await room.send(text, message.mid)
|
||||||
|
|
||||||
def main(configfile):
|
def main(configfile):
|
||||||
#asyncio.get_event_loop().set_debug(True)
|
#asyncio.get_event_loop().set_debug(True)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue