All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 3m43s
53 lines
2.4 KiB
TypeScript
53 lines
2.4 KiB
TypeScript
import { MessageFlags } from "discord.js"
|
|
import type { StringSelectMenuInteraction } from "discord.js"
|
|
import { twitchClient } from "@/utils/twitch"
|
|
import type { GuildTwitch } from "@/types/schemas"
|
|
import dbGuild from "@/schemas/guild"
|
|
import { t } from "@/utils/i18n"
|
|
import { logConsole } from "@/utils/console"
|
|
|
|
export const id = "twitch_streamer_remove"
|
|
export async function execute(interaction: StringSelectMenuInteraction) {
|
|
const twitchUserId = interaction.values[0]
|
|
if (!twitchUserId) return interaction.reply({ content: t(interaction.locale, "twitch.no_streamer_selected"), flags: MessageFlags.Ephemeral })
|
|
|
|
const guildProfile = await dbGuild.findOne({ guildId: interaction.guild?.id })
|
|
if (!guildProfile) return interaction.reply({ content: t(interaction.locale, "common.database_not_found"), flags: MessageFlags.Ephemeral })
|
|
|
|
const dbData = guildProfile.get("guildTwitch") as GuildTwitch
|
|
|
|
// Trouver et supprimer le streamer
|
|
const streamerIndex = dbData.streamers.findIndex(s => s.twitchUserId === twitchUserId)
|
|
if (streamerIndex === -1) return interaction.reply({ content: t(interaction.locale, "twitch.streamer_not_found_list"), flags: MessageFlags.Ephemeral })
|
|
|
|
// Récupérer le nom du streamer avant suppression
|
|
let streamerName = `ID: ${twitchUserId}`
|
|
try {
|
|
const user = await twitchClient.users.getUserById(twitchUserId)
|
|
if (user) streamerName = user.displayName
|
|
} catch {
|
|
logConsole('twitch', 'user_fetch_error', { id: twitchUserId })
|
|
}
|
|
|
|
// Supprimer le streamer
|
|
dbData.streamers.splice(streamerIndex, 1)
|
|
guildProfile.set("guildTwitch", dbData)
|
|
guildProfile.markModified("guildTwitch")
|
|
await guildProfile.save().catch(console.error)
|
|
|
|
// Vérifier s'il faut supprimer les listeners
|
|
if (!await dbGuild.exists({ "guildTwitch.streamers.twitchUserId": twitchUserId })) {
|
|
try {
|
|
const userSubs = await twitchClient.eventSub.getSubscriptionsForUser(twitchUserId)
|
|
await Promise.all(userSubs.data.map(async sub => {
|
|
if (sub.transportMethod === "webhook" && (sub.type === "stream.online" || sub.type === "stream.offline")) await sub.unsubscribe()
|
|
}))
|
|
logConsole('twitch', 'listener_removed', { name: streamerName, id: twitchUserId })
|
|
} catch {
|
|
logConsole('twitch', 'listener_removal_error', { streamerName })
|
|
}
|
|
}
|
|
|
|
return interaction.update({ content: t(interaction.locale, "twitch.streamer_removed_success", { streamer: streamerName }), components: [] })
|
|
}
|