- Introduced new models in the Prisma schema for giveaways, tickets, self-role panels, starboard configurations, and suggestions, enhancing the bot's functionality. - Implemented job handling for self-role expiration and ticket management, improving user experience. - Updated command localization to support new features in both German and English. - Enhanced the job processing system to include dedicated workers for managing tickets and self-role expirations. - Documented the new features and their setup processes in PHASE-TRACKING.md for clarity on implementation steps.
247 lines
10 KiB
SQL
247 lines
10 KiB
SQL
CREATE TABLE "Giveaway" (
|
|
"id" TEXT NOT NULL,
|
|
"guildId" TEXT NOT NULL,
|
|
"channelId" TEXT NOT NULL,
|
|
"messageId" TEXT,
|
|
"prize" TEXT NOT NULL,
|
|
"winnerCount" INTEGER NOT NULL DEFAULT 1,
|
|
"endsAt" TIMESTAMP(3) NOT NULL,
|
|
"requiredRoleId" TEXT,
|
|
"requiredLevel" INTEGER,
|
|
"requiredMemberDays" INTEGER,
|
|
"paused" BOOLEAN NOT NULL DEFAULT false,
|
|
"endedAt" TIMESTAMP(3),
|
|
"winners" TEXT[] DEFAULT ARRAY[]::TEXT[],
|
|
"entrants" TEXT[] DEFAULT ARRAY[]::TEXT[],
|
|
"hostId" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
CONSTRAINT "Giveaway_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "TicketConfig" (
|
|
"id" TEXT NOT NULL,
|
|
"guildId" TEXT NOT NULL,
|
|
"enabled" BOOLEAN NOT NULL DEFAULT true,
|
|
"mode" TEXT NOT NULL DEFAULT 'CHANNEL',
|
|
"categoryId" TEXT,
|
|
"logChannelId" TEXT,
|
|
"transcriptDm" BOOLEAN NOT NULL DEFAULT false,
|
|
"inactivityHours" INTEGER NOT NULL DEFAULT 72,
|
|
"ratingEnabled" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
CONSTRAINT "TicketConfig_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "TicketCategory" (
|
|
"id" TEXT NOT NULL,
|
|
"guildId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"emoji" TEXT,
|
|
"supportRoleIds" TEXT[] DEFAULT ARRAY[]::TEXT[],
|
|
"formFields" JSONB,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
CONSTRAINT "TicketCategory_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "Ticket" (
|
|
"id" TEXT NOT NULL,
|
|
"guildId" TEXT NOT NULL,
|
|
"categoryId" TEXT,
|
|
"openerId" TEXT NOT NULL,
|
|
"claimedById" TEXT,
|
|
"channelId" TEXT,
|
|
"threadId" TEXT,
|
|
"status" TEXT NOT NULL DEFAULT 'OPEN',
|
|
"priority" TEXT NOT NULL DEFAULT 'NORMAL',
|
|
"subject" TEXT,
|
|
"formAnswers" JSONB,
|
|
"transcriptHtml" TEXT,
|
|
"rating" INTEGER,
|
|
"closedAt" TIMESTAMP(3),
|
|
"lastActivityAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
CONSTRAINT "Ticket_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "SelfRolePanel" (
|
|
"id" TEXT NOT NULL,
|
|
"guildId" TEXT NOT NULL,
|
|
"channelId" TEXT NOT NULL,
|
|
"messageId" TEXT,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"mode" TEXT NOT NULL DEFAULT 'BUTTONS',
|
|
"behavior" TEXT NOT NULL DEFAULT 'NORMAL',
|
|
"roles" JSONB NOT NULL,
|
|
"expiresAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
CONSTRAINT "SelfRolePanel_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "Tag" (
|
|
"id" TEXT NOT NULL,
|
|
"guildId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"content" TEXT,
|
|
"embed" JSONB,
|
|
"responseType" TEXT NOT NULL DEFAULT 'TEXT',
|
|
"triggerWord" TEXT,
|
|
"allowedRoleIds" TEXT[] DEFAULT ARRAY[]::TEXT[],
|
|
"allowedChannelIds" TEXT[] DEFAULT ARRAY[]::TEXT[],
|
|
"createdById" TEXT NOT NULL,
|
|
"useCount" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
CONSTRAINT "Tag_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "StarboardConfig" (
|
|
"id" TEXT NOT NULL,
|
|
"guildId" TEXT NOT NULL,
|
|
"enabled" BOOLEAN NOT NULL DEFAULT false,
|
|
"channelId" TEXT,
|
|
"emoji" TEXT NOT NULL DEFAULT E'⭐',
|
|
"threshold" INTEGER NOT NULL DEFAULT 3,
|
|
"allowSelfStar" BOOLEAN NOT NULL DEFAULT false,
|
|
"ignoredChannelIds" TEXT[] DEFAULT ARRAY[]::TEXT[],
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
CONSTRAINT "StarboardConfig_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "StarboardEntry" (
|
|
"id" TEXT NOT NULL,
|
|
"guildId" TEXT NOT NULL,
|
|
"sourceChannelId" TEXT NOT NULL,
|
|
"sourceMessageId" TEXT NOT NULL,
|
|
"starboardMessageId" TEXT NOT NULL,
|
|
"starCount" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
CONSTRAINT "StarboardEntry_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "SuggestionConfig" (
|
|
"id" TEXT NOT NULL,
|
|
"guildId" TEXT NOT NULL,
|
|
"enabled" BOOLEAN NOT NULL DEFAULT true,
|
|
"openChannelId" TEXT,
|
|
"approvedChannelId" TEXT,
|
|
"deniedChannelId" TEXT,
|
|
"createThread" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
CONSTRAINT "SuggestionConfig_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "Suggestion" (
|
|
"id" TEXT NOT NULL,
|
|
"guildId" TEXT NOT NULL,
|
|
"authorId" TEXT NOT NULL,
|
|
"content" TEXT NOT NULL,
|
|
"status" TEXT NOT NULL DEFAULT 'OPEN',
|
|
"messageId" TEXT,
|
|
"channelId" TEXT,
|
|
"threadId" TEXT,
|
|
"upvotes" INTEGER NOT NULL DEFAULT 0,
|
|
"downvotes" INTEGER NOT NULL DEFAULT 0,
|
|
"voterUpIds" TEXT[] DEFAULT ARRAY[]::TEXT[],
|
|
"voterDownIds" TEXT[] DEFAULT ARRAY[]::TEXT[],
|
|
"staffReason" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
CONSTRAINT "Suggestion_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "BirthdayConfig" (
|
|
"id" TEXT NOT NULL,
|
|
"guildId" TEXT NOT NULL,
|
|
"enabled" BOOLEAN NOT NULL DEFAULT true,
|
|
"channelId" TEXT,
|
|
"roleId" TEXT,
|
|
"message" TEXT,
|
|
"timezone" TEXT NOT NULL DEFAULT 'Europe/Berlin',
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
CONSTRAINT "BirthdayConfig_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "Birthday" (
|
|
"id" TEXT NOT NULL,
|
|
"guildId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"month" INTEGER NOT NULL,
|
|
"day" INTEGER NOT NULL,
|
|
"year" INTEGER,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
CONSTRAINT "Birthday_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "TempVoiceConfig" (
|
|
"id" TEXT NOT NULL,
|
|
"guildId" TEXT NOT NULL,
|
|
"enabled" BOOLEAN NOT NULL DEFAULT false,
|
|
"hubChannelId" TEXT,
|
|
"categoryId" TEXT,
|
|
"defaultName" TEXT NOT NULL DEFAULT '{user}''s Channel',
|
|
"defaultLimit" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
CONSTRAINT "TempVoiceConfig_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "TempVoiceChannel" (
|
|
"id" TEXT NOT NULL,
|
|
"guildId" TEXT NOT NULL,
|
|
"channelId" TEXT NOT NULL,
|
|
"ownerId" TEXT NOT NULL,
|
|
"controlMessageId" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
CONSTRAINT "TempVoiceChannel_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE INDEX "Giveaway_guildId_endsAt_idx" ON "Giveaway"("guildId", "endsAt");
|
|
CREATE UNIQUE INDEX "TicketConfig_guildId_key" ON "TicketConfig"("guildId");
|
|
CREATE UNIQUE INDEX "TicketCategory_guildId_name_key" ON "TicketCategory"("guildId", "name");
|
|
CREATE INDEX "TicketCategory_guildId_idx" ON "TicketCategory"("guildId");
|
|
CREATE INDEX "Ticket_guildId_status_idx" ON "Ticket"("guildId", "status");
|
|
CREATE INDEX "Ticket_channelId_idx" ON "Ticket"("channelId");
|
|
CREATE INDEX "SelfRolePanel_guildId_idx" ON "SelfRolePanel"("guildId");
|
|
CREATE UNIQUE INDEX "Tag_guildId_name_key" ON "Tag"("guildId", "name");
|
|
CREATE INDEX "Tag_guildId_idx" ON "Tag"("guildId");
|
|
CREATE UNIQUE INDEX "StarboardConfig_guildId_key" ON "StarboardConfig"("guildId");
|
|
CREATE UNIQUE INDEX "StarboardEntry_guildId_sourceMessageId_key" ON "StarboardEntry"("guildId", "sourceMessageId");
|
|
CREATE INDEX "StarboardEntry_guildId_idx" ON "StarboardEntry"("guildId");
|
|
CREATE UNIQUE INDEX "SuggestionConfig_guildId_key" ON "SuggestionConfig"("guildId");
|
|
CREATE INDEX "Suggestion_guildId_status_idx" ON "Suggestion"("guildId", "status");
|
|
CREATE UNIQUE INDEX "BirthdayConfig_guildId_key" ON "BirthdayConfig"("guildId");
|
|
CREATE UNIQUE INDEX "Birthday_guildId_userId_key" ON "Birthday"("guildId", "userId");
|
|
CREATE INDEX "Birthday_guildId_month_day_idx" ON "Birthday"("guildId", "month", "day");
|
|
CREATE UNIQUE INDEX "TempVoiceConfig_guildId_key" ON "TempVoiceConfig"("guildId");
|
|
CREATE UNIQUE INDEX "TempVoiceChannel_channelId_key" ON "TempVoiceChannel"("channelId");
|
|
CREATE INDEX "TempVoiceChannel_guildId_ownerId_idx" ON "TempVoiceChannel"("guildId", "ownerId");
|
|
|
|
ALTER TABLE "Giveaway" ADD CONSTRAINT "Giveaway_guildId_fkey" FOREIGN KEY ("guildId") REFERENCES "Guild"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "TicketConfig" ADD CONSTRAINT "TicketConfig_guildId_fkey" FOREIGN KEY ("guildId") REFERENCES "Guild"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "TicketCategory" ADD CONSTRAINT "TicketCategory_guildId_fkey" FOREIGN KEY ("guildId") REFERENCES "Guild"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "Ticket" ADD CONSTRAINT "Ticket_guildId_fkey" FOREIGN KEY ("guildId") REFERENCES "Guild"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "Ticket" ADD CONSTRAINT "Ticket_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "TicketCategory"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
ALTER TABLE "SelfRolePanel" ADD CONSTRAINT "SelfRolePanel_guildId_fkey" FOREIGN KEY ("guildId") REFERENCES "Guild"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "Tag" ADD CONSTRAINT "Tag_guildId_fkey" FOREIGN KEY ("guildId") REFERENCES "Guild"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "StarboardConfig" ADD CONSTRAINT "StarboardConfig_guildId_fkey" FOREIGN KEY ("guildId") REFERENCES "Guild"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "StarboardEntry" ADD CONSTRAINT "StarboardEntry_guildId_fkey" FOREIGN KEY ("guildId") REFERENCES "Guild"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "SuggestionConfig" ADD CONSTRAINT "SuggestionConfig_guildId_fkey" FOREIGN KEY ("guildId") REFERENCES "Guild"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "Suggestion" ADD CONSTRAINT "Suggestion_guildId_fkey" FOREIGN KEY ("guildId") REFERENCES "Guild"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "BirthdayConfig" ADD CONSTRAINT "BirthdayConfig_guildId_fkey" FOREIGN KEY ("guildId") REFERENCES "Guild"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "Birthday" ADD CONSTRAINT "Birthday_guildId_fkey" FOREIGN KEY ("guildId") REFERENCES "Guild"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "TempVoiceConfig" ADD CONSTRAINT "TempVoiceConfig_guildId_fkey" FOREIGN KEY ("guildId") REFERENCES "Guild"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "TempVoiceChannel" ADD CONSTRAINT "TempVoiceChannel_guildId_fkey" FOREIGN KEY ("guildId") REFERENCES "Guild"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|