mirror of
https://github.com/ahmadk953/poixpixel-discord-bot.git
synced 2025-06-22 14:14:20 +00:00
feat: add achievement system
Signed-off-by: Ahmad <103906421+ahmadk953@users.noreply.github.com>
This commit is contained in:
parent
830838a6a1
commit
2f5c3499e7
15 changed files with 1966 additions and 37 deletions
|
@ -1,6 +1,7 @@
|
|||
import {
|
||||
boolean,
|
||||
integer,
|
||||
json,
|
||||
jsonb,
|
||||
pgTable,
|
||||
timestamp,
|
||||
|
@ -32,6 +33,7 @@ export interface levelTableTypes {
|
|||
xp: number;
|
||||
level: number;
|
||||
messagesSent: number;
|
||||
reactionCount: number;
|
||||
lastMessageTimestamp?: Date;
|
||||
}
|
||||
|
||||
|
@ -43,6 +45,7 @@ export const levelTable = pgTable('levels', {
|
|||
xp: integer('xp').notNull().default(0),
|
||||
level: integer('level').notNull().default(0),
|
||||
messagesSent: integer('messages_sent').notNull().default(0),
|
||||
reactionCount: integer('reaction_count').notNull().default(0),
|
||||
lastMessageTimestamp: timestamp('last_message_timestamp'),
|
||||
});
|
||||
|
||||
|
@ -143,3 +146,36 @@ export const giveawayTable = pgTable('giveaways', {
|
|||
requireAllCriteria: boolean('require_all_criteria').default(true),
|
||||
bonusEntries: jsonb('bonus_entries').default({}),
|
||||
});
|
||||
|
||||
export type userAchievementsTableTypes = InferSelectModel<
|
||||
typeof userAchievementsTable
|
||||
>;
|
||||
|
||||
export const userAchievementsTable = pgTable('user_achievements', {
|
||||
id: integer().primaryKey().generatedAlwaysAsIdentity(),
|
||||
discordId: varchar('user_id', { length: 50 })
|
||||
.notNull()
|
||||
.references(() => memberTable.discordId),
|
||||
achievementId: integer('achievement_id')
|
||||
.notNull()
|
||||
.references(() => achievementDefinitionsTable.id),
|
||||
earnedAt: timestamp('earned_at'),
|
||||
progress: integer().default(0),
|
||||
});
|
||||
|
||||
export type achievementDefinitionsTableTypes = InferSelectModel<
|
||||
typeof achievementDefinitionsTable
|
||||
>;
|
||||
|
||||
export const achievementDefinitionsTable = pgTable('achievement_definitions', {
|
||||
id: integer().primaryKey().generatedAlwaysAsIdentity(),
|
||||
name: varchar({ length: 100 }).notNull(),
|
||||
description: varchar({ length: 255 }).notNull(),
|
||||
imageUrl: varchar('image_url', { length: 255 }),
|
||||
requirement: json().notNull(),
|
||||
requirementType: varchar('requirement_type', { length: 50 }).notNull(),
|
||||
threshold: integer().notNull(),
|
||||
rewardType: varchar('reward_type', { length: 50 }),
|
||||
rewardValue: varchar('reward_value', { length: 50 }),
|
||||
createdAt: timestamp('created_at').defaultNow().notNull(),
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue