Skip to main content

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.
CommandDescription
giveaway startLaunch 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.
CommandDescription
ticket setupOpen the ticket system setup panel. Configure the panel title, description, and post it in any channel.
ticket panelPost 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 listList 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 listList 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 claimClaim the current ticket as the handling support agent. Prevents other support members from claiming it.
ticket transcriptGenerate a plain-text transcript of the entire ticket conversation and upload it as a .txt file.
ticket closeSoft-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.
CommandDescription
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.
CommandDescription
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 configShow 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.
CommandDescription
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 disableDisable the starboard (sets the channel to none).
starboard configDisplay 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.
CommandDescription
birthday set <MM-DD>Register your birthday. Accepts formats like 07-23 or 7/23. February 29th (leap day) is supported.
birthday removeRemove your registered birthday.
birthday show [member]View your own birthday or another member’s birthday.
birthday todayList all members in this server who have a birthday today (up to 50).
birthday upcomingList 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 configShow 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).

Social Media Notifiers

Sourced from src/cogs/notifier/cog.py. All commands require Manage Server.
CommandDescription
notifierOpen the interactive notifier setup panel. Click platform buttons to add new subscriptions via a modal. Alias: notify.
notifier listList 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:
PlatformInput formatExample
YouTube@handle or channel ID@MKBHD or UCBcRF18a7Qf58cCRy5xuWwQ
Twitter / XUsernameelonmusk
TikTokUsernamecharlidamelio
BlueskyHandlebsky.bsky.team
RedditSubreddit name (no r/)programming
How it works:
  1. 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).
  2. 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.
  3. YouTube and Reddit notifications include a thumbnail image preview when available.
  4. 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.

Build docs developers (and LLMs) love