From 6d2b8650972cde46953999195f26c29bb5660d36 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Tue, 29 Nov 2022 00:37:42 -0500 Subject: Added duration --- AudioBackend.js | 18 ++++++++++++++++-- commands/status.js | 3 ++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/AudioBackend.js b/AudioBackend.js index fab4f4d..b629882 100644 --- a/AudioBackend.js +++ b/AudioBackend.js @@ -41,6 +41,8 @@ let fileData; let totalTrack = files.length; export let currentTrack; +export let duration; +export let formattedDuration; export let playerState; export let isAudioStatePaused; export let metadataEmpty = false; @@ -147,7 +149,7 @@ export async function playAudio(bot) { isAudioStatePaused = false; try { - const { common } = await parseFile('music/' + audio); + const { common, format } = await parseFile('music/' + audio); metadataEmpty = false; if (common.title && common.artist && common.year && common.album) { audioTitle = common.title; @@ -157,6 +159,16 @@ export async function playAudio(bot) { } else { metadataEmpty = true; } + + duration = format.duration; + const toHHMMSS = (numSecs) => { + const secNum = parseInt(numSecs, 10); + const hours = Math.floor(secNum / 3600).toString().padStart(2, '0'); + const minutes = Math.floor((secNum - (hours * 3600)) / 60).toString().padStart(2, '0'); ; + const seconds = secNum - (hours * 3600) - (minutes * 60).toString().padStart(2, '0'); ; + return `${hours}:${minutes}:${seconds}`; + }; + formattedDuration = toHHMMSS(duration); } catch (error) { console.error(error.message); } @@ -173,13 +185,15 @@ export async function playAudio(bot) { const statusEmbed = new EmbedBuilder(); if (metadataEmpty === true) { statusEmbed.addFields({ name: 'Now Playing', value: audio }); + statusEmbed.addFields({ name: 'Duration', value: formattedDuration }); statusEmbed.setColor('#0066ff'); } else { statusEmbed.setTitle('Now Playing'); statusEmbed.addFields( { name: 'Title', value: audioTitle }, { name: 'Artist', value: audioArtist }, - { name: 'Year', value: `${audioYear}` } + { name: 'Year', value: `${audioYear}` }, + { name: 'Duration', value: formattedDuration } ); statusEmbed.setFooter({ text: `${audioAlbum}` }); statusEmbed.setColor('#0066ff'); diff --git a/commands/status.js b/commands/status.js index b564a88..4e4bebe 100644 --- a/commands/status.js +++ b/commands/status.js @@ -21,7 +21,7 @@ import { EmbedBuilder, SlashCommandBuilder } from 'discord.js'; import { parseFile } from 'music-metadata'; -import { audio, currentTrack, files, playerState, audioTitle, metadataEmpty } from '../AudioBackend.js'; +import { audio, currentTrack, files, playerState, audioTitle, metadataEmpty, formattedDuration } from '../AudioBackend.js'; export default { data: new SlashCommandBuilder() @@ -52,6 +52,7 @@ export default { .setAuthor({ name: `${bot.user.username} Status`, iconURL: bot.user.avatarURL() }) .addFields({ name: 'State', value: playerState }) .addFields({ name: 'Tracks', value: `${audioID}/${files.length}` }) + .addFields({ name: 'Duration', value: formattedDuration }) .setColor('#0066ff'); if (metadataEmpty === true) { -- cgit v1.2.3