mirror of
https://github.com/jarulsamy/Plex-Bot.git
synced 2024-08-19 15:01:55 +02:00
🐛 Polished queue issues
Queue now actually works, async callback is properly awaited.
This commit is contained in:
parent
7085349b19
commit
4c75d4c27f
@ -1,8 +1,9 @@
|
|||||||
import yaml
|
|
||||||
from pathlib import Path
|
|
||||||
from typing import Dict
|
|
||||||
import logging
|
import logging
|
||||||
import sys
|
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"
|
FORMAT = "%(asctime)s %(levelname)s: [%(filename)s:%(lineno)s - %(funcName)20s() ] %(message)s"
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import logging
|
||||||
from queue import Queue
|
from queue import Queue
|
||||||
|
|
||||||
import discord
|
import discord
|
||||||
@ -5,10 +6,9 @@ from discord import FFmpegPCMAudio
|
|||||||
from discord.ext import commands
|
from discord.ext import commands
|
||||||
from discord.ext.commands import command
|
from discord.ext.commands import command
|
||||||
from fuzzywuzzy import fuzz
|
from fuzzywuzzy import fuzz
|
||||||
|
from plexapi.exceptions import Unauthorized
|
||||||
from plexapi.server import PlexServer
|
from plexapi.server import PlexServer
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
logger = logging.getLogger("PlexBot")
|
logger = logging.getLogger("PlexBot")
|
||||||
|
|
||||||
|
|
||||||
@ -30,7 +30,12 @@ class Plex(commands.Cog):
|
|||||||
self.plex_token = plex_token
|
self.plex_token = plex_token
|
||||||
self.library_name = lib_name
|
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.music = self.pms.library.section(self.library_name)
|
||||||
|
|
||||||
self.vc = None
|
self.vc = None
|
||||||
@ -39,8 +44,6 @@ class Plex(commands.Cog):
|
|||||||
|
|
||||||
logger.info("Started bot successfully")
|
logger.info("Started bot successfully")
|
||||||
|
|
||||||
# self.callback_ctx = None
|
|
||||||
|
|
||||||
def _search_tracks(self, title):
|
def _search_tracks(self, title):
|
||||||
tracks = self.music.searchTracks()
|
tracks = self.music.searchTracks()
|
||||||
score = [None, -1]
|
score = [None, -1]
|
||||||
@ -60,17 +63,24 @@ class Plex(commands.Cog):
|
|||||||
await ctx.send(f"Hello {member}")
|
await ctx.send(f"Hello {member}")
|
||||||
|
|
||||||
async def _after_callback(self, error=None):
|
async def _after_callback(self, error=None):
|
||||||
|
logger.debug("After callbacked")
|
||||||
if self.play_queue.empty():
|
if self.play_queue.empty():
|
||||||
self.current_track = None
|
self.current_track = None
|
||||||
|
logger.debug("No tracks left in queue, returning")
|
||||||
else:
|
else:
|
||||||
track = self.play_queue.get()
|
track = self.play_queue.get()
|
||||||
audio_stream = FFmpegPCMAudio(track.getStreamURL())
|
audio_stream = FFmpegPCMAudio(track.getStreamURL())
|
||||||
self.vc.play(audio_stream)
|
|
||||||
self.current_track = track
|
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}")
|
await self.callback_ctx.send(f"Playing {track.title}")
|
||||||
|
|
||||||
@command()
|
@command()
|
||||||
async def play(self, ctx, *args):
|
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)
|
title = " ".join(args)
|
||||||
track = self._search_tracks(title)
|
track = self._search_tracks(title)
|
||||||
if track:
|
if track:
|
||||||
@ -80,7 +90,7 @@ class Plex(commands.Cog):
|
|||||||
return
|
return
|
||||||
if not self.vc:
|
if not self.vc:
|
||||||
self.vc = await ctx.author.voice.channel.connect()
|
self.vc = await ctx.author.voice.channel.connect()
|
||||||
logger.debug("Connected to vc")
|
logger.debug("Connected to vc.")
|
||||||
|
|
||||||
if self.vc.is_playing():
|
if self.vc.is_playing():
|
||||||
self.play_queue.put(track)
|
self.play_queue.put(track)
|
||||||
@ -95,7 +105,7 @@ class Plex(commands.Cog):
|
|||||||
await ctx.send(f"Playing {track.title}")
|
await ctx.send(f"Playing {track.title}")
|
||||||
else:
|
else:
|
||||||
logger.debug(f"{title} was not found.")
|
logger.debug(f"{title} was not found.")
|
||||||
await ctx.send("Song not found!")
|
await ctx.send(f"{title} was not found.")
|
||||||
|
|
||||||
@command()
|
@command()
|
||||||
async def stop(self, ctx):
|
async def stop(self, ctx):
|
||||||
@ -119,10 +129,10 @@ class Plex(commands.Cog):
|
|||||||
|
|
||||||
@command()
|
@command()
|
||||||
async def skip(self, ctx):
|
async def skip(self, ctx):
|
||||||
|
logger.debug("Skip")
|
||||||
if self.vc:
|
if self.vc:
|
||||||
await self.vc.stop()
|
self.vc.stop()
|
||||||
if not self.play_queue.empty():
|
await self._after_callback()
|
||||||
await self._after_callback()
|
|
||||||
|
|
||||||
@command()
|
@command()
|
||||||
async def np(self, ctx):
|
async def np(self, ctx):
|
||||||
|
Loading…
Reference in New Issue
Block a user