From 40cc793ed00912d52384d483cbb85e9bf7a7bad6 Mon Sep 17 00:00:00 2001 From: derpystuff <3515180-derpystuff@users.noreply.gitlab.com> Date: Sat, 18 Mar 2023 01:53:31 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=92=B8=F0=9F=92=B8=F0=9F=92=B8=20DISCORD?= =?UTF-8?q?=20IS=20PAYING=20FOR=20THIS=20=F0=9F=92=B8=F0=9F=92=B8?= =?UTF-8?q?=F0=9F=92=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- commands/message/search/youtube.js | 81 +++++++++++++++++++++++++++--- labscore/constants.js | 6 ++- labscore/utils/embed.js | 1 + 3 files changed, 79 insertions(+), 9 deletions(-) diff --git a/commands/message/search/youtube.js b/commands/message/search/youtube.js index 018fff1..a33b1ab 100644 --- a/commands/message/search/youtube.js +++ b/commands/message/search/youtube.js @@ -1,16 +1,48 @@ -const { createEmbed, formatPaginationEmbeds } = require('../../../labscore/utils/embed') -const { link } = require('../../../labscore/utils/markdown') +const { createEmbed, formatPaginationEmbeds, page } = require('../../../labscore/utils/embed') +const { link, iconPill, timestamp } = require('../../../labscore/utils/markdown') const { editOrReply } = require('../../../labscore/utils/message') const { STATICS } = require('../../../labscore/utils/statics') const { paginator } = require('../../../labscore/client'); const { youtube } = require('../../../labscore/api'); +// https://www.html-code-generator.com/javascript/shorten-long-numbers +const intToString = num => { + num = num.toString().replace(/[^0-9.]/g, ''); + if (num < 1000) return num; + + let si = [ + {v: 1E3, s: "K"}, + {v: 1E6, s: "M"}, + {v: 1E9, s: "B"}, + {v: 1E12, s: "T"}, + {v: 1E15, s: "P"}, + {v: 1E18, s: "E"} + ]; + let index; + for (index = si.length - 1; index > 0; index--) { + if (num >= si[index].v) break; + } + return (num / si[index].v).toFixed(2).replace(/\.0+$|(\.[0-9]*[1-9])0+$/, "$1") + si[index].s; +}; + function createYoutubePage(context, result){ - let res = { - "embeds": [ - createEmbed("default", context, { - description: `**${link(result.url, result.name)}**\n${result.description}`, + let res; + let iconHeader; + switch(result.type){ + case 1: //video + iconHeader = [ + iconPill("eye", intToString(parseInt(result.metadata.views))), + iconPill("like", intToString(parseInt(result.metadata.likes))), + iconPill("message", intToString(parseInt(result.metadata.comments))) + ] + res = page(createEmbed("default", context, { + author: { + name: result.channel.name, + url: result.channel.url, + iconUrl: result.channel.icon + }, + description: `**${link(result.url, result.name)}**\n${iconHeader.join(' ​ ​ ​ ​')}\n*Uploaded ${timestamp(result.date, "f")}*\n\n${result.description}`, thumbnail: { url: result.image }, @@ -18,8 +50,41 @@ function createYoutubePage(context, result){ iconUrl: STATICS.youtube, text: `YouTube • ${context.application.name}` } - }) - ] + })) + break; + case 2: // channel + iconHeader = [ + iconPill("videos", intToString(parseInt(result.metadata.videos).toLocaleString('en-US'))), + iconPill("eye", intToString(parseInt(result.metadata.views).toLocaleString('en-US'))) + ] + res = page(createEmbed("default", context, { + description: `**${link(result.url, result.name)}**\n${iconHeader.join(' ​ ​ ​ ​')}\n*Created ${timestamp(result.date, "f")}*\n\n${result.description}`, + thumbnail: { + url: result.icon + }, + footer: { + iconUrl: STATICS.youtube, + text: `YouTube • ${context.application.name}` + } + })) + break; + case 3: // playlist + iconHeader = [ + iconPill("videos", intToString(parseInt(result.metadata.videos).toLocaleString('en-US'))) + ] + res = page(createEmbed("default", context, { + description: `**${link(result.url, result.name)}**\n${iconHeader.join(' ​ ​ ​ ​')} ​ ​ ​ *Created ${timestamp(result.date, "f")}*\n\n${result.description}`, + thumbnail: { + url: result.image + }, + footer: { + iconUrl: STATICS.youtube, + text: `YouTube • ${context.application.name}` + } + })) + break; + default: // wtf? + break; } return res; } diff --git a/labscore/constants.js b/labscore/constants.js index ae30946..3937a3b 100644 --- a/labscore/constants.js +++ b/labscore/constants.js @@ -77,7 +77,11 @@ module.exports.ICONS = Object.freeze({ "robouser": "<:ico_robouser:1002944679744131092>", "lock": "<:ico_lock:1002948236971085924>", "badge_slash": "<:badge_slash:1002954716315140167>", - "flag": "<:ico_flag:1002957495138009251>" + "flag": "<:ico_flag:1002957495138009251>", + "like": "<:ico_like:1086443586700181514>", + "message": "<:ico_message:1086443588784758844>", + "eye": "<:ico_eye:1086443585337036860>", + "videos": "<:ico_videos:1086449271609503764>" }) const GUILD_FEATURE_ICONS = Object.freeze({ diff --git a/labscore/utils/embed.js b/labscore/utils/embed.js index 08087bf..235902c 100644 --- a/labscore/utils/embed.js +++ b/labscore/utils/embed.js @@ -113,6 +113,7 @@ module.exports.formatPaginationEmbeds = function(embeds){ for(const e of embeds){ i += 1; let ne = e; + if(!e) continue; if(e.embed){ ne.embed.footer.text = e.embed.footer.text + ` • Page ${i}/${l}` formatted.push(ne)