Fix duplicate streamWatching, locale guild et console log/error
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 3m43s

This commit is contained in:
Zachary Guénot
2025-06-11 02:50:58 +02:00
parent 0cc81d6430
commit e714e94f85
31 changed files with 396 additions and 308 deletions

View File

@@ -5,8 +5,8 @@ import type { GuildPlayer, Disco } from "@/types/schemas"
import type { PlayerMetadata } from "@/types/player"
import uptime from "./uptime"
import dbGuild from "@/schemas/guild"
import { t } from "./i18n"
import { logConsole } from "./console"
import { t, getGuildLocale } from "./i18n"
import { logConsole, logConsoleError } from "./console"
const progressIntervals = new Map<string, NodeJS.Timeout>()
@@ -25,7 +25,7 @@ export function startProgressSaving(guildId: string, botId: string) {
const interval = setInterval(async () => {
try {
const queue = useQueue(guildId)
if (!queue || !queue.isPlaying() || !queue.currentTrack) { startProgressSaving(guildId, botId); return }
if (!queue || !queue.isPlaying() || !queue.currentTrack) { await stopProgressSaving(guildId, botId); return }
const guildProfile = await dbGuild.findOne({ guildId })
if (!guildProfile) { await stopProgressSaving(guildId, botId); return }
@@ -50,8 +50,7 @@ export function startProgressSaving(guildId: string, botId: string) {
guildProfile.markModified("guildPlayer")
await guildProfile.save().catch(console.error)
} catch (error) {
logConsole('discord_player', 'progress_saving.error', { guildId, botId })
console.error(error)
logConsoleError('discord_player', 'progress_saving.error', { guildId, botId }, error as Error)
await stopProgressSaving(guildId, botId)
}
}, 3000)
@@ -127,12 +126,13 @@ export async function playerReplay(client: Client, dbData: GuildPlayer) {
})
try { if (!queue.connection) await queue.connect(voiceChannel) }
catch (error) { console.error(error) }
catch (error) { logConsoleError('discord_player', 'replay.connect_error', {}, error as Error) }
if (!instance.replay.trackUrl) return
const guildLocale = await getGuildLocale(queue.guild.id)
const result = await player.search(instance.replay.trackUrl, { requestedBy: client.user ?? undefined })
if (!result.hasTracks()) await textChannel.send(t(queue.guild.preferredLocale, "player.no_track_found", { url: instance.replay.trackUrl }))
if (!result.hasTracks()) await textChannel.send(t(guildLocale, "player.no_track_found", { url: instance.replay.trackUrl }))
const track = result.tracks[0]
const entry = queue.tasksQueue.acquire()
@@ -143,9 +143,9 @@ export async function playerReplay(client: Client, dbData: GuildPlayer) {
if (!queue.isPlaying()) await queue.node.play()
if (instance.replay.progress) await queue.node.seek(instance.replay.progress)
startProgressSaving(queue.guild.id, botId)
await textChannel.send(t(queue.guild.preferredLocale, "player.music_restarted"))
await textChannel.send(t(guildLocale, "player.music_restarted"))
}
catch (error) { console.error(error) }
catch (error) { logConsoleError('discord_player', 'replay.play_error', {}, error as Error) }
finally { queue.tasksQueue.release() }
}
@@ -164,7 +164,8 @@ export async function playerDisco(client: Client, guild: Guild, dbData: Disco) {
return "clear"
}
const { embed, components } = generatePlayerEmbed(guild, guild.preferredLocale)
const guildLocale = await getGuildLocale(guild.id)
const { embed, components } = generatePlayerEmbed(guild, guildLocale)
if (components && embed.data.footer) embed.setFooter({ text: `Uptime: ${uptime(client.uptime)} \n ${embed.data.footer.text}` })
else embed.setFooter({ text: `Uptime: ${uptime(client.uptime)}` })
@@ -183,7 +184,7 @@ export async function playerDisco(client: Client, guild: Guild, dbData: Disco) {
}
else return await channel.send({ embeds: [embed] })
} catch (error) {
console.error(error)
logConsoleError('discord_player', 'disco.general_error', {}, error as Error)
return "clear"
}
}
@@ -199,7 +200,7 @@ export async function playerEdit(interaction: ButtonInteraction) {
await interaction.update({ components })
}
export function generatePlayerEmbed(guild: Guild, locale: Locale) {
export function generatePlayerEmbed(guild: Guild, locale: Locale | string) {
const embed = new EmbedBuilder().setColor("#ffc370")
const queue = useQueue(guild.id)