mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-12-09 02:42:30 -05:00
Audio cleanup (#5618)
* add different logging level callbacks for task exception logging * Add callback to tasks which didn't have them * The boring stuff - (apply .trace() and .verbose() to audio, stop using debug_exc_log, delete audio_logging.py) * Unsured import cleanup * use new lavalink method * return so it doesn't log this twice. * improve logging on main event handler
This commit is contained in:
@@ -13,7 +13,6 @@ from redbot.core import commands
|
||||
from redbot.core.i18n import Translator
|
||||
|
||||
from ...apis.playlist_interface import Playlist, delete_playlist, get_playlist
|
||||
from ...audio_logging import debug_exc_log
|
||||
from ...utils import PlaylistScope
|
||||
from ..abc import MixinMeta
|
||||
from ..cog_utils import CompositeMetaClass
|
||||
@@ -123,8 +122,8 @@ class AudioEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
playlist_api=self.playlist_api,
|
||||
bot=self.bot,
|
||||
)
|
||||
except Exception as err:
|
||||
debug_exc_log(log, err, "Failed to delete daily playlist ID: %d", too_old_id)
|
||||
except Exception as exc:
|
||||
log.verbose("Failed to delete daily playlist ID: %d", too_old_id, exc_info=exc)
|
||||
try:
|
||||
await delete_playlist(
|
||||
scope=PlaylistScope.GLOBAL.value,
|
||||
@@ -134,9 +133,9 @@ class AudioEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
playlist_api=self.playlist_api,
|
||||
bot=self.bot,
|
||||
)
|
||||
except Exception as err:
|
||||
debug_exc_log(
|
||||
log, err, "Failed to delete global daily playlist ID: %d", too_old_id
|
||||
except Exception as exc:
|
||||
log.verbose(
|
||||
"Failed to delete global daily playlist ID: %d", too_old_id, exc_info=exc
|
||||
)
|
||||
persist_cache = self._persist_queue_cache.setdefault(
|
||||
guild.id, await self.config.guild(guild).persist_queue()
|
||||
|
||||
@@ -12,14 +12,15 @@ import lavalink
|
||||
|
||||
from aiohttp import ClientConnectorError
|
||||
from discord.ext.commands import CheckFailure
|
||||
|
||||
from redbot.core import commands
|
||||
from redbot.core.i18n import Translator
|
||||
from redbot.core.utils.chat_formatting import box, humanize_list
|
||||
|
||||
from ...audio_logging import debug_exc_log
|
||||
from ...errors import TrackEnqueueError
|
||||
from ..abc import MixinMeta
|
||||
from ..cog_utils import HUMANIZED_PERM, CompositeMetaClass
|
||||
from ...utils import task_callback_trace
|
||||
|
||||
log = logging.getLogger("red.cogs.Audio.cog.Events.dpy")
|
||||
_ = Translator("Audio", Path(__file__))
|
||||
@@ -176,7 +177,7 @@ class DpyEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
description=_("Connection to Lavalink has been lost."),
|
||||
error=True,
|
||||
)
|
||||
debug_exc_log(log, error, "This is a handled error")
|
||||
log.trace("This is a handled error", exc_info=error)
|
||||
elif isinstance(error, KeyError) and "such player for that guild" in str(error):
|
||||
handled = True
|
||||
await self.send_embed_msg(
|
||||
@@ -185,7 +186,7 @@ class DpyEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
description=_("The bot is not connected to a voice channel."),
|
||||
error=True,
|
||||
)
|
||||
debug_exc_log(log, error, "This is a handled error")
|
||||
log.trace("This is a handled error", exc_info=error)
|
||||
elif isinstance(error, (TrackEnqueueError, asyncio.exceptions.TimeoutError)):
|
||||
handled = True
|
||||
await self.send_embed_msg(
|
||||
@@ -197,7 +198,7 @@ class DpyEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
),
|
||||
error=True,
|
||||
)
|
||||
debug_exc_log(log, error, "This is a handled error")
|
||||
log.trace("This is a handled error", exc_info=error)
|
||||
elif isinstance(error, discord.errors.HTTPException):
|
||||
handled = True
|
||||
await self.send_embed_msg(
|
||||
@@ -229,7 +230,9 @@ class DpyEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
if not self.cog_cleaned_up:
|
||||
self.bot.dispatch("red_audio_unload", self)
|
||||
self.session.detach()
|
||||
self.bot.loop.create_task(self._close_database())
|
||||
self.bot.loop.create_task(self._close_database()).add_done_callback(
|
||||
task_callback_trace
|
||||
)
|
||||
if self.player_automated_timer_task:
|
||||
self.player_automated_timer_task.cancel()
|
||||
|
||||
@@ -244,9 +247,13 @@ class DpyEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
|
||||
lavalink.unregister_event_listener(self.lavalink_event_handler)
|
||||
lavalink.unregister_update_listener(self.lavalink_update_handler)
|
||||
self.bot.loop.create_task(lavalink.close(self.bot))
|
||||
self.bot.loop.create_task(lavalink.close(self.bot)).add_done_callback(
|
||||
task_callback_trace
|
||||
)
|
||||
if self.player_manager is not None:
|
||||
self.bot.loop.create_task(self.player_manager.shutdown())
|
||||
self.bot.loop.create_task(self.player_manager.shutdown()).add_done_callback(
|
||||
task_callback_trace
|
||||
)
|
||||
|
||||
self.cog_cleaned_up = True
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@ from redbot.core.i18n import Translator, set_contextual_locales_from_guild
|
||||
from ...errors import DatabaseError, TrackEnqueueError
|
||||
from ..abc import MixinMeta
|
||||
from ..cog_utils import CompositeMetaClass
|
||||
from ...utils import task_callback_trace
|
||||
|
||||
log = logging.getLogger("red.cogs.Audio.cog.Events.lavalink")
|
||||
ws_audio_log = logging.getLogger("red.Audio.WS.Audio")
|
||||
@@ -50,13 +51,13 @@ class LavalinkEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
guild_id = self.rgetattr(guild, "id", None)
|
||||
if not guild:
|
||||
return
|
||||
log.debug("Received a new lavalink event for %d: %s: %r", guild_id, event_type, extra)
|
||||
guild_data = await self.config.guild(guild).all()
|
||||
disconnect = guild_data["disconnect"]
|
||||
if event_type == lavalink.LavalinkEvents.FORCED_DISCONNECT:
|
||||
self.bot.dispatch("red_audio_audio_disconnect", guild)
|
||||
self._ll_guild_updates.discard(guild.id)
|
||||
return
|
||||
|
||||
if event_type == lavalink.LavalinkEvents.WEBSOCKET_CLOSED:
|
||||
deafen = guild_data["auto_deafen"]
|
||||
event_channel_id = extra.get("channelID")
|
||||
@@ -67,6 +68,14 @@ class LavalinkEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
by_remote = extra.get("byRemote", "")
|
||||
reason = extra.get("reason", "No Specified Reason").strip()
|
||||
ws_audio_log.info(
|
||||
"WS EVENT - SIMPLE RESUME (Healthy Socket) | "
|
||||
"Voice websocket closed event "
|
||||
"Code: %d -- Remote: %s -- %s",
|
||||
extra.get("code"),
|
||||
by_remote,
|
||||
reason,
|
||||
)
|
||||
ws_audio_log.debug(
|
||||
"WS EVENT - SIMPLE RESUME (Healthy Socket) | "
|
||||
"Voice websocket closed event "
|
||||
"Code: %d -- Remote: %s -- %s, %r",
|
||||
@@ -84,8 +93,12 @@ class LavalinkEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
await self._websocket_closed_handler(
|
||||
guild=guild, player=player, extra=extra, deafen=deafen, disconnect=disconnect
|
||||
)
|
||||
except Exception:
|
||||
log.exception("Error in WEBSOCKET_CLOSED handling for guild: %s", player.guild.id)
|
||||
except Exception as exc:
|
||||
log.debug(
|
||||
"Error in WEBSOCKET_CLOSED handling for guild: %s",
|
||||
player.guild.id,
|
||||
exc_info=exc,
|
||||
)
|
||||
return
|
||||
|
||||
await set_contextual_locales_from_guild(self.bot, guild)
|
||||
@@ -102,7 +115,6 @@ class LavalinkEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
current_track, self.local_folder_current_path
|
||||
)
|
||||
status = await self.config.status()
|
||||
log.debug("Received a new lavalink event for %d: %s: %r", guild_id, event_type, extra)
|
||||
prev_song: lavalink.Track = player.fetch("prev_song")
|
||||
await self.maybe_reset_error_counter(player)
|
||||
|
||||
@@ -195,12 +207,14 @@ class LavalinkEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
)
|
||||
player.store("notify_message", notify_message)
|
||||
if event_type == lavalink.LavalinkEvents.TRACK_START and status:
|
||||
log.debug("Track started for %s, updating bot status", guild_id)
|
||||
player_check = await self.get_active_player_count()
|
||||
await self.update_bot_presence(*player_check)
|
||||
|
||||
if event_type == lavalink.LavalinkEvents.TRACK_END and status:
|
||||
await asyncio.sleep(1)
|
||||
if not player.is_playing:
|
||||
log.debug("Track ended for %s, updating bot status", guild_id)
|
||||
player_check = await self.get_active_player_count()
|
||||
await self.update_bot_presence(*player_check)
|
||||
|
||||
@@ -211,6 +225,9 @@ class LavalinkEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
if notify_channel and notify and self._has_notify_perms(notify_channel):
|
||||
await self.send_embed_msg(notify_channel, title=_("Queue ended."))
|
||||
if disconnect:
|
||||
log.debug(
|
||||
"Queue ended for %s, Disconnecting bot due to configuration", guild_id
|
||||
)
|
||||
self.bot.dispatch("red_audio_audio_disconnect", guild)
|
||||
await self.config.guild_from_id(
|
||||
guild_id=guild_id
|
||||
@@ -220,6 +237,7 @@ class LavalinkEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
await player.disconnect()
|
||||
self._ll_guild_updates.discard(guild.id)
|
||||
if status:
|
||||
log.debug("Queue ended for %s, updating bot status", guild_id)
|
||||
player_check = await self.get_active_player_count()
|
||||
await self.update_bot_presence(*player_check)
|
||||
|
||||
@@ -261,6 +279,14 @@ class LavalinkEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
if message_channel:
|
||||
message_channel = self.bot.get_channel(message_channel)
|
||||
if early_exit:
|
||||
log.warning(
|
||||
"Audio detected multiple continuous errors during playback "
|
||||
"- terminating the player for guild: %s.",
|
||||
guild_id,
|
||||
)
|
||||
log.verbose(
|
||||
"Player has been terminated due to multiple playback failures: %r", player
|
||||
)
|
||||
embed = discord.Embed(
|
||||
colour=await self.bot.get_embed_color(message_channel),
|
||||
title=_("Multiple Errors Detected"),
|
||||
@@ -294,7 +320,7 @@ class LavalinkEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
if current_id:
|
||||
asyncio.create_task(
|
||||
self.api_interface.global_cache_api.report_invalid(current_id)
|
||||
)
|
||||
).add_done_callback(task_callback_trace)
|
||||
await message_channel.send(embed=embed)
|
||||
await player.skip()
|
||||
|
||||
@@ -330,7 +356,7 @@ class LavalinkEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
if player.channel.id != event_channel_id:
|
||||
code = 4014
|
||||
if event_channel_id != channel_id:
|
||||
ws_audio_log.info(
|
||||
ws_audio_log.debug(
|
||||
"Received an op code for a channel that is no longer valid; %d "
|
||||
"Reason: Error code %d & %s, %r",
|
||||
event_channel_id,
|
||||
@@ -347,7 +373,8 @@ class LavalinkEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
if code in (1000,) and has_perm and player.current and player.is_playing:
|
||||
player.store("resumes", player.fetch("resumes", 0) + 1)
|
||||
await player.resume(player.current, start=player.position, replace=True)
|
||||
ws_audio_log.info(
|
||||
ws_audio_log.info("Player resumed | Reason: Error code %d & %s", code, reason)
|
||||
ws_audio_log.debug(
|
||||
"Player resumed | Reason: Error code %d & %s, %r", code, reason, player
|
||||
)
|
||||
self._ws_op_codes[guild_id]._init(self._ws_op_codes[guild_id]._maxsize)
|
||||
@@ -359,7 +386,7 @@ class LavalinkEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
else:
|
||||
player._con_delay = ExponentialBackoff(base=1)
|
||||
delay = player._con_delay.delay()
|
||||
ws_audio_log.warning(
|
||||
ws_audio_log.debug(
|
||||
"YOU CAN IGNORE THIS UNLESS IT'S CONSISTENTLY REPEATING FOR THE SAME GUILD - "
|
||||
"Voice websocket closed for guild %d -> "
|
||||
"Socket Closed %s. "
|
||||
@@ -371,7 +398,7 @@ class LavalinkEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
reason,
|
||||
player,
|
||||
)
|
||||
ws_audio_log.debug(
|
||||
ws_audio_log.info(
|
||||
"Reconnecting to channel %d in guild: %d | %.2fs",
|
||||
channel_id,
|
||||
guild_id,
|
||||
@@ -387,6 +414,10 @@ class LavalinkEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
await player.connect(deafen=deafen)
|
||||
await player.resume(player.current, start=player.position, replace=True)
|
||||
ws_audio_log.info(
|
||||
"Voice websocket reconnected Reason: Error code %d & Currently playing",
|
||||
code,
|
||||
)
|
||||
ws_audio_log.debug(
|
||||
"Voice websocket reconnected "
|
||||
"Reason: Error code %d & Currently playing, %r",
|
||||
code,
|
||||
@@ -399,6 +430,10 @@ class LavalinkEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
player.current, start=player.position, replace=True, pause=True
|
||||
)
|
||||
ws_audio_log.info(
|
||||
"Voice websocket reconnected Reason: Error code %d & Currently Paused",
|
||||
code,
|
||||
)
|
||||
ws_audio_log.debug(
|
||||
"Voice websocket reconnected "
|
||||
"Reason: Error code %d & Currently Paused, %r",
|
||||
code,
|
||||
@@ -408,6 +443,11 @@ class LavalinkEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
player.store("resumes", player.fetch("resumes", 0) + 1)
|
||||
await player.connect(deafen=deafen)
|
||||
ws_audio_log.info(
|
||||
"Voice websocket reconnected "
|
||||
"Reason: Error code %d & Not playing, but auto disconnect disabled",
|
||||
code,
|
||||
)
|
||||
ws_audio_log.debug(
|
||||
"Voice websocket reconnected "
|
||||
"Reason: Error code %d & Not playing, but auto disconnect disabled, %r",
|
||||
code,
|
||||
@@ -417,6 +457,11 @@ class LavalinkEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
elif not has_perm:
|
||||
self.bot.dispatch("red_audio_audio_disconnect", guild)
|
||||
ws_audio_log.info(
|
||||
"Voice websocket disconnected "
|
||||
"Reason: Error code %d & Missing permissions",
|
||||
code,
|
||||
)
|
||||
ws_audio_log.debug(
|
||||
"Voice websocket disconnected "
|
||||
"Reason: Error code %d & Missing permissions, %r",
|
||||
code,
|
||||
@@ -432,6 +477,9 @@ class LavalinkEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
else:
|
||||
self.bot.dispatch("red_audio_audio_disconnect", guild)
|
||||
ws_audio_log.info(
|
||||
"Voice websocket disconnected Reason: Error code %d & Unknown", code
|
||||
)
|
||||
ws_audio_log.debug(
|
||||
"Voice websocket disconnected Reason: Error code %d & Unknown, %r",
|
||||
code,
|
||||
player,
|
||||
@@ -447,7 +495,8 @@ class LavalinkEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
player.store("resumes", player.fetch("resumes", 0) + 1)
|
||||
await player.connect(deafen=deafen)
|
||||
await player.resume(player.current, start=player.position, replace=True)
|
||||
ws_audio_log.info(
|
||||
ws_audio_log.info("Player resumed - Reason: Error code %d & %s", code, reason)
|
||||
ws_audio_log.debug(
|
||||
"Player resumed - Reason: Error code %d & %s, %r", code, reason, player
|
||||
)
|
||||
elif code in (4015, 4009, 4006, 4000, 1006):
|
||||
@@ -464,6 +513,10 @@ class LavalinkEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
await player.connect(deafen=deafen)
|
||||
await player.resume(player.current, start=player.position, replace=True)
|
||||
ws_audio_log.info(
|
||||
"Voice websocket reconnected Reason: Error code %d & Player is active",
|
||||
code,
|
||||
)
|
||||
ws_audio_log.debug(
|
||||
"Voice websocket reconnected "
|
||||
"Reason: Error code %d & Player is active, %r",
|
||||
code,
|
||||
@@ -476,6 +529,10 @@ class LavalinkEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
player.current, start=player.position, replace=True, pause=True
|
||||
)
|
||||
ws_audio_log.info(
|
||||
"Voice websocket reconnected Reason: Error code %d & Player is paused",
|
||||
code,
|
||||
)
|
||||
ws_audio_log.debug(
|
||||
"Voice websocket reconnected "
|
||||
"Reason: Error code %d & Player is paused, %r",
|
||||
code,
|
||||
@@ -485,6 +542,14 @@ class LavalinkEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
player.store("resumes", player.fetch("resumes", 0) + 1)
|
||||
await player.connect(deafen=deafen)
|
||||
ws_audio_log.info(
|
||||
"Voice websocket reconnected "
|
||||
"to channel %d in guild: %d | "
|
||||
"Reason: Error code %d & Not playing",
|
||||
channel_id,
|
||||
guild_id,
|
||||
code,
|
||||
)
|
||||
ws_audio_log.debug(
|
||||
"Voice websocket reconnected "
|
||||
"to channel %d in guild: %d | "
|
||||
"Reason: Error code %d & Not playing, %r",
|
||||
@@ -497,6 +562,11 @@ class LavalinkEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
elif not has_perm:
|
||||
self.bot.dispatch("red_audio_audio_disconnect", guild)
|
||||
ws_audio_log.info(
|
||||
"Voice websocket disconnected "
|
||||
"Reason: Error code %d & Missing permissions",
|
||||
code,
|
||||
)
|
||||
ws_audio_log.debug(
|
||||
"Voice websocket disconnected "
|
||||
"Reason: Error code %d & Missing permissions, %r",
|
||||
code,
|
||||
@@ -514,6 +584,14 @@ class LavalinkEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
player.store("resumes", player.fetch("resumes", 0) + 1)
|
||||
await player.resume(player.current, start=player.position, replace=True)
|
||||
ws_audio_log.info(
|
||||
"WS EVENT - SIMPLE RESUME (Healthy Socket) | "
|
||||
"Voice websocket closed event "
|
||||
"Code: %d -- Remote: %s -- %s",
|
||||
code,
|
||||
by_remote,
|
||||
reason,
|
||||
)
|
||||
ws_audio_log.debug(
|
||||
"WS EVENT - SIMPLE RESUME (Healthy Socket) | "
|
||||
"Voice websocket closed event "
|
||||
"Code: %d -- Remote: %s -- %s, %r",
|
||||
@@ -524,6 +602,14 @@ class LavalinkEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
)
|
||||
else:
|
||||
ws_audio_log.info(
|
||||
"WS EVENT - IGNORED (Healthy Socket) | "
|
||||
"Voice websocket closed event "
|
||||
"Code: %d -- Remote: %s -- %s",
|
||||
code,
|
||||
by_remote,
|
||||
reason,
|
||||
)
|
||||
ws_audio_log.debug(
|
||||
"WS EVENT - IGNORED (Healthy Socket) | "
|
||||
"Voice websocket closed event "
|
||||
"Code: %d -- Remote: %s -- %s, %r",
|
||||
@@ -532,8 +618,8 @@ class LavalinkEvents(MixinMeta, metaclass=CompositeMetaClass):
|
||||
reason,
|
||||
player,
|
||||
)
|
||||
except Exception:
|
||||
log.exception("Error in task")
|
||||
except Exception as exc:
|
||||
log.exception("Error in task", exc_info=exc)
|
||||
finally:
|
||||
self._ws_op_codes[guild_id]._init(self._ws_op_codes[guild_id]._maxsize)
|
||||
self._ws_resume[guild_id].set()
|
||||
|
||||
Reference in New Issue
Block a user