Defer interaction responses in commands
Call await ctx.defer() for discord.Interaction in play, search and playtop to avoid interaction timeouts during long operations. Also move the MongoDB get_user playlist fetch in check_playlist to after the defer so DB work doesn't occur before the interaction is deferred. (cogs/basic.py, cogs/playlist.py)
This commit is contained in:
@@ -122,6 +122,9 @@ class Basic(commands.Cog):
|
|||||||
@commands.dynamic_cooldown(cooldown_check, commands.BucketType.guild)
|
@commands.dynamic_cooldown(cooldown_check, commands.BucketType.guild)
|
||||||
async def play(self, ctx: commands.Context, *, query: str, start: str = "0", end: str = "0") -> None:
|
async def play(self, ctx: commands.Context, *, query: str, start: str = "0", end: str = "0") -> None:
|
||||||
"Loads your input into the queue."
|
"Loads your input into the queue."
|
||||||
|
if isinstance(ctx, discord.Interaction) and not ctx.interaction.response.is_done():
|
||||||
|
await ctx.defer()
|
||||||
|
|
||||||
player: voicelink.Player = ctx.guild.voice_client
|
player: voicelink.Player = ctx.guild.voice_client
|
||||||
if not player:
|
if not player:
|
||||||
player = await voicelink.connect_channel(ctx)
|
player = await voicelink.connect_channel(ctx)
|
||||||
@@ -216,6 +219,9 @@ class Basic(commands.Cog):
|
|||||||
@commands.dynamic_cooldown(cooldown_check, commands.BucketType.guild)
|
@commands.dynamic_cooldown(cooldown_check, commands.BucketType.guild)
|
||||||
async def search(self, ctx: commands.Context, *, query: str, platform: str = Config().search_platform.name):
|
async def search(self, ctx: commands.Context, *, query: str, platform: str = Config().search_platform.name):
|
||||||
"Searches your query and displays the results."
|
"Searches your query and displays the results."
|
||||||
|
if isinstance(ctx, discord.Interaction) and not ctx.interaction.response.is_done():
|
||||||
|
await ctx.defer()
|
||||||
|
|
||||||
player: voicelink.Player = ctx.guild.voice_client
|
player: voicelink.Player = ctx.guild.voice_client
|
||||||
if not player:
|
if not player:
|
||||||
player = await voicelink.connect_channel(ctx)
|
player = await voicelink.connect_channel(ctx)
|
||||||
@@ -259,6 +265,9 @@ class Basic(commands.Cog):
|
|||||||
@commands.dynamic_cooldown(cooldown_check, commands.BucketType.guild)
|
@commands.dynamic_cooldown(cooldown_check, commands.BucketType.guild)
|
||||||
async def playtop(self, ctx: commands.Context, *, query: str, start: str = "0", end: str = "0"):
|
async def playtop(self, ctx: commands.Context, *, query: str, start: str = "0", end: str = "0"):
|
||||||
"Adds a song with the given url or query on the top of the queue."
|
"Adds a song with the given url or query on the top of the queue."
|
||||||
|
if isinstance(ctx, discord.Interaction) and not ctx.interaction.response.is_done():
|
||||||
|
await ctx.defer()
|
||||||
|
|
||||||
player: voicelink.Player = ctx.guild.voice_client
|
player: voicelink.Player = ctx.guild.voice_client
|
||||||
if not player:
|
if not player:
|
||||||
player = await voicelink.connect_channel(ctx)
|
player = await voicelink.connect_channel(ctx)
|
||||||
|
|||||||
@@ -86,11 +86,11 @@ async def check_playlist(
|
|||||||
share_perm: Optional[str] = None
|
share_perm: Optional[str] = None
|
||||||
) -> dict:
|
) -> dict:
|
||||||
"""Get user's playlist data with various filtering options."""
|
"""Get user's playlist data with various filtering options."""
|
||||||
user_playlists = await MongoDBHandler.get_user(ctx.author.id, d_type='playlist')
|
|
||||||
|
|
||||||
if isinstance(ctx, discord.Interaction) and not ctx.interaction.response.is_done():
|
if isinstance(ctx, discord.Interaction) and not ctx.interaction.response.is_done():
|
||||||
await ctx.defer()
|
await ctx.defer()
|
||||||
|
|
||||||
|
user_playlists = await MongoDBHandler.get_user(ctx.author.id, d_type='playlist')
|
||||||
|
|
||||||
if full:
|
if full:
|
||||||
return user_playlists
|
return user_playlists
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user