From be2bf58b5175a3e25459749a61426f65b0faf659 Mon Sep 17 00:00:00 2001 From: bignutty <3515180-bignutty@users.noreply.gitlab.com> Date: Thu, 5 Dec 2024 20:15:06 +0100 Subject: [PATCH] add provisional avatar support --- commands/interaction/user/avatar.js | 3 ++- commands/interaction/user/user.js | 4 ++-- commands/message/info/avatar.js | 6 +++--- commands/message/info/user.js | 4 ++-- commands/message/mod/perspective.js | 3 ++- labscore/constants.js | 12 +++++++++++- labscore/utils/users.js | 12 +++++++++--- 7 files changed, 31 insertions(+), 13 deletions(-) diff --git a/commands/interaction/user/avatar.js b/commands/interaction/user/avatar.js index e144433..8b1d4f8 100644 --- a/commands/interaction/user/avatar.js +++ b/commands/interaction/user/avatar.js @@ -1,5 +1,6 @@ const { createEmbed } = require('#utils/embed'); const { editOrReply } = require('#utils/message'); +const { getUserAvatar } = require('#utils/users'); const { InteractionCallbackTypes, ApplicationCommandTypes } = require('detritus-client/lib/constants'); @@ -20,7 +21,7 @@ module.exports = { return editOrReply(context, createEmbed("default", context, { image: { - url: args.user.avatarUrl + '?size=4096' + url: getUserAvatar(args.user) } })) }catch(e){ diff --git a/commands/interaction/user/user.js b/commands/interaction/user/user.js index 1b376a1..d1edaa3 100644 --- a/commands/interaction/user/user.js +++ b/commands/interaction/user/user.js @@ -3,7 +3,7 @@ const { BADGE_ICONS } = require('#constants'); const { createEmbed } = require('#utils/embed'); const { smallIconPill, highlight, smallPill, icon, timestamp } = require('#utils/markdown'); const { editOrReply } = require('#utils/message'); -const { renderBadges } = require('#utils/users'); +const { renderBadges, getUserAvatar } = require('#utils/users'); const { InteractionCallbackTypes, ApplicationCommandTypes, UserFlags } = require('detritus-client/lib/constants'); @@ -47,7 +47,7 @@ module.exports = { let userCard = createEmbed("default", context, { description: `${icon("user")} ${usernameDisplay}`, thumbnail: { - url: u.avatarUrl + `?size=4096` + url: getUserAvatar(u) }, fields: [{ name: `${icon("calendar")} Dates`, diff --git a/commands/message/info/avatar.js b/commands/message/info/avatar.js index 12f9353..dfe664c 100644 --- a/commands/message/info/avatar.js +++ b/commands/message/info/avatar.js @@ -3,7 +3,7 @@ const { paginator } = require('#client'); const { createEmbed, page } = require("#utils/embed"); const { icon } = require('#utils/markdown'); const { editOrReply } = require("#utils/message"); -const { getUser } = require("#utils/users"); +const { getUser, getUserAvatar } = require("#utils/users"); // TODO: Turn this into a general purpose permissions constant const { Permissions } = require("detritus-client/lib/constants"); @@ -37,7 +37,7 @@ module.exports = { pages.push(page(createEmbed("default", context, { image: { - url: u.user.avatarUrl + '?size=4096' + url: getUserAvatar(u.user) } }))) @@ -54,7 +54,7 @@ module.exports = { } else { return editOrReply(context, createEmbed("default", context, { image: { - url: u.user.avatarUrl + '?size=4096' + url: getUserAvatar(u.user) } })) } diff --git a/commands/message/info/user.js b/commands/message/info/user.js index effe1f9..3a944e7 100644 --- a/commands/message/info/user.js +++ b/commands/message/info/user.js @@ -4,7 +4,7 @@ const { BADGE_ICONS } = require("#constants"); const { createEmbed, page } = require("#utils/embed"); const { icon, highlight, timestamp, smallIconPill, smallPill } = require("#utils/markdown"); const { editOrReply } = require("#utils/message"); -const { getUser, renderBadges } = require("#utils/users"); +const { getUser, renderBadges, getUserAvatar } = require("#utils/users"); // TODO: Turn this into a general purpose permissions constant const { UserFlags, Permissions } = require("detritus-client/lib/constants"); @@ -58,7 +58,7 @@ module.exports = { let userCard = createEmbed("default", context, { description: `${icon("user")} ${usernameDisplay}`, thumbnail: { - url: u.avatarUrl + `?size=4096` + url: getUserAvatar(u) }, fields: [{ name: `${icon("calendar")} Dates`, diff --git a/commands/message/mod/perspective.js b/commands/message/mod/perspective.js index a810349..1357de1 100644 --- a/commands/message/mod/perspective.js +++ b/commands/message/mod/perspective.js @@ -5,6 +5,7 @@ const { createEmbed } = require("#utils/embed"); const { codeblock, iconPill, stringwrap, link } = require("#utils/markdown"); const { editOrReply } = require("#utils/message"); const { STATICS } = require("#utils/statics"); +const { getUserAvatar } = require("#utils/users"); // TODO: Turn this into a general purpose permissions constant const { Permissions } = require("detritus-client/lib/constants"); @@ -52,7 +53,7 @@ module.exports = { args.input = msg.content author = { name: msg.author.username, - iconUrl: msg.author.avatarUrl + '?size=256', + iconUrl: getUserAvatar(msg.author, 256), url: "https://discord.com/users/" + msg.author.id } msg = `${codeblock("ansi", [stringwrap(msg.content, 200)])}\n` diff --git a/labscore/constants.js b/labscore/constants.js index 2d9cbd7..7d0946a 100644 --- a/labscore/constants.js +++ b/labscore/constants.js @@ -1606,4 +1606,14 @@ module.exports.MESSAGE_BLOCK_REASONS = Object.freeze({ message: "the channel's permission setup", support_article: 10543994968087 } -}); \ No newline at end of file +}); + +// Used by provisional accounts for the new partner SDK +module.exports.PROVISIONAL_ACCOUNT_AVATARS = Object.freeze([ + "https://discord.com/assets/cc4d3c817f9a1b57a4f2.png", + "https://discord.com/assets/bea3e879099c0aacba64.png", + "https://discord.com/assets/d569b695280979e11ca3.png", + "https://discord.com/assets/0afec6e15d7c376edb17.png", + "https://discord.com/assets/06c71afa509013e91173.png", + "https://discord.com/assets/15a9b7ce7525b2fbe72f.png" +]) \ No newline at end of file diff --git a/labscore/utils/users.js b/labscore/utils/users.js index 9b5aaab..b74f9ea 100644 --- a/labscore/utils/users.js +++ b/labscore/utils/users.js @@ -39,7 +39,7 @@ async function getMember(context, query){ const { Constants } = require('detritus-client'); const { UserFlags } = Constants -const { BADGE_ICONS, HIDDEN_MASKED_LINK_CHARACTER } = require('../constants'); +const { BADGE_ICONS, HIDDEN_MASKED_LINK_CHARACTER, PROVISIONAL_ACCOUNT_AVATARS } = require('../constants'); const { link } = require('./markdown'); const BADGE_TYPES = Object.freeze({ @@ -128,13 +128,19 @@ const BADGES = Object.freeze({ function renderBadges(user){ let badges = []; for(const flag of Object.keys(BADGES)) if(user.hasFlag(BADGES[flag])) badges.push(link(BADGE_TYPES[flag].link, BADGE_TYPES[flag].icon + HIDDEN_MASKED_LINK_CHARACTER, BADGE_TYPES[flag].description)) - if(!user.bot && (user.avatarUrl.endsWith('.gif') || user.banner)) { badges.push(link(BADGE_TYPES["nitro"].link, BADGE_TYPES["nitro"].icon + HIDDEN_MASKED_LINK_CHARACTER, BADGE_TYPES["nitro"].description)) } + if(!user.bot && (getUserAvatar(user).endsWith('.gif') || user.banner)) { badges.push(link(BADGE_TYPES["nitro"].link, BADGE_TYPES["nitro"].icon + HIDDEN_MASKED_LINK_CHARACTER, BADGE_TYPES["nitro"].description)) } return badges; } +function getUserAvatar(user, size = 4096){ + if(user.hasFlag(1<<23)) return PROVISIONAL_ACCOUNT_AVATARS[(BigInt(user.id) >> 22n) % 6n]; + return user.avatarUrl + "?size=" + parseInt(size) +} + module.exports = { getUser, getMember, - renderBadges + renderBadges, + getUserAvatar } \ No newline at end of file