Open SpongeManiac opened 5 months ago
Also, while I'm at it, Is there a way to put an async function in the after
parameter, or do I just use the method that I've implemented?
import discord
import asyncio
# Define the async error handling function
async def playback_error(error: Exception):
if error:
print(f'Error in playback: {error}')
await ctx.message.channel.send(f'A playback error has caused the audio stream to stop: {error}')
else:
print('No error in playback!')
# Wrapper to run the async function
def sync_playback_error(error: Exception):
asyncio.run_coroutine_threadsafe(playback_error(error), bot.loop)
# Attempt to play ffmpeg source
vc.play(ffmpeg_src, after=sync_playback_error)
playback_error
Function: This async function logs the error and sends a message to the Discord channel if an error occurs.sync_playback_error
Function: This function wraps the async playback_error
function and ensures it runs in the bot's event loop.vc.play
Call: Passes the sync_playback_error
function to the after
parameter of vc.play
, which will be called when playback finishes or if an error occurs.
Summary
VoiceClient.play() doesn't pass FFMPEG error to 'after' function.
Reproduction Steps
I know from #5131 that the session invalidation error is not a Discord.py error, however, the
VoiceClient
'splay()
function does not seem to be capturing and passing the FFMPEG error into my providedafter
function. I would like to notify when this error happens, so capturing this error would be very helpful. It also appears that Discord.py wrongly states that FFMPEG exited successfully, even when it exits with code 1, which by definition, is not successful.Here is my current code and log results: Code:
Logs:
Minimal Reproducible Code
No response
Expected Results
I expected the FFMPEG error to be passed to the
after
functionActual Results
The error was not captured and passed to the
after
functionIntents
discord.Intents.default()
System Information
Checklist
Additional Context
No response