mirror of
https://github.com/ahmadk953/poixpixel-discord-bot.git
synced 2025-04-02 09:44:14 +00:00
Updated User-Info Command
This commit is contained in:
parent
82f354db1c
commit
84738bb752
5 changed files with 76 additions and 31 deletions
69
src/commands/user-info.ts
Normal file
69
src/commands/user-info.ts
Normal 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;
|
|
@ -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;
|
|
|
@ -4,4 +4,6 @@ export const memberTable = pgTable('members', {
|
||||||
id: integer().primaryKey().generatedAlwaysAsIdentity(),
|
id: integer().primaryKey().generatedAlwaysAsIdentity(),
|
||||||
discordId: varchar('discord_id').notNull().unique(),
|
discordId: varchar('discord_id').notNull().unique(),
|
||||||
discordUsername: varchar('discord_username').notNull(),
|
discordUsername: varchar('discord_username').notNull(),
|
||||||
|
numberOfWarnings: integer('number_warnings').notNull().default(0),
|
||||||
|
numberOfBans: integer('number_bans').notNull().default(0),
|
||||||
});
|
});
|
||||||
|
|
|
@ -3,7 +3,7 @@ import path from 'node:path';
|
||||||
import { Client, Collection, Events, GatewayIntentBits } from 'discord.js';
|
import { Client, Collection, Events, GatewayIntentBits } from 'discord.js';
|
||||||
|
|
||||||
import { deployCommands } from './util/deployCommand.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 config = JSON.parse(fs.readFileSync('./config.json', 'utf8'));
|
||||||
const { token, guildId } = config;
|
const { token, guildId } = config;
|
||||||
|
|
|
@ -43,3 +43,7 @@ export async function setMembers(nonBotMembers: any) {
|
||||||
export async function removeMember(discordId: string) {
|
export async function removeMember(discordId: string) {
|
||||||
await db.delete(memberTable).where(eq(memberTable.discordId, discordId));
|
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));
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue