Skip to content

Commit

Permalink
rework repeat command
Browse files Browse the repository at this point in the history
Add some new options and handle invalid options better. I found myself doing repeat on a lot and cycling through everything so I reworked it.
Remove unnecessary json strings.
  • Loading branch information
BabyBoySnow committed Dec 16, 2023
1 parent cd9c168 commit 8ce4ce2
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 22 deletions.
5 changes: 1 addition & 4 deletions config/i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -133,10 +133,7 @@
"cmd-repeat-playlist-not-looping": "Playlist is no longer repeating.",
"cmd-repeat-song-looping": "Song is now repeating.",
"cmd-repeat-song-not-looping": "Song is no longer repeating.",
"cmd-repeat-noOption-playlist-looping": "The playlist is now repeating.",
"cmd-repeat-noOption-playlist-not-looping": "The playlist is no longer repeating.",
"cmd-repeat-noOption-song-looping": "Song is now looping.",
"cmd-repeat-noOption-song-not-looping": "Song is no longer looping.",
"cmd-repeat-invalid": "Invalid option, please run {}help repeat to a list of available options.",
"cmd-move-no-voice": "The bot is not in a voice channel. Use %ssummon to summon it to your voice channel.",
"cmd-move-no-songs": "No songs are currently playing. Play something with {}play.",
"cmd-move-indexes-not-intergers": "Song indexes must be integers.",
Expand Down
58 changes: 40 additions & 18 deletions musicbot/bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -2030,7 +2030,7 @@ async def cmd_playnext(
async def cmd_repeat(self, channel, option=None):
"""
Usage:
{command_prefix}repeat [all | song]
{command_prefix}repeat [all | playlist | song | on | off]
Toggles playlist or song looping.
If no option is provided the current song will be repeated.
Expand All @@ -2039,6 +2039,7 @@ async def cmd_repeat(self, channel, option=None):

player = self.get_player_in(channel.guild)
option = option.lower() if option else ""
prefix = self._get_guild_cmd_prefix(channel.guild)

if not player:
raise exceptions.CommandError(
Expand All @@ -2060,7 +2061,16 @@ async def cmd_repeat(self, channel, option=None):
delete_after=30,
)

if option == "all":
if option not in ["all", "playlist", "on", "off", "song", ""]:
raise exceptions.CommandError(
self.str.get(
"cmd-repeat-invalid",
"Invalid option, please run {}help repeat to a list of available options.",
).format(prefix),
expire_in=30,
)

if option in ["all", "playlist"]:
player.loopqueue = not player.loopqueue
if player.loopqueue:
return Response(
Expand All @@ -2086,41 +2096,53 @@ async def cmd_repeat(self, channel, option=None):
self.str.get("cmd-repeat-song-looping", "Song is now repeating."),
delete_after=30,
)

else:
return Response(
self.str.get(
"cmd-repeat-song-not-looping", "Song is no longer repeating."
)
)

elif option == "on":
player.repeatsong = True
return Response(self.str.get("cmd-repeat-song-looping"), delete_after=30)
if player.repeatsong:
return Response(
self.str.get(
"cmd-repeat-already-looping", "Song is already looping!"
),
delete_after=30,
)

elif option == "off":
player.repeatsong = False
player.loopqueue = False
if player.playlist.entries.__len__() > 0:
return Response(
self.str.get("cmd-repeat-playlist-not-looping"), delete_after=30
)
else:
return Response(
self.str.get("cmd-repeat-song-not-looping"), delete_after=30
)

else:
if player.repeatsong:
player.loopqueue = True
player.repeatsong = False
return Response(
self.str.get(
"cmd-repeat-noOption-playlist-looping",
"Playlist is now repeating.",
)
self.str.get("cmd-repeat-playlist-looping"), delete_after=30
)

elif player.loopqueue:
if player.playlist.entries.__len__() > 0:
message = self.str.get(
"cmd-repeat-noOption-playlist-not-looping",
"Playlist is no longer repeating.",
)
message = self.str.get("cmd-repeat-playlist-not-looping")
else:
message = self.str.get(
"cmd-repeat-noOption-song-not-looping",
"Song is no longer repeating.",
)
message = self.str.get("cmd-repeat-song-not-looping")
player.loopqueue = False
else:
player.repeatsong = True
message = self.str.get(
"cmd-repeat-noOption-song-looping", "Song is now repeating."
)
message = self.str.get("cmd-repeat-song-looping")

return Response(message, delete_after=30)

Expand Down

0 comments on commit 8ce4ce2

Please sign in to comment.