Fix duplication WS Twitch + types

This commit is contained in:
Angels-dev
2025-01-04 17:21:49 +01:00
parent 6e29e7c8e4
commit 5af815d99f
6 changed files with 6524 additions and 4604 deletions

11046
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,14 +1,14 @@
{ {
"name": "bot_tamiseur", "name": "bot_tamiseur",
"description": "Listen to music and use fun commands with your friends!", "description": "Listen to music and use fun commands with your friends!",
"version": "3.0.3", "version": "3.0.4",
"author": { "author": {
"name": "Zachary Guénot" "name": "Zachary Guénot"
}, },
"main": "src/index.ts", "main": "src/index.ts",
"scripts": { "scripts": {
"format": "prettier --write .", "format": "prettier --write .",
"start": "ts-node src/index.ts", "start": "npx tsx src/index.ts",
"dev": "nodemon -e ts src/index.ts", "dev": "nodemon -e ts src/index.ts",
"build": "tsc", "build": "tsc",
"lint": "eslint src/**/*.ts", "lint": "eslint src/**/*.ts",
@@ -18,40 +18,40 @@
"Garder chalk à la version 4.1.2 pour éviter un bug ESM avec la version >=5.0.0" "Garder chalk à la version 4.1.2 pour éviter un bug ESM avec la version >=5.0.0"
], ],
"dependencies": { "dependencies": {
"@discord-player/equalizer": "^0.2.3", "@discord-player/equalizer": "^7.0.0",
"@discord-player/extractor": "^4.5.0", "@discord-player/extractor": "^7.0.0",
"@discordjs/voice": "^0.17.0", "@discordjs/voice": "^0.18.0",
"@evan/opus": "^1.0.3", "@evan/opus": "^1.0.3",
"axios": "^1.7.4", "axios": "^1.7.9",
"bufferutil": "^4.0.8", "bufferutil": "^4.0.9",
"chalk": "^4.1.2", "chalk": "^4.1.2",
"discord-player": "^6.7.1", "discord-player": "^7.0.0",
"discord-player-youtubei": "^1.2.4", "discord-player-youtubei": "^1.3.7",
"discord.js": "^14.15.3", "discord.js": "^14.17.2",
"dotenv": "^16.4.5", "dotenv": "^16.4.7",
"iconv-lite": "^0.6.3", "iconv-lite": "^0.6.3",
"jsdom": "^24.1.1", "jsdom": "^25.0.1",
"libsodium-wrappers": "^0.7.14", "libsodium-wrappers": "^0.7.15",
"mediaplex": "^0.0.9", "mediaplex": "^1.0.0",
"mongoose": "^8.5.2", "mongoose": "^8.9.3",
"parse-torrent": "^9.1.5", "parse-torrent": "^9.1.5",
"require-all": "^3.0.0", "require-all": "^3.0.0",
"rss-parser": "^3.13.0", "rss-parser": "^3.13.0",
"ts-node": "^10.9.2", "utf-8-validate": "^6.0.5",
"utf-8-validate": "^6.0.4",
"websocket": "^1.0.35" "websocket": "^1.0.35"
}, },
"devDependencies": { "devDependencies": {
"@eslint/eslintrc": "^3.1.0", "@eslint/eslintrc": "^3.2.0",
"@eslint/js": "^9.8.0", "@eslint/js": "^9.17.0",
"@swc/core": "^1.7.6", "@swc/core": "^1.10.4",
"@types/node": "^22.1.0", "@types/node": "^22.10.5",
"@types/parse-torrent": "^5.8.7", "@types/parse-torrent": "^5.8.7",
"@types/websocket": "^1.0.10", "@types/websocket": "^1.0.10",
"@typescript-eslint/eslint-plugin": "^8.0.1", "@typescript-eslint/eslint-plugin": "^8.19.0",
"@typescript-eslint/parser": "^8.0.1", "@typescript-eslint/parser": "^8.19.0",
"eslint": "^9.8.0", "eslint": "^9.17.0",
"nodemon": "^3.1.4", "nodemon": "^3.1.9",
"prettier": "^3.3.3" "prettier": "^3.4.2",
"tsx": "^4.19.2"
} }
} }

