UNPKG

dbd.js-new

Version:

dbd.js-new - Simplifica la programación de un bot de discord, dbd.js-new es una versión de dbd.js con soporte

162 lines (140 loc) 4.38 kB
const djs = require("discord.js"); const embed = require("../../handlers/errors"); const execute = require("../../handlers/MusicPlayer"); const spotify = require("spotify-url-info"); const msp = require("ms-parser"); const pms = require("parse-ms"); const SpotifySearchHandler = require("../../handlers/spotifySearch"); var timeout; module.exports = async (d) => { const code = d.command.code; const search = d.client.ytSearch; const inside = d.unpack(); let [ url, showsuccess = "", time = "1s", deafen = "no", leaveEmpty = "no", useFilter = "yes", error = ":x: Error while making the request.", ] = inside.splits; let list = []; try { time = msp(time).ms; } catch { time = msp("1s").ms; } deafen = deafen === "yes"; useFilter = deafen === "yes"; try { list = await spotify.getTracks(url.addBrackets()); } catch { return embed(d, error); } const server = d.client.servers.get(d.message.guild.id); if (!server) { const vc = d.message.member.voice.channel; if (!vc) return embed(d, error); const connection = vc.join().catch((err) => { console.error("I was unable to Join, Reason: \n" + err); embed(d, "I was unable to join, Error: " + err.message); }); const constructor = { voice: d.message.member.voice.channel, connection: connection, songs: [], loopSong: false, loopQueue: false, volume: null, text: d.message.channel, playing: true, state: "ENDED", vc_legacy: time, deafen: deafen, pruneEnabled: false, leave: leaveEmpty === "yes", execute: async () => { await execute(d, true, error); }, }; constructor.volume = 100; d.client.servers.set(d.message.guild.id, constructor); } const Handler = new SpotifySearchHandler( d.client, d.message.guild.id, list, (video) => { const obj = { title: () => video.title.removeBrackets(), description: () => video.description, duration: () => video.duration.toString().split("seconds").join("Seconds"), thumbnail: () => video.thumbnail, duration_left: (server) => { if (!server) return; const ms = msp(info.duration().split(" ")[0] + "s").ms; const time = Math.floor( ms - (server.connection.dispatcher.streamTime + (d.client.servers.get(d.message.guild.id).seek || 0)) ); const ISO = new Date(time).toISOString().substr(11, 11).split(":"); if (ISO[0] === "00") { ISO.shift(); ISO[1] = Math.floor(parseInt(ISO[1])); if (ISO[1].toString().length === 1) ISO[1] = "0" + ISO[1].toString(); } else { ISO[2] = Math.floor(parseInt(ISO[2])); if (ISO[2].toString().length === 1) ISO[2] = "0" + ISO[2].toString(); } return `${Math.floor(time / 1000)} Seconds (${ISO.join(":")})`; }, current_duration: (server) => { if (!server) return; const ms = server.connection.dispatcher.streamTime + (server.seek || 0); const time = pms(ms); const secs = `0${time.seconds % 60}`.substr(-2); const mins = `0${time.minutes % 60}`.substr(-2); const hours = `0${time.hours % 60}`.substr(-2); const iso = [hours, mins, secs]; if (time.days) iso.unshift(time.days); return `${Math.floor(ms / 1000)} Seconds (${iso.join(":")})`; }, publisher: () => video.author.name, publisher_url: () => video.author.url, userID: () => d.message.author.id, url: () => video.url, stream: "ytdl", prune: false, }; return obj; }, d.client.ytSearch, (videos, song) => { if (useFilter) { return ( videos.find((vid) => song.artists[0].name.split(" ").every((n) => vid.title.includes(n)) ) || videos.find((vid) => song.artists[0].name .split(" ") .every((n) => vid.author.name.includes(n)) ) ); } else { return videos[0]; } }, d, error ); return { code: code.replaceLast(`$playSpotify${inside}`, ""), }; };