All posts

How to track member certifications and custom achievements in Discord

CordBase Team

To track certifications and custom achievements in Discord, make one awards table: the member, a certification picked from a list you define, the date and who awarded it. Only trainers can write to it. CordBase, which we build, turns that table into slash commands, so anyone can check who holds what. It records awards; it does not grant roles.

Admins define the certifications themselves, so this works for a clan with its own ranks, a flight-sim or milsim unit with qualification levels, a study group with passed modules, or any community that hands out its own badges. Nothing is preset.

What you'll end up with

  • A /certifications command with add, query, view, update and delete actions.
  • One row per award, so a member with three certifications has three rows.
  • A certification list you edit on the web whenever you invent a new one.
  • Permissions so trainers record awards, admins can remove them, and members can only look.

Step 1: Create the awards table

  1. Sign in at cordbase.gg with Discord, pick your server and add the bot when prompted.
  2. Create a table named "Certifications" (the command becomes /certifications) with the columns below, in this order.
  • Member (user, required): who earned it.
  • Certification (select, required): type your certifications as the options, for example Basic Rescue, Instrument Rating, Squad Leader, Founding Member.
  • Awarded on (date, required): entered as YYYY-MM-DD.
  • Awarded by (user, required): the trainer.
  • Record (text, required): a short label such as "Thrain, Basic Rescue".
  • Notes (text, optional): exam score, attempt number, a link to the evidence.
  • Expires on (date, optional): only for certifications that lapse.

The order is deliberate. query results show only the first four columns, so the useful ones come first. The Record column exists because the row picker for view, update and delete lists rows by the table's first text column, and without a text column the picker falls back to showing raw member IDs. Discord option names come from the labels, lowercased with underscores, for example awarded_on.

CordBase has an Achievement Tracker template, but it holds one "unlocked by" member per row and points per achievement. An awards table is simpler when many people earn the same thing.

Step 2: Let only trainers write

New tables are open to everyone, including delete, so set roles first. In the table's permissions on the web:

  • Trainer role: write (they can add and update).
  • Chief instructor or admin role: admin (also delete).
  • A role every member has: read, so members can look things up.

Once any role is set, members without one of the listed roles cannot use the table at all. Write access covers every row, not only the trainer's own, and Discord Administrators always have full access. See tables and permissions for the details.

Step 3: Record an award

/certifications add member:@Thrain certification:Basic Rescue awarded_on:2026-10-10 awarded_by:@Priya record:Thrain, Basic Rescue notes:Passed practical, second attempt expires_on:2027-10-10

The certification is a dropdown of your options, so spelling stays consistent. view shows who ran the command and when, which is a useful check on the typed "awarded by" field. To fix a mistake or set an expiry later, run /certifications update and pick the row from the list. Add a new certification by editing the table on the web and adding an option; the command updates after you save.

Step 4: Look things up

  • Who holds a certification: /certifications query certification:Basic Rescue
  • Everything for one member: /certifications query member:@Thrain
  • Does this member hold it: /certifications query member:@Thrain certification:Basic Rescue
  • Everything in full, including notes and expiry: /certifications view and pick the row.

Filters combine. Results are newest first, 10 by default and up to 25 with limit, with no paging. Replies are posted in the channel where the command is run, so run trainer commands in a trainer channel if the records are private. For the complete list, the server owner can use the table on the web.

When something else fits better

  • Roles and permissions in Discord. CordBase does not give or remove Discord roles. If a certification should unlock a channel or show on the member list, give the role by hand in Discord or use a role bot such as Carl-bot, and keep CordBase as the record of who awarded what and when.
  • Automatic awards. Nothing here awards from activity or levels. A leveling bot with role rewards fits "reach level 10, get the role".
  • Real courses and exams. If members need lessons, quizzes and marked assessments, use a learning-management tool such as Moodle and record the pass here if you want it visible in Discord.

Limits worth knowing

  • Expiry is only a date. CordBase does not remind anyone or flag lapsed certifications, and dates are stored as typed, not checked. Filters on a date match one exact day, so you cannot ask for everything expiring this month. Scheduled posts (paid plans) post a table summary, not per-row alerts.
  • 25 certifications per list. Discord limits a select list to 25. Past that, split into two awards tables.
  • Plan limits. Free is 2 tables and 100 rows each, and every award is a row. Pro ($8/month) is unlimited tables, 10,000 rows per table, and adds CSV and JSON export. Team ($15/month) is 50,000 rows. See pricing.
  • No leaderboard unless you add a number column such as hours or points.
  • Tables are designed on the web. Members cannot create them from Discord. Deleted rows are purged after 30 days.

Questions people ask

Can CordBase give members a Discord role when I award a certification?

No. It records the award and does nothing in Discord's role system. Give the role by hand, or pair the table with a role bot, and keep CordBase as the record of who awarded what.

Can it remind me when a certification expires?

No. An expiry date is an ordinary date column that you can read with view or the web table. CordBase does not send reminders, and date filters match one exact day. Check the table on a schedule you set.

Can members see their own certifications?

Yes. With read access, a member can run query with their own name as the member option. Read access also lets them look up other members, so if records are private, give access to trainers only.