pissbot-9000/commands/interaction/slash/info/user.js
2025-04-13 12:15:10 +02:00

104 lines
No EOL
3.6 KiB
JavaScript

const { BADGE_ICONS, PERMISSION_GROUPS } = require('#constants');
const { createEmbed } = require('#utils/embed');
const { acknowledge } = require('#utils/interactions');
const { smallIconPill, highlight, smallPill, icon, timestamp } = require('#utils/markdown');
const { editOrReply } = require('#utils/message');
const { renderBadges, getUserAvatar } = require('#utils/users');
const { ApplicationCommandOptionTypes, UserFlags, InteractionContextTypes, ApplicationIntegrationTypes } = require("detritus-client/lib/constants");
module.exports = {
description: 'Displays information about a user',
name: 'user',
contexts: [
InteractionContextTypes.GUILD,
InteractionContextTypes.PRIVATE_CHANNEL,
InteractionContextTypes.BOT_DM
],
integrationTypes: [
ApplicationIntegrationTypes.USER_INSTALL
],
options: [
{
name: 'user',
description: 'The User.',
type: ApplicationCommandOptionTypes.USER,
required: false
},
{
name: 'incognito',
description: 'Makes the response only visible to you.',
type: ApplicationCommandOptionTypes.BOOLEAN,
required: false,
default: false
}
],
run: async (context, args) => {
await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]);
try{
const { user, member } = args;
let u = user;
let m = member;
if(!args.user){
u = context.user;
m = context.member;
}
let usernameDisplay = u.name
if(u.discriminator && u.discriminator !== "0") usernameDisplay += `#${u.discriminator}`
else usernameDisplay = "@" + usernameDisplay;
let cardContent = "";
// Badge Container
let b = renderBadges(u)
if(b.length >= 1) cardContent += `\n-# ${b.join('')}\n`
cardContent += `\n${smallIconPill("id", "User ID")} ${smallPill(u.id)}`;
if(u.globalName !== null) cardContent += `\n${smallIconPill("user_card", "Display Name")} ${smallPill(u.globalName)}`
if(m && m.nick !== null) cardContent += `\n${smallIconPill("user_card", "Nickname")} ${smallPill(m.nick)}`
if (u.clan && u.clan.tag !== null) cardContent += `\n${smallIconPill("shield", "Clan")} ${smallPill(u.clan.tag)}`
if(u.hasFlag(1<<23)) cardContent += `\n-# Provisional Account`
let userCard = createEmbed("default", context, {
author: {
name: usernameDisplay,
iconUrl: getUserAvatar(u),
url: `https://discord.com/users/${u.id}`
},
description: `${cardContent}`,
fields: [{
name: `${icon("calendar")} Dates`,
value: `**Account Created: **${timestamp(u.createdAt, "f")}`,
inline: false
}]
})
if (u.banner && u.bannerUrl) userCard.image = { url: u.bannerUrl + `?size=4096` }
// Guild Container
if (m) {
userCard.fields[0].value = userCard.fields[0].value + `\n**Joined Server: **${timestamp(m.joinedAt, "f")}`
let guildFields = []
if (m.isOwner) guildFields.push(`${icon("user_king")} **Server Owner**`)
if(context.guild) if (m.roles.length >= 1) guildFields.push(`${icon("user_shield")} **Roles: ** ${m.roles.length}/${context.guild?.roles.length}`)
if (m.premiumSince) guildFields.push(`**Boosting since: ** ${timestamp(m.premiumSince, 'f')}`)
if(guildFields.length >= 1) userCard.fields.push({
name: `${icon("home")} Server`,
value: guildFields.join('\n'),
inline: true
})
}
return editOrReply(context, userCard)
}catch(e){
console.log(e)
return editOrReply(context, createEmbed("error", context, "Unable to display user info."))
}
},
};