mirror of
https://github.com/ahmadk953/poixpixel-discord-bot.git
synced 2025-06-22 14:14:20 +00:00
feat: add giveaway system
Signed-off-by: Ahmad <103906421+ahmadk953@users.noreply.github.com>
This commit is contained in:
parent
e898a9238d
commit
d9d5f087e7
23 changed files with 2811 additions and 168 deletions
|
@ -1,11 +1,12 @@
|
|||
import {
|
||||
boolean,
|
||||
integer,
|
||||
jsonb,
|
||||
pgTable,
|
||||
timestamp,
|
||||
varchar,
|
||||
} from 'drizzle-orm/pg-core';
|
||||
import { relations } from 'drizzle-orm';
|
||||
import { InferSelectModel, relations } from 'drizzle-orm';
|
||||
|
||||
export interface memberTableTypes {
|
||||
id?: number;
|
||||
|
@ -30,6 +31,7 @@ export interface levelTableTypes {
|
|||
discordId: string;
|
||||
xp: number;
|
||||
level: number;
|
||||
messagesSent: number;
|
||||
lastMessageTimestamp?: Date;
|
||||
}
|
||||
|
||||
|
@ -40,6 +42,7 @@ export const levelTable = pgTable('levels', {
|
|||
.references(() => memberTable.discordId, { onDelete: 'cascade' }),
|
||||
xp: integer('xp').notNull().default(0),
|
||||
level: integer('level').notNull().default(0),
|
||||
messagesSent: integer('messages_sent').notNull().default(0),
|
||||
lastMessageTimestamp: timestamp('last_message_timestamp'),
|
||||
});
|
||||
|
||||
|
@ -111,3 +114,32 @@ export const factTable = pgTable('facts', {
|
|||
approved: boolean('approved').default(false).notNull(),
|
||||
usedOn: timestamp('used_on'),
|
||||
});
|
||||
|
||||
export type giveawayTableTypes = InferSelectModel<typeof giveawayTable> & {
|
||||
bonusEntries: {
|
||||
roles?: Array<{ id: string; entries: number }>;
|
||||
levels?: Array<{ threshold: number; entries: number }>;
|
||||
messages?: Array<{ threshold: number; entries: number }>;
|
||||
};
|
||||
};
|
||||
|
||||
export const giveawayTable = pgTable('giveaways', {
|
||||
id: integer().primaryKey().generatedAlwaysAsIdentity(),
|
||||
channelId: varchar('channel_id').notNull(),
|
||||
messageId: varchar('message_id').notNull().unique(),
|
||||
createdAt: timestamp('created_at').defaultNow(),
|
||||
endAt: timestamp('end_at').notNull(),
|
||||
prize: varchar('prize').notNull(),
|
||||
winnerCount: integer('winner_count').notNull().default(1),
|
||||
hostId: varchar('host_id')
|
||||
.references(() => memberTable.discordId)
|
||||
.notNull(),
|
||||
status: varchar('status').notNull().default('active'),
|
||||
participants: varchar('participants').array().default([]),
|
||||
winnersIds: varchar('winners_ids').array().default([]),
|
||||
requiredLevel: integer('required_level'),
|
||||
requiredRoleId: varchar('required_role_id'),
|
||||
requiredMessageCount: integer('required_message_count'),
|
||||
requireAllCriteria: boolean('require_all_criteria').default(true),
|
||||
bonusEntries: jsonb('bonus_entries').default({}),
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue