158 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			158 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const {LogType} = require("loguix")
 | 
						|
const config = require("../utils/Database/Configuration")   
 | 
						|
const wlog = new LogType("MediaBase")
 | 
						|
const { Database } = require("../utils/Database/Database")
 | 
						|
const {__glob} = require("../utils/GlobalVars")
 | 
						|
const { AttachmentBuilder } = require("discord.js")
 | 
						|
const { Song } = require("../player/Song")
 | 
						|
const { getMediaInformationFromUrl } = require("../media/MediaInformation")
 | 
						|
const discordBot = require("./Bot")
 | 
						|
 | 
						|
 | 
						|
var connected = false
 | 
						|
var mediaDB = new Database("media", __glob.MEDIA_DB, [])
 | 
						|
 | 
						|
wlog.step.init("init_db", "Initialisation de la base de données multimédia")
 | 
						|
 | 
						|
if(!config.getMediaGuildId() || !config.getMediaChannelId()) {
 | 
						|
    wlog.warn("La configuration de la base de données multimédia n'est pas définie, vérifiez le fichier de configuration.")
 | 
						|
    wlog.step.error("init_db","Impossible d'initialiser la base de données multimédia, vérifiez le fichier de configuration.")
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
var channel = null
 | 
						|
 | 
						|
discordBot.getClient().on("ready", () => {
 | 
						|
    try {
 | 
						|
        channel = discordBot.getChannel(config.getMediaGuildId(), config.getMediaChannelId())
 | 
						|
    } catch (e) {
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
    if(!channel) {
 | 
						|
    wlog.warn("Le canal multimédia n'existe pas, vérifiez le fichier de configuration.")
 | 
						|
    wlog.step.error("init_db","Impossible d'initialiser la base de données multimédia, vérifiez le fichier de configuration.")
 | 
						|
    }
 | 
						|
 | 
						|
    
 | 
						|
    try {
 | 
						|
        const dateTime = new Date()
 | 
						|
        const date = dateTime.toLocaleDateString('fr-FR', { timeZone: 'Europe/Paris' })
 | 
						|
        const time = dateTime.toLocaleTimeString('fr-FR', { timeZone: 'Europe/Paris' })
 | 
						|
        const message = `[LOGS] La base de données multimédia a été initialisée le ${date} à ${time}`
 | 
						|
        channel.send(message)
 | 
						|
        wlog.log("La base de données multimédia a été initialisée avec succès.")
 | 
						|
        wlog.step.end("init_db")
 | 
						|
        connected = true    
 | 
						|
    } catch (e) {   
 | 
						|
        wlog.error("Impossible d'envoyer un message au canal multimédia, vérifiez le fichier de configuration.")
 | 
						|
        wlog.step.error("init_db","Impossible d'envoyer un message au canal multimédia, vérifiez le fichier de configuration.")
 | 
						|
        connected = false
 | 
						|
    }
 | 
						|
 | 
						|
})
 | 
						|
 | 
						|
 | 
						|
// SEND FILE TO DISCORD AND GET THE URL ID
 | 
						|
 | 
						|
async function postMedia(file, userId) {
 | 
						|
    if(!connected) {
 | 
						|
        wlog.error("La base de données multimédia n'est pas connectée, impossible d'envoyer le fichier.")
 | 
						|
        return null
 | 
						|
    }
 | 
						|
    
 | 
						|
    try {
 | 
						|
        const attachment = new AttachmentBuilder(file.file)
 | 
						|
        attachment.setName(file.name) // Set the name of the file
 | 
						|
        attachment.setDescription("Fichier envoyé par Subsonics Chopin - Raphix")
 | 
						|
        const message = await channel.send({ files: [attachment] })
 | 
						|
        const url = message.attachments.first().url
 | 
						|
        wlog.log(`Fichier envoyé avec succès : ${url}`)
 | 
						|
        // add the file to the database
 | 
						|
        mediaDB.data.push({
 | 
						|
            id: message.id,
 | 
						|
            url: url,
 | 
						|
            name: file.name,
 | 
						|
            size: file.size,
 | 
						|
            createdAt: new Date().toISOString(),
 | 
						|
            userId: userId
 | 
						|
        })
 | 
						|
        mediaDB.save()
 | 
						|
        return url
 | 
						|
    } catch (error) {
 | 
						|
        wlog.error(`Erreur lors de l'envoi du fichier : ${error.message}`)
 | 
						|
        return null
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
async function getAllMedia(userId) {
 | 
						|
    if(!connected) {
 | 
						|
        wlog.error("La base de données multimédia n'est pas connectée, impossible de récupérer les fichiers.")
 | 
						|
        return []
 | 
						|
    }
 | 
						|
    const allSongs = mediaDB.data.filter(m => m.userId === userId)
 | 
						|
    const songs = []
 | 
						|
    for(const songDB of allSongs) {
 | 
						|
        const song = new Song()
 | 
						|
        const information = await getMediaInformationFromUrl(song, songDB.url)
 | 
						|
        if(!information) {
 | 
						|
            mediaDB.data = mediaDB.data.filter(m => m.id !== songDB.id)
 | 
						|
            mediaDB.save()
 | 
						|
            continue
 | 
						|
        }
 | 
						|
        song.type = "attachment"
 | 
						|
        song.author = songDB.author
 | 
						|
        song.createdAt = songDB.createdAt
 | 
						|
        song.author = songDB.userId
 | 
						|
        song.title = songDB.name
 | 
						|
        song.id = songDB.id
 | 
						|
        song.url = songDB.url
 | 
						|
        songs.push(song)
 | 
						|
    }
 | 
						|
    return songs
 | 
						|
}
 | 
						|
 | 
						|
async function getMedia(id) {
 | 
						|
    if(!connected) {
 | 
						|
        wlog.error("La base de données multimédia n'est pas connectée, impossible de récupérer le fichier.")
 | 
						|
        return null
 | 
						|
    }
 | 
						|
    
 | 
						|
    const media = mediaDB.data.find(m => m.id === id)
 | 
						|
    if(!media) {
 | 
						|
        wlog.error(`Aucun média trouvé avec l'ID : ${id}`)
 | 
						|
        return null
 | 
						|
    }
 | 
						|
    
 | 
						|
    try {
 | 
						|
        return media.url
 | 
						|
    } catch (error) {
 | 
						|
        wlog.error(`Erreur lors de la récupération du média : ${error.message}`)
 | 
						|
        return null
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
function deleteMedia(data, userId) {
 | 
						|
    if(!connected) {
 | 
						|
        wlog.error("La base de données multimédia n'est pas connectée, impossible de supprimer le fichier.")
 | 
						|
        return false
 | 
						|
    }
 | 
						|
 | 
						|
    const mediaIndex = mediaDB.data.findIndex(m => m.id === data.id && m.userId === userId)
 | 
						|
    if(mediaIndex === -1) {
 | 
						|
        wlog.error(`Aucun média trouvé avec l'ID : ${data.id} pour l'utilisateur : ${userId}`)
 | 
						|
        return false
 | 
						|
    }
 | 
						|
 | 
						|
    mediaDB.data.splice(mediaIndex, 1)
 | 
						|
    mediaDB.save()
 | 
						|
    return true
 | 
						|
}
 | 
						|
 | 
						|
module.exports = {
 | 
						|
    postMedia,
 | 
						|
    getMedia,
 | 
						|
    deleteMedia,
 | 
						|
    getAllMedia
 | 
						|
} |