2023-02-09 17:04:45 -05:00
import Discord , { GuildMember , SlashCommandBuilder } from 'discord.js' ;
2023-01-27 21:33:55 -05:00
import TClient from 'src/client' ;
2022-11-17 12:58:19 -05:00
2023-02-09 16:45:52 -05:00
function convert ( status? :Discord.ClientPresenceStatus ) {
if ( status ) {
return {
idle : '🟡' ,
dnd : '🔴' ,
online : '🟢'
} [ status ] ;
} else {
return '⚫'
2022-11-17 12:58:19 -05:00
}
}
export default {
async run ( client : TClient , interaction : Discord.ChatInputCommandInteraction < 'cached' > ) {
2023-02-09 17:04:45 -05:00
const member = interaction . options . getMember ( 'member' ) as GuildMember ;
2022-11-17 12:58:19 -05:00
if ( member == null ) {
const user = interaction . options . getUser ( 'member' ) as Discord . User ;
const embed = new client . embed ( )
. setColor ( client . config . embedColor )
. setURL ( ` https://discord.com/users/ ${ user . id } ` )
. setThumbnail ( user . avatarURL ( { size :2048 } ) || user . defaultAvatarURL )
. setTitle ( ` ${ user . bot ? 'Bot' : 'User' } Info: ${ user . tag } ` )
. setDescription ( ` <@ ${ user . id } > \ n \` ${ user . id } \` ` )
. addFields ( { name : '🔹 Account Creation Date' , value : ` <t: ${ Math . round ( user . createdTimestamp / 1000 ) } > \ n<t: ${ Math . round ( user . createdTimestamp / 1000 ) } :R> ` } )
interaction . reply ( { embeds : [ embed ] } )
} else {
await member . user . fetch ( ) ;
2023-02-09 17:04:45 -05:00
const presence = member . presence ? . clientStatus as Discord . ClientPresenceStatusData ;
2022-11-17 12:58:19 -05:00
const embedArray = [ ] ;
2023-02-09 16:45:52 -05:00
let title = 'Member' ;
if ( member . user . bot ) {
title = 'Bot'
} else if ( member . user . id == interaction . guild . ownerId ) {
title = ':crown: Server Owner'
} ;
2023-02-13 02:37:23 -05:00
const embed = new client . embed ( )
2022-11-17 12:58:19 -05:00
. setColor ( member . displayColor || client . config . embedColor )
. setURL ( ` https://discord.com/users/ ${ member . user . id } ` )
. setThumbnail ( member . user . avatarURL ( { size :2048 } ) || member . user . defaultAvatarURL )
. setImage ( member . user . bannerURL ( { size :1024 } ) as string )
2023-02-09 16:45:52 -05:00
. setTitle ( ` ${ title } Info: ${ member . user . tag } ` )
. setDescription ( ` <@ ${ member . user . id } > \ n \` ${ member . user . id } \` ` )
2022-11-17 12:58:19 -05:00
. addFields (
{ name : '🔹 Account Creation Date' , value : ` <t: ${ Math . round ( member . user . createdTimestamp / 1000 ) } > \ n<t: ${ Math . round ( member . user . createdTimestamp / 1000 ) } :R> ` } ,
{ name : '🔹 Server Join Date' , value : ` <t: ${ Math . round ( ( member . joinedTimestamp as number ) / 1000 ) } > \ n<t: ${ Math . round ( ( member . joinedTimestamp as number ) / 1000 ) } :R> ` } ,
{ name : ` 🔹 Roles: ${ member . roles . cache . size - 1 } ` , value : member.roles.cache.size > 1 ? member . roles . cache . filter ( x = > x . id !== interaction . guild . roles . everyone . id ) . sort ( ( a , b ) = > b . position - a . position ) . map ( x = > x ) . join ( member . roles . cache . size > 4 ? ' ' : '\n' ) . slice ( 0 , 1024 ) : 'No roles' }
)
2023-02-13 02:37:23 -05:00
if ( member . premiumSinceTimestamp !== null ) embed . addFields ( { name : '🔹 Server Boosting since' , value : ` <t: ${ Math . round ( member . premiumSinceTimestamp / 1000 ) } > \ n<t: ${ Math . round ( member . premiumSinceTimestamp / 1000 ) } :R> ` , inline : true } )
if ( ! presence ) embed . addFields ( { name : ` 🔹 Status: Unavailable to retrieve ` , value : '\u200b' } )
if ( member . presence ) embed . addFields ( { name : ` 🔹 Status: ${ member . presence . status } ` , value : ` ${ member . presence . status === 'offline' ? '⚫' : ` Desktop: ${ convert ( presence . desktop ) } \ nWeb: ${ convert ( presence . web ) } \ nMobile: ${ convert ( presence . mobile ) } ` } ` , inline : true } )
embedArray . push ( embed )
2022-11-17 12:58:19 -05:00
interaction . reply ( { embeds : embedArray } )
}
} ,
data : new SlashCommandBuilder ( )
. setName ( 'whois' )
. setDescription ( 'View your own or someone else\'s information' )
. addUserOption ( ( opt ) = > opt
. setName ( 'member' )
. setDescription ( 'Member or user to view their information' )
. setRequired ( true ) )
}