v1.2 Update (Don't Merge!!) - #124
Conversation
Also fixes a bug where shards were deleting expired ban rows for guilds they don't own, which left users banned in a server with no db record.
…Int for giveaways
There was a problem hiding this comment.
Pull request overview
This PR appears to bundle the v1.2 update work: rebranding references (Duck Organization → Vantern / questbot), plus multiple new bot features (giveaways, sticky messages, auto-publish) and sharding-aware schedulers to reduce cross-shard duplication.
Changes:
- Rebrand links/package names and update docs/metadata across the repo (README, workflows, Docker, funding, dashboard footer, package names).
- Add new bot features: giveaways (DB + command + button handler + scheduler), sticky messages (DB + listener + command), and announcement auto-publishing (settings + listener + module).
- Refactor schedulers/data fetchers to be shard-aware using a shared sharded polling utility.
Reviewed changes
Copilot reviewed 49 out of 52 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| README.md | Rebrand references/links and update contributing info. |
| packages/database/prisma/schema.prisma | Add Giveaway + Channel models; extend Server relations. |
| package.json | Update workspace scripts to new package scope. |
| Dockerfile | Update pnpm filters/build targets to new package names. |
| biome.json | Allow new global const names for caches/sharding. |
| apps/dash/app/routes/auth/auth.tsx | Update “Powered by” link/text to Vantern. |
| apps/bot/src/util/sharding.ts | Introduce shard helpers + shared sharded poller used by schedulers. |
| apps/bot/src/util/profile.ts | Add shared embed/button builder for profile assets. |
| apps/bot/src/util/getChannel.ts | Add cached-or-fetch channel helper. |
| apps/bot/src/listeners/sticky.ts | Add listener to repost stickies on message create. |
| apps/bot/src/listeners/ready.ts | Start giveaway scheduler; shard-scope mute fetching and purge behavior. |
| apps/bot/src/listeners/messageDeleteBulk.ts | Clean up giveaway rows when messages are bulk-deleted. |
| apps/bot/src/listeners/messageDelete.ts | Clean up giveaway rows when a message is deleted. |
| apps/bot/src/listeners/messageCreate.ts | Add auto-publish support and refine blocked-word handling flow. |
| apps/bot/src/listeners/guildDelete.ts | Purge in-memory caches on guild removal; update feedback link text. |
| apps/bot/src/lib/welcomeModule.ts | Update settings read to new getSettings(guildId) signature. |
| apps/bot/src/lib/sticky.ts | Implement sticky storage/caching and reposting behavior. |
| apps/bot/src/lib/settings.ts | Add settings caching and new autoPublisher setting. |
| apps/bot/src/lib/reminders.ts | Make due-reminder selection shard-aware via raw SQL. |
| apps/bot/src/lib/reminderEvent.ts | Use shared sharded poller for reminders. |
| apps/bot/src/lib/mutes.ts | Make active-mute selection shard-aware via raw SQL. |
| apps/bot/src/lib/logging.ts | Update settings lookup + adjust truncate behavior. |
| apps/bot/src/lib/giveaways.ts | Implement giveaway persistence + concurrency-safe enter/leave + due selection. |
| apps/bot/src/lib/giveawayEvent.ts | Add scheduler + giveaway ending flow (message edit + winner announce). |
| apps/bot/src/lib/bans.ts | Make expired-ban purge shard-aware via raw SQL. |
| apps/bot/src/lib/autoPublisher.ts | Implement announcement-channel auto-crosspost with rate window. |
| apps/bot/src/lib/automod.ts | Cache blocked words and invalidate cache on mutations. |
| apps/bot/src/interaction-handlers/ticket/removeTicketHandler.ts | Update settings lookup signature. |
| apps/bot/src/interaction-handlers/ticket/createTicketHandler.ts | Update settings lookup signature. |
| apps/bot/src/interaction-handlers/giveaway/giveawayHandler.ts | Add button handler for giveaway enter/leave interactions. |
| apps/bot/src/commands/utility/user.ts | Remove old dev-only /user command implementation. |
| apps/bot/src/commands/utility/setup.ts | Update settings lookup signature. |
| apps/bot/src/commands/utility/settings.ts | Add Auto Publisher settings panel + toggle; update settings lookup signature. |
| apps/bot/src/commands/utility/reminder/reminder.ts | Block reminder creation if it contains server-blocked words. |
| apps/bot/src/commands/utility/profile/user.ts | Add expanded /user command (pfp/banner/info) using shared profile utilities. |
| apps/bot/src/commands/utility/profile/pfp.ts | Add dedicated /pfp command using shared profile utilities. |
| apps/bot/src/commands/utility/ping.ts | Add dev-only /ping command including shard info. |
| apps/bot/src/commands/utility/help.ts | Rebrand status/docs links. |
| apps/bot/src/commands/utility/giveaway.ts | Add dev-only /giveaway command (start/end/delete). |
| apps/bot/src/commands/utility/fun/confess.ts | Block confessions containing server-blocked words; update settings lookup signature. |
| apps/bot/src/commands/promotion/invite.ts | Rebrand invite URL. |
| apps/bot/src/commands/promotion/discord.ts | Rebrand discord URL. |
| apps/bot/src/commands/promotion/bot.ts | Rebrand bot invite URL. |
| apps/bot/src/commands/moderation/sticky.ts | Add dev-only /sticky moderation command (set/remove). |
| apps/bot/src/commands/moderation/nick.ts | Block nicknames containing server-blocked words. |
| apps/bot/src/commands/moderation/automod.ts | Update automod command description text. |
| apps/bot/package.json | Rename bot package scope and update metadata. |
| .github/workflows/build.yaml | Update Docker image tag naming in CI. |
| .github/FUNDING.yml | Update GitHub Sponsors org handle. |
| .dockerignore | Add git/turbo/env files to Docker ignore list. |
Comments suppressed due to low confidence (1)
apps/bot/src/lib/sticky.ts:60
removeStickyclears the DB fields and the per-guild cache, but it never clearslastRepostAt/pendingRepostfor that channel. This can retain channel IDs indefinitely even after sticky removal.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| export class GiveawayFullError extends Error { | ||
| public constructor() { | ||
| super("This giveaway is full, it has reached it's maximum number of entries."); | ||
| this.name = 'GiveawayFullError'; | ||
| } | ||
| } |
| # Contributing | ||
|
|
||
| Quest Bot is worked on by Duck Organization but we are opensource! | ||
| Quest Bot is worked on by Vantern but we are opensource! |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 49 out of 52 changed files in this pull request and generated no new comments.
Comments suppressed due to low confidence (2)
README.md:27
- The sentence uses "opensource" as one word and reads a bit ungrammatical. Consider using "open source" (or "open-source") and adding a comma for readability.
Quest Bot is worked on by Vantern but we are opensource!
apps/bot/src/lib/giveaways.ts:94
- The error message uses "it's" ("it is") instead of the possessive "its", which is user-facing and should be corrected.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 49 out of 52 changed files in this pull request and generated no new comments.
Comments suppressed due to low confidence (1)
apps/bot/src/lib/giveaways.ts:94
- Typo/grammar in the error message: "it's" should be "its" (and the sentence reads better without the comma splice).
This will be merged later today when v1.2 gets announced in the Discord Server.