mirror of
https://gitlab.com/bignutty/labscore.git
synced 2025-06-08 06:03:04 -04:00
user-related slash commands
This commit is contained in:
parent
fdff2960a3
commit
6456a68fbb
4 changed files with 213 additions and 0 deletions
97
commands/interaction/slash/info/user.js
Normal file
97
commands/interaction/slash/info/user.js
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
const { Constants } = require('detritus-client');
|
||||||
|
const { InteractionCallbackTypes, ApplicationCommandOptionTypes } = Constants;
|
||||||
|
|
||||||
|
const { createEmbed } = require('../../../../labscore/utils/embed');
|
||||||
|
const { smallIconPill, highlight, smallPill, icon, timestamp } = require('../../../../labscore/utils/markdown');
|
||||||
|
const { renderBadges } = require('../../../../labscore/utils/users');
|
||||||
|
const { BADGE_ICONS } = require('../../../../labscore/constants');
|
||||||
|
const { editOrReply } = require('../../../../labscore/utils/message');
|
||||||
|
const { UserFlags } = require('detritus-client/lib/constants');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
description: 'Displays information about a user',
|
||||||
|
name: 'user',
|
||||||
|
contexts: [
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
integrationTypes: [
|
||||||
|
1
|
||||||
|
],
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
name: 'user',
|
||||||
|
description: 'The User.',
|
||||||
|
type: ApplicationCommandOptionTypes.USER,
|
||||||
|
required: false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
run: async (context, args) => {
|
||||||
|
try{
|
||||||
|
await context.respond({data: {}, type: InteractionCallbackTypes.DEFERRED_CHANNEL_MESSAGE_WITH_SOURCE})
|
||||||
|
|
||||||
|
const { user, member } = args;
|
||||||
|
|
||||||
|
let u = user;
|
||||||
|
let m = member;
|
||||||
|
|
||||||
|
if(!args.user){
|
||||||
|
u = context.user;
|
||||||
|
m = context.member;
|
||||||
|
}
|
||||||
|
|
||||||
|
let botTag = ''
|
||||||
|
if (u.bot) botTag = ""
|
||||||
|
if (u.hasFlag(UserFlags.VERIFIED_BOT)) botTag = ""
|
||||||
|
|
||||||
|
let usernameDisplay = u.username
|
||||||
|
if (u.discriminator && u.discriminator !== "0") usernameDisplay += `#${u.discriminator}`
|
||||||
|
|
||||||
|
usernameDisplay = `**@${usernameDisplay}**${botTag} ${highlight(`(${u.id})`)}`
|
||||||
|
if (m && m.nick !== null) usernameDisplay += `\n${smallIconPill("user_card", "Nickname")} ${smallPill(m.nick)}`
|
||||||
|
|
||||||
|
let userCard = createEmbed("default", context, {
|
||||||
|
description: `${icon("user")} ${usernameDisplay}`,
|
||||||
|
thumbnail: {
|
||||||
|
url: u.avatarUrl + `?size=4096`
|
||||||
|
},
|
||||||
|
fields: [{
|
||||||
|
name: `${icon("calendar")} Dates`,
|
||||||
|
value: `**Account Created: **${timestamp(u.createdAt, "f")}`,
|
||||||
|
inline: false
|
||||||
|
}]
|
||||||
|
})
|
||||||
|
if (u.banner) 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
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Badge Container
|
||||||
|
let b = renderBadges(u)
|
||||||
|
if (u.avatarUrl.endsWith('.gif') || u.banner) { b.push(BADGE_ICONS.nitro) }
|
||||||
|
if (b.length >= 1) {
|
||||||
|
userCard.fields.push({
|
||||||
|
name: `${icon("nitro")} Badges`,
|
||||||
|
value: b.join(''),
|
||||||
|
inline: true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return editOrReply(context, userCard)
|
||||||
|
}catch(e){
|
||||||
|
console.log(e)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
31
commands/interaction/user/avatar.js
Normal file
31
commands/interaction/user/avatar.js
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
const { Constants } = require('detritus-client');
|
||||||
|
const { InteractionCallbackTypes, ApplicationCommandTypes } = Constants;
|
||||||
|
|
||||||
|
const { createEmbed } = require('../../../labscore/utils/embed');
|
||||||
|
const { editOrReply } = require('../../../labscore/utils/message');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
name: 'Get User Avatar',
|
||||||
|
type: ApplicationCommandTypes.USER,
|
||||||
|
contexts: [
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
integrationTypes: [
|
||||||
|
1
|
||||||
|
],
|
||||||
|
run: async (context, args) => {
|
||||||
|
try{
|
||||||
|
await context.respond({ data: {}, type: InteractionCallbackTypes.DEFERRED_CHANNEL_MESSAGE_WITH_SOURCE })
|
||||||
|
|
||||||
|
return editOrReply(context, createEmbed("default", context, {
|
||||||
|
image: {
|
||||||
|
url: args.user.avatarUrl + '?size=4096'
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
}catch(e){
|
||||||
|
console.log(e)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
84
commands/interaction/user/user.js
Normal file
84
commands/interaction/user/user.js
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
const { Constants } = require('detritus-client');
|
||||||
|
const { InteractionCallbackTypes, ApplicationCommandTypes } = Constants;
|
||||||
|
|
||||||
|
const { createEmbed } = require('../../../labscore/utils/embed');
|
||||||
|
const { smallIconPill, highlight, smallPill, icon, timestamp } = require('../../../labscore/utils/markdown');
|
||||||
|
const { renderBadges } = require('../../../labscore/utils/users');
|
||||||
|
const { BADGE_ICONS } = require('../../../labscore/constants');
|
||||||
|
const { editOrReply } = require('../../../labscore/utils/message');
|
||||||
|
const { UserFlags } = require('detritus-client/lib/constants');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
name: 'View User Details',
|
||||||
|
type: ApplicationCommandTypes.USER,
|
||||||
|
contexts: [
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
integrationTypes: [
|
||||||
|
1
|
||||||
|
],
|
||||||
|
run: async (context, args) => {
|
||||||
|
try{
|
||||||
|
await context.respond({ data: {}, type: InteractionCallbackTypes.DEFERRED_CHANNEL_MESSAGE_WITH_SOURCE })
|
||||||
|
|
||||||
|
const { user, member } = args;
|
||||||
|
|
||||||
|
let u = user;
|
||||||
|
let m = member;
|
||||||
|
|
||||||
|
let botTag = ''
|
||||||
|
if (u.bot) botTag = ""
|
||||||
|
if (u.hasFlag(UserFlags.VERIFIED_BOT)) botTag = ""
|
||||||
|
|
||||||
|
let usernameDisplay = u.name
|
||||||
|
if (u.discriminator && u.discriminator !== "0") usernameDisplay += `#${u.discriminator}`
|
||||||
|
|
||||||
|
usernameDisplay = `**@${usernameDisplay}**${botTag} ${highlight(`(${u.id})`)}`
|
||||||
|
if (m && m.nick !== null) usernameDisplay += `\n${smallIconPill("user_card", "Nickname")} ${smallPill(m.nick)}`
|
||||||
|
|
||||||
|
let userCard = createEmbed("default", context, {
|
||||||
|
description: `${icon("user")} ${usernameDisplay}`,
|
||||||
|
thumbnail: {
|
||||||
|
url: u.avatarUrl + `?size=4096`
|
||||||
|
},
|
||||||
|
fields: [{
|
||||||
|
name: `${icon("calendar")} Dates`,
|
||||||
|
value: `**Account Created: **${timestamp(u.createdAt, "f")}`,
|
||||||
|
inline: false
|
||||||
|
}]
|
||||||
|
})
|
||||||
|
if (u.banner) 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
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Badge Container
|
||||||
|
let b = renderBadges(u)
|
||||||
|
if (u.avatarUrl.endsWith('.gif') || u.banner) { b.push(BADGE_ICONS.nitro) }
|
||||||
|
if (b.length >= 1) {
|
||||||
|
userCard.fields.push({
|
||||||
|
name: `${icon("nitro")} Badges`,
|
||||||
|
value: b.join(''),
|
||||||
|
inline: true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return editOrReply(context, userCard)
|
||||||
|
}catch(e){
|
||||||
|
console.log(e)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
|
@ -159,6 +159,7 @@ commandClient.on('commandRunError', async ({context, error}) => {
|
||||||
await commandClient.run()
|
await commandClient.run()
|
||||||
|
|
||||||
await interactionClient.addMultipleIn('../commands/interaction/context');
|
await interactionClient.addMultipleIn('../commands/interaction/context');
|
||||||
|
await interactionClient.addMultipleIn('../commands/interaction/user');
|
||||||
await interactionClient.addMultipleIn('../commands/interaction/slash');
|
await interactionClient.addMultipleIn('../commands/interaction/slash');
|
||||||
await interactionClient.run();
|
await interactionClient.run();
|
||||||
} catch(e){
|
} catch(e){
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue