Audio Fixes (#4492)

* handles #4491

* add typing indicators to audio playlists commands like discussed with aika.

* recheck perms upon change of token to avoid needing a reload.

* Ensure the player lock is always released... on rewrite to this as a callback to the task.

* ffs

* resolves#4495

* missed one

* aaaaaaaaa

* fix https://canary.discord.com/channels/133049272517001216/387398816317440000/766711707921678396

* some tweaks

* Clear errors to users around YouTube Quota
This commit is contained in:
Draper
2020-10-20 17:57:02 +01:00
committed by GitHub
parent 335e2a7c25
commit e31196d19f
39 changed files with 1255 additions and 1014 deletions

View File

@@ -1,6 +1,7 @@
import asyncio
import contextlib
import logging
from pathlib import Path
from typing import Union
@@ -9,6 +10,7 @@ import lavalink
from redbot.core import bank, commands
from redbot.core.data_manager import cog_data_path
from redbot.core.i18n import Translator
from redbot.core.utils.chat_formatting import box, humanize_number
from redbot.core.utils.menus import DEFAULT_CONTROLS, menu, start_adding_reactions
from redbot.core.utils.predicates import MessagePredicate, ReactionPredicate
@@ -18,10 +20,12 @@ from ...converters import ScopeParser
from ...errors import MissingGuild, TooManyMatches
from ...utils import CacheLevel, PlaylistScope
from ..abc import MixinMeta
from ..cog_utils import CompositeMetaClass, PlaylistConverter, _, __version__
from ..cog_utils import CompositeMetaClass, PlaylistConverter, __version__
log = logging.getLogger("red.cogs.Audio.cog.Commands.audioset")
_ = Translator("Audio", Path(__file__))
class AudioSetCommands(MixinMeta, metaclass=CompositeMetaClass):
@commands.group(name="audioset")
@@ -1378,7 +1382,7 @@ class AudioSetCommands(MixinMeta, metaclass=CompositeMetaClass):
async def command_audioset_audiodb_toggle(self, ctx: commands.Context):
"""Toggle the server settings.
Default is ON
Default is OFF
"""
state = await self.config.global_db_enabled()
await self.config.global_db_enabled.set(not state)

View File

@@ -3,6 +3,7 @@ import contextlib
import datetime
import logging
import time
from pathlib import Path
from typing import Optional, Union
@@ -10,15 +11,17 @@ import discord
import lavalink
from redbot.core import commands
from redbot.core.i18n import Translator
from redbot.core.utils import AsyncIter
from redbot.core.utils.chat_formatting import humanize_number
from redbot.core.utils.menus import start_adding_reactions
from redbot.core.utils.predicates import ReactionPredicate
from ..abc import MixinMeta
from ..cog_utils import CompositeMetaClass, _
from ..cog_utils import CompositeMetaClass
log = logging.getLogger("red.cogs.Audio.cog.Commands.player_controller")
_ = Translator("Audio", Path(__file__))
class PlayerControllerCommands(MixinMeta, metaclass=CompositeMetaClass):
@@ -98,9 +101,8 @@ class PlayerControllerCommands(MixinMeta, metaclass=CompositeMetaClass):
await self.get_track_description(player.current, self.local_folder_current_path)
or ""
)
song += _("\n Requested by: **{track.requester}**")
song += "\n\n{arrow}`{pos}`/`{dur}`"
song = song.format(track=player.current, arrow=arrow, pos=pos, dur=dur)
song += _("\n Requested by: **{track.requester}**").format(track=player.current)
song += "\n\n{arrow}`{pos}`/`{dur}`".format(arrow=arrow, pos=pos, dur=dur)
else:
song = _("Nothing.")

View File

@@ -2,20 +2,23 @@ import asyncio
import contextlib
import logging
import re
from pathlib import Path
import discord
import lavalink
from redbot.core import commands
from redbot.core.i18n import Translator
from redbot.core.utils.chat_formatting import box, humanize_number, pagify
from redbot.core.utils.menus import DEFAULT_CONTROLS, menu, start_adding_reactions
from redbot.core.utils.predicates import MessagePredicate, ReactionPredicate
from ...equalizer import Equalizer
from ..abc import MixinMeta
from ..cog_utils import CompositeMetaClass, _
from ..cog_utils import CompositeMetaClass
log = logging.getLogger("red.cogs.Audio.cog.Commands.equalizer")
_ = Translator("Audio", Path(__file__))
class EqualizerCommands(MixinMeta, metaclass=CompositeMetaClass):

View File

@@ -4,11 +4,13 @@ from pathlib import Path
import discord
from redbot.core import commands
from redbot.core.i18n import Translator
from ..abc import MixinMeta
from ..cog_utils import CompositeMetaClass, _
from ..cog_utils import CompositeMetaClass
log = logging.getLogger("red.cogs.Audio.cog.Commands.lavalink_setup")
_ = Translator("Audio", Path(__file__))
class LavalinkSetupCommands(MixinMeta, metaclass=CompositeMetaClass):

View File

@@ -7,13 +7,15 @@ from typing import MutableMapping
import discord
from redbot.core import commands
from redbot.core.i18n import Translator
from redbot.core.utils.menus import DEFAULT_CONTROLS, close_menu, menu, next_page, prev_page
from ...audio_dataclasses import LocalPath, Query
from ..abc import MixinMeta
from ..cog_utils import CompositeMetaClass, _
from ..cog_utils import CompositeMetaClass
log = logging.getLogger("red.cogs.Audio.cog.Commands.local_track")
_ = Translator("Audio", Path(__file__))
class LocalTrackCommands(MixinMeta, metaclass=CompositeMetaClass):

View File

