Updated User-Info Command

This commit is contained in:
Ahmad 2024-12-15 18:18:09 -05:00
parent 82f354db1c
commit 84738bb752
No known key found for this signature in database
GPG key ID: 8FD8A93530D182BF
5 changed files with 76 additions and 31 deletions

69
src/commands/user-info.ts Normal file
View file

@ -0,0 +1,69 @@
import {
SlashCommandBuilder,
CommandInteraction,
EmbedBuilder,
SlashCommandOptionsOnlyBuilder,
} from 'discord.js';
import { getMember } from '../util/db.js';
interface Command {
data: SlashCommandOptionsOnlyBuilder;
execute: (interaction: CommandInteraction) => Promise<void>;
}
const command: Command = {
data: new SlashCommandBuilder()
.setName('userinfo')
.setDescription('Provides information about the user.')
.addUserOption((option) =>
option
.setName('user')
.setDescription('The user whose information you want to retrieve.')
.setRequired(true)
),
execute: async (interaction) => {
const userOption = interaction.options.get('user');
if (!userOption) {
await interaction.reply('User not found');
return;
}
const user = userOption.user;
if (!user) {
await interaction.reply('User not found');
return;
}
const member = await getMember(user.id);
const [memberData] = member;
const embed = new EmbedBuilder()
.setTitle(`User Information - ${user?.username}`)
.setColor(user.accentColor || 'Default')
.addFields(
{ name: 'Username', value: user.username, inline: false },
{ name: 'User ID', value: user.id, inline: false },
{
name: 'Joined Server',
value:
interaction.guild?.members.cache
.get(user.id)
?.joinedAt?.toLocaleString() || 'Not available',
inline: false,
},
{
name: 'Account Created',
value: user.createdAt.toLocaleString(),
inline: false,
},
{
name: 'Number of Warnings',
value: memberData?.numberOfWarnings.toString() || '0',
},
{
name: 'Number of Bans',
value: memberData?.numberOfBans.toString() || '0',
}
);
await interaction.reply({ embeds: [embed] });
},
};
export default command;

View file

@ -1,30 +0,0 @@
import {
SlashCommandBuilder,
CommandInteraction,
GuildMember,
} from 'discord.js';
interface Command {
data: Omit<SlashCommandBuilder, 'addSubcommand' | 'addSubcommandGroup'>;
execute: (interaction: CommandInteraction) => Promise<void>;
}
const command: Command = {
data: new SlashCommandBuilder()
.setName('user')
.setDescription('Provides information about the user.'),
execute: async (interaction) => {
if (interaction.member instanceof GuildMember) {
await interaction.reply(
`This command was run by ${interaction.user.username}, who joined this server on ${interaction.member.joinedAt}.`
);
}
else {
await interaction.reply(
`This command was run by ${interaction.user.username}.`
);
}
},
};
export default command;

View file

@ -4,4 +4,6 @@ export const memberTable = pgTable('members', {
id: integer().primaryKey().generatedAlwaysAsIdentity(),
discordId: varchar('discord_id').notNull().unique(),
discordUsername: varchar('discord_username').notNull(),
numberOfWarnings: integer('number_warnings').notNull().default(0),
numberOfBans: integer('number_bans').notNull().default(0),
});

View file

@ -3,7 +3,7 @@ import path from 'node:path';
import { Client, Collection, Events, GatewayIntentBits } from 'discord.js';
import { deployCommands } from './util/deployCommand.js';
import { removeMember, setMembers } from './util/db.js';
import { getMember, removeMember, setMembers } from './util/db.js';
const config = JSON.parse(fs.readFileSync('./config.json', 'utf8'));
const { token, guildId } = config;

View file

@ -43,3 +43,7 @@ export async function setMembers(nonBotMembers: any) {
export async function removeMember(discordId: string) {
await db.delete(memberTable).where(eq(memberTable.discordId, discordId));
}
export async function getMember(discordId: string) {
return await db.select().from(memberTable).where(eq(memberTable.discordId, discordId));
}