From 4c75d4c27f7c5a2727e7eab76d8920aacaa23e83 Mon Sep 17 00:00:00 2001 From: Joshua Arulsamy Date: Tue, 4 Aug 2020 03:59:48 -0600 Subject: [PATCH] :bug: Polished queue issues Queue now actually works, async callback is properly awaited. --- PlexBot/__init__.py | 7 ++++--- PlexBot/bot.py | 32 +++++++++++++++++++++----------- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/PlexBot/__init__.py b/PlexBot/__init__.py index e7b1f22..e3b062f 100644 --- a/PlexBot/__init__.py +++ b/PlexBot/__init__.py @@ -1,8 +1,9 @@ -import yaml -from pathlib import Path -from typing import Dict import logging import sys +from pathlib import Path +from typing import Dict + +import yaml FORMAT = "%(asctime)s %(levelname)s: [%(filename)s:%(lineno)s - %(funcName)20s() ] %(message)s" diff --git a/PlexBot/bot.py b/PlexBot/bot.py index 8e1c06f..f2c05c8 100644 --- a/PlexBot/bot.py +++ b/PlexBot/bot.py @@ -1,3 +1,4 @@ +import logging from queue import Queue import discord @@ -5,10 +6,9 @@ from discord import FFmpegPCMAudio from discord.ext import commands from discord.ext.commands import command from fuzzywuzzy import fuzz +from plexapi.exceptions import Unauthorized from plexapi.server import PlexServer -import logging - logger = logging.getLogger("PlexBot") @@ -30,7 +30,12 @@ class Plex(commands.Cog): self.plex_token = plex_token self.library_name = lib_name - self.pms = PlexServer(self.base_url, self.plex_token) + try: + self.pms = PlexServer(self.base_url, self.plex_token) + except Unauthorized: + logger.fatal("Invalid Plex token, stopping...") + raise Unauthorized("Invalid Plex token") + self.music = self.pms.library.section(self.library_name) self.vc = None @@ -39,8 +44,6 @@ class Plex(commands.Cog): logger.info("Started bot successfully") - # self.callback_ctx = None - def _search_tracks(self, title): tracks = self.music.searchTracks() score = [None, -1] @@ -60,17 +63,24 @@ class Plex(commands.Cog): await ctx.send(f"Hello {member}") async def _after_callback(self, error=None): + logger.debug("After callbacked") if self.play_queue.empty(): self.current_track = None + logger.debug("No tracks left in queue, returning") else: track = self.play_queue.get() audio_stream = FFmpegPCMAudio(track.getStreamURL()) - self.vc.play(audio_stream) self.current_track = track + logger.debug(f"Started playing next song in queue: {track.title}") + self.vc.play(audio_stream) await self.callback_ctx.send(f"Playing {track.title}") @command() async def play(self, ctx, *args): + if not len(args): + await ctx.send(f"Usage: {BOT_PREFIX}play TITLE_OF_SONG") + return + title = " ".join(args) track = self._search_tracks(title) if track: @@ -80,7 +90,7 @@ class Plex(commands.Cog): return if not self.vc: self.vc = await ctx.author.voice.channel.connect() - logger.debug("Connected to vc") + logger.debug("Connected to vc.") if self.vc.is_playing(): self.play_queue.put(track) @@ -95,7 +105,7 @@ class Plex(commands.Cog): await ctx.send(f"Playing {track.title}") else: logger.debug(f"{title} was not found.") - await ctx.send("Song not found!") + await ctx.send(f"{title} was not found.") @command() async def stop(self, ctx): @@ -119,10 +129,10 @@ class Plex(commands.Cog): @command() async def skip(self, ctx): + logger.debug("Skip") if self.vc: - await self.vc.stop() - if not self.play_queue.empty(): - await self._after_callback() + self.vc.stop() + await self._after_callback() @command() async def np(self, ctx):