From c3f6f10d1883ba52d5b13eea2d777ff42a5a91df Mon Sep 17 00:00:00 2001 From: Dysta Date: Mon, 22 Apr 2024 21:05:36 +0200 Subject: [PATCH] fix: bad read during stream --- jukebot/cogs/queue.py | 1 - jukebot/cogs/radio.py | 1 - jukebot/cogs/system.py | 4 +-- jukebot/cogs/utility.py | 3 +-- jukebot/components/player.py | 28 +++++++++++--------- jukebot/components/requests/music_request.py | 1 - jukebot/services/queue/add_service.py | 4 +-- jukebot/utils/embed.py | 2 +- tests/test_radios.py | 2 -- 9 files changed, 22 insertions(+), 24 deletions(-) diff --git a/jukebot/cogs/queue.py b/jukebot/cogs/queue.py index 358f49a..8333e5d 100644 --- a/jukebot/cogs/queue.py +++ b/jukebot/cogs/queue.py @@ -31,7 +31,6 @@ async def queue(self, inter: CommandInteraction): inter : CommandInteraction The interaction """ - pass @queue.sub_command() @commands.cooldown(1, 3.0, BucketType.user) diff --git a/jukebot/cogs/radio.py b/jukebot/cogs/radio.py index c956756..c9baa35 100644 --- a/jukebot/cogs/radio.py +++ b/jukebot/cogs/radio.py @@ -3,7 +3,6 @@ import random from typing import TYPE_CHECKING -import yaml from disnake import CommandInteraction from disnake.ext import commands from disnake.ext.commands import BucketType diff --git a/jukebot/cogs/system.py b/jukebot/cogs/system.py index 074c27d..72153c0 100644 --- a/jukebot/cogs/system.py +++ b/jukebot/cogs/system.py @@ -3,9 +3,9 @@ import io import os from datetime import datetime -from typing import Optional, Set +from typing import Optional -from disnake import APISlashCommand, CommandInteraction, File +from disnake import CommandInteraction, File from disnake.ext import commands from loguru import logger diff --git a/jukebot/cogs/utility.py b/jukebot/cogs/utility.py index de32215..2b24b3b 100644 --- a/jukebot/cogs/utility.py +++ b/jukebot/cogs/utility.py @@ -1,9 +1,8 @@ from __future__ import annotations from datetime import datetime -from typing import Optional -from disnake import CommandInteraction, InviteTarget, Member +from disnake import CommandInteraction, InviteTarget from disnake.ext import commands from disnake.ext.commands import Bot, BucketType diff --git a/jukebot/components/player.py b/jukebot/components/player.py index 0fad49c..3ecd387 100644 --- a/jukebot/components/player.py +++ b/jukebot/components/player.py @@ -3,7 +3,7 @@ import asyncio import os from asyncio import Task -from enum import IntEnum +from enum import IntEnum, auto from typing import Optional from disnake import CommandInteraction, VoiceChannel, VoiceClient @@ -21,12 +21,12 @@ class Player: class State(IntEnum): - IDLE = 0 - PLAYING = 1 - PAUSED = 2 - STOPPED = 3 - SKIPPING = 4 - DISCONNECTING = 5 + IDLE = auto() + PLAYING = auto() + PAUSED = auto() + STOPPED = auto() + SKIPPING = auto() + DISCONNECTING = auto() @property def is_playing(self) -> bool: @@ -96,7 +96,6 @@ async def play(self, song: Song, replay: bool = False): song.requester = author stream = AudioStream(song.stream_url) - stream.read() if self._voice and self._voice.is_playing(): self._voice.stop() @@ -134,13 +133,17 @@ def resume(self): def _after(self, error): if error: logger.opt(lazy=True).error(error) + self.state = Player.State.IDLE return + if self.state.is_leaving: return + if self._loop.is_song_loop and not self.state.is_skipping: func = self.play(self.song, replay=True) coro.run_threadsafe(func, loop=self.bot.loop) return + if self._loop.is_queue_loop: with AddService(self.bot) as ad: func = ad(interaction=self.interaction, query=self.song.web_url, silent=True) @@ -153,8 +156,9 @@ def _after(self, error): with PlayService(self.bot) as ps: func = ps(interaction=self.interaction, query="") coro.run_threadsafe(func, self.bot.loop) - else: - self.state = Player.State.IDLE + return + + self.state = Player.State.IDLE def _idle_callback(self) -> None: if not self._idle_task.cancelled(): @@ -226,9 +230,9 @@ def state(self, new: State) -> None: self._set_idle_task() @property - def loop(self) -> "Player.Loop": + def loop(self) -> Player.Loop: return self._loop @loop.setter - def loop(self, lp: "Player.Loop") -> None: + def loop(self, lp: Player.Loop) -> None: self._loop = lp diff --git a/jukebot/components/requests/music_request.py b/jukebot/components/requests/music_request.py index 5d5ee32..5b72ba7 100644 --- a/jukebot/components/requests/music_request.py +++ b/jukebot/components/requests/music_request.py @@ -1,7 +1,6 @@ from __future__ import annotations import asyncio -import pprint from enum import Enum, auto import yt_dlp diff --git a/jukebot/services/queue/add_service.py b/jukebot/services/queue/add_service.py index 45135f7..7569bc7 100644 --- a/jukebot/services/queue/add_service.py +++ b/jukebot/services/queue/add_service.py @@ -8,10 +8,10 @@ from jukebot.abstract_components import AbstractService from jukebot.components.requests.music_request import MusicRequest from jukebot.exceptions import QueryFailed -from jukebot.utils import embed, regex +from jukebot.utils import embed if TYPE_CHECKING: - from jukebot.components import Player, Query, Result, ResultSet + from jukebot.components import Player, Result, ResultSet class AddService(AbstractService): diff --git a/jukebot/utils/embed.py b/jukebot/utils/embed.py index 8fb9321..7c9cedf 100644 --- a/jukebot/utils/embed.py +++ b/jukebot/utils/embed.py @@ -2,7 +2,7 @@ import itertools import random -from typing import TYPE_CHECKING, Union +from typing import TYPE_CHECKING import disnake from disnake import Member diff --git a/tests/test_radios.py b/tests/test_radios.py index a0d644c..1a57381 100644 --- a/tests/test_radios.py +++ b/tests/test_radios.py @@ -1,6 +1,4 @@ -import asyncio import unittest -from typing import Tuple from jukebot.components.requests import MusicRequest from jukebot.utils import converter