Skip to content

Commit

Permalink
feat: disconnect upon multiple consecutive errors (#136)
Browse files Browse the repository at this point in the history
  • Loading branch information
NiceAesth authored Feb 19, 2024
1 parent 4c75e9b commit 8a91320
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 3 deletions.
12 changes: 12 additions & 0 deletions src/classes/pomice.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
from models.guild_settings import GuildSettings
from ui.embeds.music import MusicTrackEmbed

FLAKY_EXCEPTION_CUTOFF = 2


class Player(pomice.Player):
"""Pomice guild player."""
Expand All @@ -26,6 +28,7 @@ class Player(pomice.Player):
"guild_settings",
"dj",
"auto_play",
"consecutive_exception_count",
"loop_mode",
"pause_votes",
"resume_votes",
Expand All @@ -43,6 +46,7 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
self.guild_settings: GuildSettings | None = None
self.dj: Member | None = None
self.auto_play: bool = False
self.consecutive_exception_count: int = 0

self.pause_votes = set()
self.resume_votes = set()
Expand All @@ -67,6 +71,14 @@ async def do_next(self) -> None:
self.shuffle_votes.clear()
self.stop_votes.clear()

if self.consecutive_exception_count >= FLAKY_EXCEPTION_CUTOFF:
if self.context:
await self.context.send(
"⚠️ | Sorry! I've been having trouble playing music. I will disconnect for now.",
)
await self.teardown()
return

if self.controller:
with suppress(HTTPException):
await self.controller.delete()
Expand Down
22 changes: 19 additions & 3 deletions src/cogs/music.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,25 +71,41 @@ def required(self, ctx: commands.Context) -> int:
return required

@MetadataGroupCog.listener()
async def on_pomice_track_end(self, player: Player, track: pomice.Track, _) -> None:
async def on_pomice_track_start(
self,
player: Player,
track: pomice.Track | None,
_,
) -> None:
player.consecutive_exception_count = 0

@MetadataGroupCog.listener()
async def on_pomice_track_end(
self,
player: Player,
track: pomice.Track | None,
_,
) -> None:
await player.do_next()

@MetadataGroupCog.listener()
async def on_pomice_track_stuck(
self,
player: Player,
track: pomice.Track,
track: pomice.Track | None,
_,
) -> None:
player.consecutive_exception_count += 1
await player.do_next()

@MetadataGroupCog.listener()
async def on_pomice_track_exception(
self,
player: Player,
track: pomice.Track,
track: pomice.Track | None,
_,
) -> None:
player.consecutive_exception_count += 1
await player.do_next()

async def ensure_voice(self, ctx: commands.Context) -> None:
Expand Down

0 comments on commit 8a91320

Please sign in to comment.