View File

@@ -175,7 +175,7 @@ export default {
.setColor(interaction.guild?.members.me?.displayColor || '#ffc370') .setColor(interaction.guild?.members.me?.displayColor || '#ffc370')
.setTimestamp() .setTimestamp()
.setFields(fields) .setFields(fields)
return await interaction.channel?.send({ embeds: [embed] }) return await interaction.followUp({ embeds: [embed] })
}) })
} }
else if (result.status === 'fail') return await interaction.followUp(failMsg(result.data as unknown as FailMsgData)) else if (result.status === 'fail') return await interaction.followUp(failMsg(result.data as unknown as FailMsgData))

View File

@@ -1,5 +1,6 @@
import { Events, Client, ActivityType } from 'discord.js' import { Events, Client, ActivityType } from 'discord.js'
import { YoutubeiExtractor } from "discord-player-youtubei" import { SpotifyExtractor } from '@discord-player/extractor'
import { YoutubeiExtractor } from 'discord-player-youtubei'
import { useMainPlayer } from 'discord-player' import { useMainPlayer } from 'discord-player'
import { connect } from 'mongoose' import { connect } from 'mongoose'
import WebSocket from 'websocket' import WebSocket from 'websocket'
@@ -19,7 +20,7 @@ export default {
console.log(chalk.blue(`[DiscordJS] Connected to Discord ! Logged in as ${client.user?.tag ?? 'unknown'}`)) console.log(chalk.blue(`[DiscordJS] Connected to Discord ! Logged in as ${client.user?.tag ?? 'unknown'}`))
client.user?.setActivity('some bangers...', { type: ActivityType.Listening }) client.user?.setActivity('some bangers...', { type: ActivityType.Listening })
await useMainPlayer().extractors.loadDefault(ext => ext === 'SpotifyExtractor').then(() => console.log(chalk.blue('[Discord-Player] Spotify extractor loaded.'))).catch(console.error) await useMainPlayer().extractors.register(SpotifyExtractor, {}).then(() => console.log(chalk.blue('[Discord-Player] Spotify extractor loaded.'))).catch(console.error)
await useMainPlayer().extractors.register(YoutubeiExtractor, {}).then(() => console.log(chalk.blue('[Discord-Player] Youtube extractor loaded.'))).catch(console.error) await useMainPlayer().extractors.register(YoutubeiExtractor, {}).then(() => console.log(chalk.blue('[Discord-Player] Youtube extractor loaded.'))).catch(console.error)
let mongo_url = `mongodb://${process.env.MONGOOSE_USER}:${process.env.MONGOOSE_PASSWORD}@${process.env.MONGOOSE_HOST}/${process.env.MONGOOSE_DATABASE}` let mongo_url = `mongodb://${process.env.MONGOOSE_USER}:${process.env.MONGOOSE_PASSWORD}@${process.env.MONGOOSE_HOST}/${process.env.MONGOOSE_DATABASE}`
@@ -54,9 +55,17 @@ export default {
}, 30000) }, 30000)
// TWITCH EVENTSUB // TWITCH EVENTSUB
if (process.env['TWITCH_RUNNING_' + guild.id]) return console.log(chalk.magenta(`[Twitch] {${guild.name}} Already running...`))
console.log(chalk.magenta(`[Twitch] {${guild.name}} Not running, starting...`))
process.env['TWITCH_RUNNING_' + guild.id] = 'true'
let client_id = process.env.TWITCH_APP_ID as string let client_id = process.env.TWITCH_APP_ID as string
let client_secret = process.env.TWITCH_APP_SECRET as string let client_secret = process.env.TWITCH_APP_SECRET as string
if (!client_id || !client_secret) return console.log(chalk.magenta(`[Twitch] {${guild.name}} App ID or Secret is not defined !`))
let dbData = guildProfile.get('guildTwitch')
if (!dbData?.enabled) return console.log(chalk.magenta(`[Twitch] {${guild.name}} Module is disabled, please activate with \`/database edit guildTwitch.enabled True\` !`))
let twitch = new WebSocket.client().on('connect', async connection => { let twitch = new WebSocket.client().on('connect', async connection => {
console.log(chalk.magenta(`[Twitch] {${guild.name}} EventSub WebSocket Connected !`)) console.log(chalk.magenta(`[Twitch] {${guild.name}} EventSub WebSocket Connected !`))
@@ -102,10 +111,7 @@ export default {
}) })
}).on('connectFailed', error => console.error(chalk.magenta(`[Twitch] {${guild.name}} ` + error))) }).on('connectFailed', error => console.error(chalk.magenta(`[Twitch] {${guild.name}} ` + error)))
let dbData = guildProfile.get('guildTwitch') twitch.connect('wss://eventsub.wss.twitch.tv/ws')
if (!dbData?.enabled) return console.log(chalk.magenta(`[Twitch] {${guild.name}} Module is disabled for "${guild?.name}", please activate with \`/database edit guildTwitch.enabled True\` !`))
else if (!client_id || !client_secret) return console.log(chalk.magenta(`[Twitch] {${guild.name}} App ID or Secret is not defined !`))
else twitch.connect('wss://eventsub.wss.twitch.tv/ws')
}) })
} }
} }

