Documentation Index
Fetch the complete documentation index at: https://mintlify.com/developer51709/Niko/llms.txt
Use this file to discover all available pages before exploring further.
Niko provides a full suite of community engagement tools — run giveaways with eligibility gates, manage support tickets, collect feedback via polls and suggestions, and subscribe to social media feeds. All community features use Discord’s Components v2 interface for a polished, button-driven experience.
Giveaways
Sourced from src/cogs/giveaway/cog.py. Giveaway management requires Manage Server.
| Command | Description |
|---|
giveaway start | Launch the interactive CV2 giveaway setup wizard. All settings are configured through the panel: prize, duration, winner count, target channel, and join requirements. |
giveaway reroll <message_id> | Re-draw a single new winner from the existing participant pool for an already-ended giveaway. |
giveaway (base) | Display a help card listing available giveaway subcommands. Alias: g. |
Giveaway setup wizard options:
- Prize — The item or reward being given away (displayed prominently on the giveaway embed).
- Duration — Supports human-readable formats such as
30s, 5m, 2h, 1d.
- Winner count — How many winners are drawn when the giveaway ends.
- Join requirements (eligibility gates):
- Minimum Discord account age
- Minimum time in the server
- Required role to enter
- Boosters-only mode
Active giveaways are polled every 15 seconds. When a giveaway expires, winners are selected randomly and announced in the same channel with a jump link to the original giveaway message. If no one entered, a “no participants” message is sent instead.
Giveaway entries are stored in the database in the giveaways and participants tables. Persistent button views are re-registered on bot restart so members can still enter after a reboot.
Tickets
Sourced from src/cogs/tickets/cog.py. Admin commands require Administrator.
| Command | Description |
|---|
ticket setup | Open the ticket system setup panel. Configure the panel title, description, and post it in any channel. |
ticket panel | Post the public ticket creation panel in the current channel. Members click a button to open a private ticket channel. |
ticket category add <name> | Add a named category to the ticket creation panel (e.g. “Support”, “Billing”). |
ticket category remove <name> | Remove a category from the panel. |
ticket category list | List all configured ticket categories. |
ticket support add <role> | Grant a role support-team permissions: they can see and manage all ticket channels. |
ticket support remove <role> | Remove a role from the support team. |
ticket support list | List all configured support roles. |
ticket add <member> | Add a member to the current ticket channel (in-ticket, support team only). |
ticket remove <member> | Remove a member’s access from the current ticket channel. |
ticket rename <name> | Rename the current ticket channel. |
ticket claim | Claim the current ticket as the handling support agent. Prevents other support members from claiming it. |
ticket transcript | Generate a plain-text transcript of the entire ticket conversation and upload it as a .txt file. |
ticket close | Soft-close (lock) the ticket channel. The channel is renamed with a closed- prefix and members can no longer send messages. |
ticket delete [seconds] | Permanently delete the ticket channel after a short countdown (default 5s, maximum 30s). |
The panel configuration (support roles, categories, panel message ID) is persisted in data/ticket_config.json. The ticket panel view is re-registered on bot restart so buttons remain functional across reboots.
Polls
Sourced from src/cogs/social/polls.py.
| Command | Description |
|---|
poll create <question> | <option1> | <option2> … | Create a live multi-option poll. Separate the question and each option with a pipe | character. Minimum 2 options, maximum 10. |
poll end <message_id> | End a poll before it expires. Only the poll creator or a member with Manage Messages can do this. |
poll results <message_id> | Display the final vote tally for any poll (open or closed) by its message ID. |
How voting works:
- Each option gets its own numbered button. Members click a button to cast their vote.
- Clicking the same option again removes the vote (toggle).
- Switching to a different option automatically removes the previous vote.
- Vote counts and percentages update in real-time as members interact.
- Closed polls display the final results with buttons disabled.
Poll data (options, votes, author, timestamps) is stored in data/polls.json. Persistent views are re-registered on restart so existing open polls remain interactive.
Suggestions
Sourced from src/cogs/social/suggestions.py.
| Command | Description |
|---|
suggest submit <text> | Submit a suggestion to the server’s configured suggestions channel. You’ll receive the suggestion ID in a confirmation message. |
suggest channel <channel> | Set the channel where new suggestions are posted (admin, requires Manage Server). |
suggest approve <id> [reason] | Mark a suggestion as approved. The suggestion embed is updated with a verdict and the reason. Requires Manage Server. |
suggest deny <id> [reason] | Mark a suggestion as denied. Updates the embed similarly. Requires Manage Server. |
suggest config | Show the currently configured suggestions channel. Requires Manage Server. |
Each suggestion gets its own embed with 👍 and 👎 vote buttons. Votes toggle (click the same button to remove your vote). Admins can approve or deny suggestions, which updates the embed in-place and locks the vote buttons.
Suggestion data is stored in data/suggestions.json.
Starboard
Sourced from src/cogs/social/starboard.py. All configuration commands require Manage Server.
| Command | Description |
|---|
starboard channel <channel> | Set the channel that acts as the starboard. |
starboard threshold <count> | Set how many reactions a message needs before it’s mirrored (default: 3, maximum: 50). |
starboard emoji <emoji> | Change the trigger emoji (default: ⭐). Any unicode or server emoji is supported. |
starboard ignore <channel> | Prevent messages from a specific channel from ever being starred. |
starboard unignore <channel> | Remove a channel from the ignore list. |
starboard disable | Disable the starboard (sets the channel to none). |
starboard config | Display the current starboard configuration: channel, threshold, trigger emoji, and ignored channels. |
How it works:
When a message receives at least threshold reactions matching the configured emoji, Niko automatically posts a copy of the message (and its first image attachment, if any) into the starboard channel with a jump link. If the reaction count later drops below the threshold, the starboard entry is deleted. If the count increases further, the existing entry is updated.
Reactions on the starboard channel itself are ignored to prevent infinite loops. Starboard mappings are stored in data/starboard.json.
Birthdays
Sourced from src/cogs/social/birthdays.py.
| Command | Description |
|---|
birthday set <MM-DD> | Register your birthday. Accepts formats like 07-23 or 7/23. February 29th (leap day) is supported. |
birthday remove | Remove your registered birthday. |
birthday show [member] | View your own birthday or another member’s birthday. |
birthday today | List all members in this server who have a birthday today (up to 50). |
birthday upcoming | List members with birthdays in the next 30 days, sorted by soonest first. |
birthday channel <channel> | Set the channel where birthday announcements are sent (admin, requires Manage Server). |
birthday role <role> | Set a role that is automatically assigned to a member on their birthday and removed the following day (admin, requires Manage Server). |
birthday config | Show the configured announcement channel and birthday role. |
Automatic announcements:
Niko checks for birthdays on a 15-minute loop. Once per UTC day, after 09:00 UTC, the bot announces each birthday member in the configured channel and assigns the birthday role (if configured). The role is automatically removed the next day when the daily check runs and the date no longer matches.
Birthday data is stored in data/birthdays.json (user birthday dates, per-guild channel and role settings).
Sourced from src/cogs/notifier/cog.py. All commands require Manage Server.
| Command | Description |
|---|
notifier | Open the interactive notifier setup panel. Click platform buttons to add new subscriptions via a modal. Alias: notify. |
notifier list | List all active social media subscriptions for this server. |
notifier test <platform> <query> | Validate that an account exists and fetch its latest post as a preview, without creating a subscription. |
follow <platform> <username> [#channel] | Shortcut to follow an account directly from a command. |
unfollow <platform> <username> | Stop tracking an account and remove the subscription. |
Supported platforms:
| Platform | Input format | Example |
|---|
| YouTube | @handle or channel ID | @MKBHD or UCBcRF18a7Qf58cCRy5xuWwQ |
| Twitter / X | Username | elonmusk |
| TikTok | Username | charlidamelio |
| Bluesky | Handle | bsky.bsky.team |
| Reddit | Subreddit name (no r/) | programming |
How it works:
- When you add a subscription, Niko immediately validates the account exists, seeds the latest post ID, and stores the subscription in the database — the current latest post is not announced (only future new ones are).
- A background task polls every 5 minutes for each subscription. When a new post is detected (new ID differs from the stored
last_post_id), Niko sends a Components v2 notification card to the configured channel.
- YouTube and Reddit notifications include a thumbnail image preview when available.
- A 1-second pause between sends prevents rate-limit bursts when many subscriptions have new content simultaneously.
Subscriptions are stored in the follows table in the database.