CheeseBot Documentation
Everything CheeseBot can do, in one place.
๐ Permissions
When inviting CheeseBot to a server, grant the following permissions so all features work correctly.
| Permission | Why it's needed |
|---|---|
| View Channels | /attendance reads voice channel membership to snapshot who's present |
| Send Messages | /attendance posts the attendance embed; /fishlocator posts shareable images |
| Embed Links | Required for Discord to render rich embeds (attendance results, fish locator) |
| Attach Files | /attendance Excel (.xlsx) download; /fishlocator PNG image posts |
| Use Application Commands | Required for all slash commands (/fishlocator, /nextboss, /attendance, /submitfish, /reminder-optout, /reminder-optin) |
| Send Direct Messages | Required for contract renewal reminders โ the bot DMs members directly when their contract is approaching expiration |
Note: Ephemeral-only commands (/nextboss, /submitfish, and the initial /fishlocator response) don't require Send Messages on their own โ but the "Post Image to Channel" button and /attendance do, so Send Messages is required for full functionality.
๐ฃ /fishlocator
Look up fishing spots for one or more fish by name.
Usage
/fishlocator name1: <fish name> [name2: <fish name>] [name3: <fish name>]
Parameters
| Parameter | Required | Description |
|---|---|---|
name1 | Yes | Name of the first fish to look up |
name2 | No | Optional second fish name |
name3 | No | Optional third fish name |
Behavior
- Searches the approved fish spots database using partial (LIKE) matching.
- Also includes pending community proposals with a net vote score of โ4 or better, marked as (pending approval).
- Results are grouped by location, showing fish type/rarity and any notes.
- If the submitter provided a display name, it appears as via Name in both the text results and the image.
- If no exact match is found, fuzzy "did you mean?" suggestions are shown based on known fish names.
- Up to 3 fish can be queried in a single command; up to 10 grouped results per fish are returned.
- Results are sent as ephemeral messages (only visible to you).
Sharing results as images
After results are displayed, a ๐ธ Post Image to Channel button lets you share them publicly. Each fish is posted as its own image message โ up to 3 separate images โ keeping them short and readable. Each image shows up to 3 locations per fish. The first image includes the CheeseBot header; the last includes a timestamp footer.
Example
/fishlocator name1: Coelacanth name2: Mudskipper
โฑ๏ธ /nextboss
Shows the next upcoming NA world boss and a live countdown.
Usage
/nextboss
Behavior
- Fetches boss schedule from a configured Google Calendar iCal feed (results cached for 5 minutes by default).
- Displays the next boss name, its absolute start time, and a relative countdown โ both rendered in each viewer's local timezone via Discord timestamps.
- Results are sent as ephemeral messages (only visible to you).
- Boss timers provided by NA Bosses Discord.
Example output
Next Boss: Garmoth
Starts: Saturday, March 1, 2026 9:00 PM
Time Remaining: in 2 hours
๐ /attendance
Snapshot who is in a voice channel and record attendance for a guild event.
Usage
/attendance
Behavior
- Opens a modal to enter an event name.
- Prompts you to select a voice channel from your server.
- Takes a snapshot of all members currently in that channel.
- Posts an embed to the channel showing the event name, date/time, and attendee list.
- Includes a button to download the attendance record as an Excel (.xlsx) spreadsheet.
- Saves the event and participant list to the database for later review.
Attendance History (web portal)
Guild admins can view a full history of attendance events for their server on the Server Management โ Attendance History tab. Each row shows the event name, voice channel, requester, timestamp, and participant count. Clicking the โผ button expands a row to show the full participant list (display name and username). An Excel download is also available for any past event.
๐ /submitfish
Get a quick link to the fish spot submission page without leaving Discord.
Usage
/submitfish
Behavior
- Sends you an ephemeral button that opens the web portal submission page.
- From there you can fill in the fish name, location, rarity, an optional display name, and attach a screenshot.
- Fish admins will review and approve or reject the proposal.
๐ Contract Renewal Reminders
Automatically DM guild members before their contracts expire. Guild admins connect a Google Sheet; CheeseBot checks it daily and sends reminders without any manual work.
How it works
- A guild admin configures the Google Sheet connection on the Server Management page.
- CheeseBot reads the sheet once per day at 8 AM UTC and checks each member's expiration date.
- Two reminders are sent per contract cycle: an early warning (configurable, 1โ30 days in advance) and an expiration day notice.
- Each reminder is only ever sent once per member per expiration date โ changing the date in the sheet automatically triggers a new reminder.
- Members who do not wish to receive reminders can opt out using
/reminder-optoutin the server. Opted-out members are skipped during the daily check.
Google Sheet format
The sheet must have a header row. Column names are matched case-insensitively by keyword โ exact spelling doesn't matter as long as the keyword appears in the header.
| Column keyword | Example header | Required | Description |
|---|---|---|---|
discord | Discord Handle | Yes | Member's Discord username (e.g. guildmember, without the @) |
expir | Expiration Date | Yes | Any standard date format โ 2026-06-01, June 1, 2026, etc. |
member | Member Name | No | Display name shown in reminder logs; falls back to the Discord handle if absent |
DM message format
Guild admins can customize both reminder messages from the Server Management page. Custom messages support the placeholders {guild_name}, {date}, and {days} (advance warning only). If no custom message is set, the defaults below are used.
| Reminder type | Default message |
|---|---|
| Early warning | โ ๏ธ Heads up โ your contract in [Server] expires on [Date] ([N] days from now). |
| Expiration day | ๐ด Your contract in [Server] expired today ([Date]). Please reach out to an officer to renew. |
Server management tools
The Server Management page provides three inline tools for admins:
| Tool | What it does |
|---|---|
| Test Connection | Verifies the sheet is accessible and detects required columns. Shows row count and column names. |
| Dry Run | Reads all sheet rows and validates each one โ checks that handles exist in the server, dates are parseable, and reports which reminders would fire today vs. already sent vs. broken. Nothing is sent. |
| Send Test Reminder to Myself | Sends a real preview DM to the logged-in admin so they can see exactly what members will receive. Appears in the Recent Reminders Sent log. |
Setup requirements
- The sheet shared with the service account email shown on the server management page (viewer access is enough).
- Members must have DMs from server members enabled in their Discord privacy settings.
๐ /reminder-optout & /reminder-optin
Allow individual members to opt out of receiving contract renewal reminder DMs for the current server.
Usage
/reminder-optout
/reminder-optin
Behavior
- Both commands are guild-only (must be used inside the server, not in DMs).
- Responses are ephemeral โ only the invoking user sees the confirmation.
/reminder-optoutโ records your preference to stop receiving contract renewal reminders for this server only. The bot will skip you on all future daily checks. Your opt-out is shown in the Recent Reminders Sent table on the Server Management page./reminder-optinโ cancels a previous opt-out, re-enrolling you in reminders for this server.- Opt-out preferences are per-server โ opting out in one guild does not affect reminders from other guilds.
- Each reminder DM includes a footer note pointing members to
/reminder-optoutif they want to stop receiving them.
๐ง Web Portal
The web portal at cheesebot.io lets any Discord user submit fish spot discoveries and vote on community proposals. Fish admins have additional tools to review and manage the database.
Server admin features (guild admin login)
| Feature | What you can do |
|---|---|
| Server list | View all servers where you have Manage Server permission and CheeseBot is active. |
| Contract Renewals tab | Configure contract renewal reminders: link a Google Sheet, set the advance-warning days, customize reminder messages, test the connection, run a dry run, and view the reminder log. |
| Attendance History tab | Browse all attendance events recorded in the last 30 days. Expand any row to see the full participant list. Download any event as an Excel spreadsheet. |
Community features (any Discord login)
| Feature | What you can do |
|---|---|
| Fish Spot Submission | Submit a new fish spot with fish name, location, rarity, an optional display name, and a screenshot. Pending proposals from other users are listed below the form with voting buttons. |
| Proposal voting | Cast an โฒ upvote or โผ downvote on any pending proposal. You can switch your vote at any time. Proposals with a net score of โ5 or worse are collapsed by default โ click to expand. Proposals with an acceptable score appear in /fishlocator results as (pending approval). |
Fish spot rarity values
| Rarity | Description |
|---|---|
| Prize | Highest rarity |
| Gold | High rarity |
| Blue | Medium rarity |
| Green | Common |
| White | Most common |
Screenshot upload rules
- Must be a real image file (verified by content, not just filename or extension).
- Maximum size: 10 MB.
- Accepted formats: JPEG, PNG, GIF, WebP, BMP.