View File

@@ -8,8 +8,8 @@ import 'dotenv/config'
// CUSTOM TYPES // CUSTOM TYPES
interface CConnection extends Connection { interface CConnection extends Connection {
once: (event: string, listener: (...args: unknown[]) => void) => void once: (event: string, listener: (...args: unknown[]) => void) => this
on: (event: string, listener: (...args: unknown[]) => void) => void on: (event: string, listener: (...args: unknown[]) => void) => this
} }
interface Command { interface Command {
name: string name: string

View File

@@ -130,7 +130,7 @@ export async function notification (client_id: string, client_secret: string, ch
.setImage(stream_data.thumbnail_url.replace('{width}', '1920').replace('{height}', '1080')) .setImage(stream_data.thumbnail_url.replace('{width}', '1920').replace('{height}', '1080'))
.setTimestamp() .setTimestamp()
let hidden = hyperlink('démarre un live', 'https://www.youtube.com/watch?v=dQw4w9WgXcQ&pp=ygUJcmljayByb2xs') let hidden = hyperlink('démarre un live', 'https://www.youtube.com/watch?v=dQw4w9WgXcQ&pp=ygUJcmljayByb2xs')
let message = await liveChannel.send({ content: `Hey ! <@${dbData.liveBroadcasterId}> ${hidden} sur **Twitch**, venez !`, embeds: [embed] }) let message = await liveChannel.send({ content: `Hey @everyone ! <@${dbData.liveBroadcasterId}> ${hidden} sur **Twitch**, venez !`, embeds: [embed] })
dbData.liveMessageId = message.id dbData.liveMessageId = message.id
guildProfile.set('guildTwitch', dbData) guildProfile.set('guildTwitch', dbData)
@@ -167,7 +167,7 @@ export async function notification (client_id: string, client_secret: string, ch
.setAuthor({ name: `⚫ C'EST FINI, LE LIVE A DURÉ ${duration_string} ! 📼`, iconURL: user_profile_image_url }) .setAuthor({ name: `⚫ C'EST FINI, LE LIVE A DURÉ ${duration_string} ! 📼`, iconURL: user_profile_image_url })
.setTimestamp() .setTimestamp()
message.edit({ content: `Re !\n<@${dbData.liveBroadcasterId}> a terminé son live sur **Twitch** !`, embeds: [embed] }).catch(console.error) message.edit({ content: `Re @everyone !\n<@${dbData.liveBroadcasterId}> a terminé son live sur **Twitch** !`, embeds: [embed] }).catch(console.error)
clearInterval(liveMessageInterval) clearInterval(liveMessageInterval)
} }
} }