1+ // Docs reference
2+ // Interaction: https://discord.js.org/#/docs/main/stable/class/Interaction
3+ // GuildMember: https://discord.js.org/#/docs/main/stable/class/GuildMember
4+ // GuildMembers: https://discord.js.org/#/docs/main/stable/class/GuildMemberManager
15const { SlashCommandBuilder } = require ( '@discordjs/builders' ) ;
6+ const { MessageEmbed } = require ( 'discord.js' ) ;
7+
8+ // EMBED CONSTRUCTOR
9+ const embed = member => new MessageEmbed ( )
10+ . setThumbnail ( member . displayAvatarURL ( ) )
11+ . setDescription ( `**<@${ member . user . id } >**` )
12+ . setFields (
13+ { name : 'Joined Discord:' , value : `**<t:${ format ( member . user . createdTimestamp ) } :R>**` , inline : true } ,
14+ { name : 'Joined Server:' , value : `**<t:${ format ( member . joinedTimestamp ) } :R>**` , inline : true } )
15+ . setFooter ( member . user . tag ) ;
16+
17+ // Format timestamp from 13 digits to 10, Discord uses 10 digit timestamps
18+ const format = timeStamp => Math . ceil ( timeStamp / 1000 ) ;
219
320module . exports = {
421 data : new SlashCommandBuilder ( )
522 . setName ( 'user' )
6- . setDescription ( 'Replies with User info!' ) ,
23+ . setDescription ( 'Replies with User info!' )
24+ . addUserOption ( option =>
25+ option . setName ( 'target_user' )
26+ . setDescription ( 'Get targeted user info' ) ) ,
27+
728 async execute ( interaction ) {
8- await interaction . reply ( `Your tag: ${ interaction . user . tag } \nYour id: ${ interaction . user . id } ` ) ;
29+ // GuildMember
30+ let member = interaction . member ;
31+ // Target member, if provided
32+ const target = interaction . options . getUser ( 'target_user' ) ;
33+ // GuildMember Object for Targeted member
34+ if ( target ) {
35+ // GuildMembers
36+ const members = interaction . guild . members ;
37+ member = await members . fetch ( target ) ;
38+ }
39+
40+ await interaction . reply ( { embeds : [ embed ( member ) ] , ephemeral : true } ) ;
941 } ,
1042} ;
0 commit comments