add provisional avatar support

This commit is contained in:
bignutty 2024-12-05 20:15:06 +01:00
parent 2161289223
commit be2bf58b51
7 changed files with 31 additions and 13 deletions

View file

@ -1,5 +1,6 @@
const { createEmbed } = require('#utils/embed'); const { createEmbed } = require('#utils/embed');
const { editOrReply } = require('#utils/message'); const { editOrReply } = require('#utils/message');
const { getUserAvatar } = require('#utils/users');
const { InteractionCallbackTypes, ApplicationCommandTypes } = require('detritus-client/lib/constants'); const { InteractionCallbackTypes, ApplicationCommandTypes } = require('detritus-client/lib/constants');
@ -20,7 +21,7 @@ module.exports = {
return editOrReply(context, createEmbed("default", context, { return editOrReply(context, createEmbed("default", context, {
image: { image: {
url: args.user.avatarUrl + '?size=4096' url: getUserAvatar(args.user)
} }
})) }))
}catch(e){ }catch(e){

View file

@ -3,7 +3,7 @@ const { BADGE_ICONS } = require('#constants');
const { createEmbed } = require('#utils/embed'); const { createEmbed } = require('#utils/embed');
const { smallIconPill, highlight, smallPill, icon, timestamp } = require('#utils/markdown'); const { smallIconPill, highlight, smallPill, icon, timestamp } = require('#utils/markdown');
const { editOrReply } = require('#utils/message'); 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'); const { InteractionCallbackTypes, ApplicationCommandTypes, UserFlags } = require('detritus-client/lib/constants');
@ -47,7 +47,7 @@ module.exports = {
let userCard = createEmbed("default", context, { let userCard = createEmbed("default", context, {
description: `${icon("user")} ${usernameDisplay}`, description: `${icon("user")} ${usernameDisplay}`,
thumbnail: { thumbnail: {
url: u.avatarUrl + `?size=4096` url: getUserAvatar(u)
}, },
fields: [{ fields: [{
name: `${icon("calendar")} Dates`, name: `${icon("calendar")} Dates`,

View file

@ -3,7 +3,7 @@ const { paginator } = require('#client');
const { createEmbed, page } = require("#utils/embed"); const { createEmbed, page } = require("#utils/embed");
const { icon } = require('#utils/markdown'); const { icon } = require('#utils/markdown');
const { editOrReply } = require("#utils/message"); 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 // TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants"); const { Permissions } = require("detritus-client/lib/constants");
@ -37,7 +37,7 @@ module.exports = {
pages.push(page(createEmbed("default", context, { pages.push(page(createEmbed("default", context, {
image: { image: {
url: u.user.avatarUrl + '?size=4096' url: getUserAvatar(u.user)
} }
}))) })))
@ -54,7 +54,7 @@ module.exports = {
} else { } else {
return editOrReply(context, createEmbed("default", context, { return editOrReply(context, createEmbed("default", context, {
image: { image: {
url: u.user.avatarUrl + '?size=4096' url: getUserAvatar(u.user)
} }
})) }))
} }

View file

@ -4,7 +4,7 @@ const { BADGE_ICONS } = require("#constants");
const { createEmbed, page } = require("#utils/embed"); const { createEmbed, page } = require("#utils/embed");
const { icon, highlight, timestamp, smallIconPill, smallPill } = require("#utils/markdown"); const { icon, highlight, timestamp, smallIconPill, smallPill } = require("#utils/markdown");
const { editOrReply } = require("#utils/message"); 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 // TODO: Turn this into a general purpose permissions constant
const { UserFlags, Permissions } = require("detritus-client/lib/constants"); const { UserFlags, Permissions } = require("detritus-client/lib/constants");
@ -58,7 +58,7 @@ module.exports = {
let userCard = createEmbed("default", context, { let userCard = createEmbed("default", context, {
description: `${icon("user")} ${usernameDisplay}`, description: `${icon("user")} ${usernameDisplay}`,
thumbnail: { thumbnail: {
url: u.avatarUrl + `?size=4096` url: getUserAvatar(u)
}, },
fields: [{ fields: [{
name: `${icon("calendar")} Dates`, name: `${icon("calendar")} Dates`,

View file

@ -5,6 +5,7 @@ const { createEmbed } = require("#utils/embed");
const { codeblock, iconPill, stringwrap, link } = require("#utils/markdown"); const { codeblock, iconPill, stringwrap, link } = require("#utils/markdown");
const { editOrReply } = require("#utils/message"); const { editOrReply } = require("#utils/message");
const { STATICS } = require("#utils/statics"); const { STATICS } = require("#utils/statics");
const { getUserAvatar } = require("#utils/users");
// TODO: Turn this into a general purpose permissions constant // TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants"); const { Permissions } = require("detritus-client/lib/constants");
@ -52,7 +53,7 @@ module.exports = {
args.input = msg.content args.input = msg.content
author = { author = {
name: msg.author.username, name: msg.author.username,
iconUrl: msg.author.avatarUrl + '?size=256', iconUrl: getUserAvatar(msg.author, 256),
url: "https://discord.com/users/" + msg.author.id url: "https://discord.com/users/" + msg.author.id
} }
msg = `${codeblock("ansi", [stringwrap(msg.content, 200)])}\n` msg = `${codeblock("ansi", [stringwrap(msg.content, 200)])}\n`

View file

@ -1607,3 +1607,13 @@ module.exports.MESSAGE_BLOCK_REASONS = Object.freeze({
support_article: 10543994968087 support_article: 10543994968087
} }
}); });
// 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"
])

View file

@ -39,7 +39,7 @@ async function getMember(context, query){
const { Constants } = require('detritus-client'); const { Constants } = require('detritus-client');
const { UserFlags } = Constants 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 { link } = require('./markdown');
const BADGE_TYPES = Object.freeze({ const BADGE_TYPES = Object.freeze({
@ -128,13 +128,19 @@ const BADGES = Object.freeze({
function renderBadges(user){ function renderBadges(user){
let badges = []; 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)) 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; 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 = { module.exports = {
getUser, getUser,
getMember, getMember,
renderBadges renderBadges,
getUserAvatar
} }