@@ -3,19 +3,22 @@ import heapq
import logging
import math
import random
from pathlib import Path
import discord
import lavalink
from redbot.core import commands
from redbot.core.i18n import Translator
from redbot.core.utils import AsyncIter
from redbot.core.utils.chat_formatting import humanize_number, pagify
from redbot.core.utils.menus import DEFAULT_CONTROLS, menu
from ..abc import MixinMeta
from ..cog_utils import CompositeMetaClass, _
from ..cog_utils import CompositeMetaClass
log = logging.getLogger("red.cogs.Audio.cog.Commands.miscellaneous")
_ = Translator("Audio", Path(__file__))
class MiscellaneousCommands(MixinMeta, metaclass=CompositeMetaClass):

View File

@@ -3,6 +3,7 @@ import datetime
import logging
import math
import time
from pathlib import Path
from typing import MutableMapping
@@ -12,6 +13,7 @@ import lavalink
from discord.embeds import EmptyEmbed
from redbot.core import commands
from redbot.core.commands import UserInputOptional
from redbot.core.i18n import Translator
from redbot.core.utils import AsyncIter
from redbot.core.utils.menus import DEFAULT_CONTROLS, close_menu, menu, next_page, prev_page
@@ -24,9 +26,10 @@ from ...errors import (
TrackEnqueueError,
)
from ..abc import MixinMeta
from ..cog_utils import CompositeMetaClass, _
from ..cog_utils import CompositeMetaClass
log = logging.getLogger("red.cogs.Audio.cog.Commands.player")
_ = Translator("Audio", Path(__file__))
class PlayerCommands(MixinMeta, metaclass=CompositeMetaClass):
@@ -125,6 +128,9 @@ class PlayerCommands(MixinMeta, metaclass=CompositeMetaClass):
return await self.send_embed_msg(
ctx, title=_("Unable To Play Tracks"), description=err.message
)
except Exception as e:
self.update_player_lock(ctx, False)
raise e
@commands.command(name="bumpplay")
@commands.guild_only()
@@ -230,6 +236,9 @@ class PlayerCommands(MixinMeta, metaclass=CompositeMetaClass):
return await self.send_embed_msg(
ctx, title=_("Unable To Play Tracks"), description=err.message
)
except Exception as e:
self.update_player_lock(ctx, False)
raise e
if isinstance(tracks, discord.Message):
return
elif not tracks:
@@ -248,7 +257,7 @@ class PlayerCommands(MixinMeta, metaclass=CompositeMetaClass):
title = _("Track is not playable.")
embed = discord.Embed(title=title)
embed.description = _(
"**{suffix}** is not a fully supported format and some " "tracks may not play."
"**{suffix}** is not a fully supported format and some tracks may not play."
).format(suffix=query.suffix)
return await self.send_embed_msg(ctx, embed=embed)
queue_dur = await self.track_remaining_duration(ctx)
@@ -611,6 +620,9 @@ class PlayerCommands(MixinMeta, metaclass=CompositeMetaClass):
"minutes."
),
)
except Exception as e:
self.update_player_lock(ctx, False)
raise e
if not guild_data["auto_play"]:
await ctx.invoke(self.command_audioset_autoplay_toggle)
@@ -745,6 +757,9 @@ class PlayerCommands(MixinMeta, metaclass=CompositeMetaClass):
"try again in a few minutes."
),
)
except Exception as e:
self.update_player_lock(ctx, False)
raise e
tracks = result.tracks
else:
@@ -761,6 +776,9 @@ class PlayerCommands(MixinMeta, metaclass=CompositeMetaClass):
"try again in a few minutes."
),
)
except Exception as e:
self.update_player_lock(ctx, False)
raise e
if not tracks:
embed = discord.Embed(title=_("Nothing found."))
if await self.config.use_external_lavalink() and query.is_local:
@@ -877,6 +895,9 @@ class PlayerCommands(MixinMeta, metaclass=CompositeMetaClass):
"try again in a few minutes."
),
)
except Exception as e:
self.update_player_lock(ctx, False)
raise e
tracks = result.tracks
if not tracks:
embed = discord.Embed(title=_("Nothing found."))

File diff suppressed because it is too large Load Diff

View File

@@ -3,6 +3,7 @@ import contextlib
import datetime
import logging
import math
from pathlib import Path
from typing import MutableMapping, Optional
@@ -10,6 +11,7 @@ import discord
import lavalink
from redbot.core import commands
from redbot.core.i18n import Translator
from redbot.core.utils import AsyncIter
from redbot.core.utils.menus import (
DEFAULT_CONTROLS,
@@ -22,9 +24,10 @@ from redbot.core.utils.menus import (
from redbot.core.utils.predicates import ReactionPredicate
from ..abc import MixinMeta
from ..cog_utils import CompositeMetaClass, _
from ..cog_utils import CompositeMetaClass
log = logging.getLogger("red.cogs.Audio.cog.Commands.queue")
_ = Translator("Audio", Path(__file__))
class QueueCommands(MixinMeta, metaclass=CompositeMetaClass):
@@ -71,9 +74,8 @@ class QueueCommands(MixinMeta, metaclass=CompositeMetaClass):
await self.get_track_description(player.current, self.local_folder_current_path)
or ""
)
song += _("\n Requested by: **{track.requester}**")
song += "\n\n{arrow}`{pos}`/`{dur}`"
song = song.format(track=player.current, arrow=arrow, pos=pos, dur=dur)
song += _("\n Requested by: **{track.requester}**").format(track=player.current)
song += f"\n\n{arrow}`{pos}`/`{dur}`"
embed = discord.Embed(title=_("Now Playing"), description=song)
guild_data = await self.config.guild(ctx.guild).all()
if guild_data["thumbnail"] and player.current and player.current.thumbnail: