Skip to main content

Install and configure the Biterra Discord app

The Biterra Discord app can announce newly open public, organisation-only, and opted-in invite-only CTF events, create native Discord scheduled events, show upcoming public events, and let players register from an announcement when their Discord account is connected to Biterra.

Quick start

  1. Install the Biterra Discord app in a server you manage.
  2. Choose the text or announcement channel that should receive public-event announcements.
  3. Run /events setup channel:#your-events-channel.
  4. Run /events upcoming to confirm the command is available.

For an organisation Discord, connect your Discord account to Biterra and include the organisation:

/events setup channel:#your-events-channel organisation:Your Organisation

Add invite_only:true only when everyone who can see that Discord channel is allowed to know about the organisation's invite-only events.

Before you start

The Biterra app is installed into a Discord server. You need Discord's Manage Server permission in that server to install the app and configure announcements.

The installation requests only the permissions the integration needs:

  • View Channel
  • Send Messages
  • Embed Links
  • Create Events

The app does not need Administrator, Manage Server, or Manage Events. The Create Events permission is applied at server level and lets the app create native scheduled events for CTFs with a future start and end time.

Install the app

  1. Open the Biterra Discord app installation link.
  2. Choose Add to server.
  3. Select the server you manage.
  4. Review the requested permissions, then authorize the installation.
  5. Complete Discord's verification prompt if one appears.

This Discord-provided installation link requests the applications.commands and bot scopes together with the required bot permissions. Installing the app makes the commands available, but it does not select an announcement channel. Run the setup command after installation.

Configure announcements

In the server, run:

/events setup channel:#your-events-channel

The destination can be a text channel or announcement channel. Only members with Manage Server can run setup. Running it again changes the destination channel; it does not create a second subscription. The response is private to the person running the command.

Without an organisation, the server receives public event announcements only. When organisation is supplied, the person running setup must:

  • have connected the same Discord account to Biterra;
  • be an administrator of that Biterra organisation; and
  • enter the exact organisation name or organisation ID.

The server then receives public events plus organisation-only events belonging to that organisation. Invite-only announcements remain off unless invite_only:true is explicitly supplied. Registration and event access are still enforced by Biterra; seeing a Discord announcement does not grant access.

Channel-specific Discord overrides still apply. In the selected channel, confirm the Biterra role or app can:

  • view the channel;
  • send messages; and
  • embed links.

When announcements are sent

Biterra checks for newly opened registrations every 15 minutes. An event is eligible when it:

  • is public, or belongs to the organisation linked to the Discord server;
  • is invite-only only when the server explicitly enabled invite-only announcements;
  • is not deleted, cancelled, or already ended;
  • has an event start time and a scheduled registration opening time;
  • has reached its registration opening time; and
  • has not reached its registration closing time.

The announcement is delivered once per configured Discord server. Depending on where the registration opening falls within the schedule, delivery can take up to approximately 15 minutes.

Each announcement includes the event title, objective, logo and theme styling where available, start and end times, registration status, and canonical event link. It also contains Register and View event actions.

When an eligible event has a future start time and a valid later end time, Biterra also creates a native external Discord scheduled event. The scheduled event uses the event page as its location. A channel announcement can still be delivered if Discord rejects native scheduled-event creation.

Commands

CommandWho can use itResult
/events upcomingEveryonePrivately lists up to five upcoming public Biterra events.
/events setup channel:#channelManage ServerEnables public announcements or changes their channel.
/events setup channel:#channel organisation:NameManage Server and Biterra organisation adminAlso enables organisation-only announcements for that organisation.
/events setup channel:#channel organisation:Name invite_only:trueManage Server and Biterra organisation adminAlso opts the server into invite-only announcements for that organisation.
/events disableManage ServerStops future announcements in that server.

Discord requires a subcommand, so use /events upcoming rather than /events by itself.

Registration from Discord

Announcements contain Register and View event actions. Register identifies the clicking Discord account and looks for the matching connected Biterra account.

  • Connected account: Discord opens a private modal asking for a team name. Submitting it creates an online team and registers the player, then privately confirms the result.
  • Unconnected account: Discord shows a private Connect account link. The player must sign in to Biterra with the same Discord account and then select Register again.
  • Registration needing further action: Discord provides an Open event link so the player can continue on the canonical event page.

Discord registration responses are private and do not expose account or registration details to the channel.

Change permissions or restore access

If the app was installed before all required permissions were configured, open the installation link again, select the same server, and authorize it again. Re-authorizing does not require a new announcement setup unless /events disable was run or the saved channel should change.

Server-level authorization does not override a channel-level denial. If delivery still fails, inspect the selected channel's permission overrides for the Biterra role or app.

Stop or remove the integration

  • To stop new announcements but keep /events upcoming, run /events disable.
  • To resume announcements, run /events setup channel:#your-events-channel.
  • To remove the app completely, remove Biterra from Server Settings → Integrations.

Disabling or removing the app does not delete announcements or scheduled events that were already created. A server moderator can remove those from Discord.

Troubleshooting

Setup says Manage Server is required

Ask a server administrator to run the setup command. Channel moderation permissions alone do not grant Manage Server.

Announcements do not appear

Allow up to 15 minutes after the scheduled registration opening time. Confirm registration is currently open according to its configured opening and closing times and that the event has a start time. For organisation-only or invite-only events, confirm setup is linked to the event's organisation and that invite-only delivery was explicitly enabled where required. Then check that the selected channel allows the app to view it, send messages, and embed links. Run setup again after fixing permissions.

The native Discord event is missing

Confirm the app has Create Events at server level and that the Biterra event has both a future start time and a later end time. The channel announcement can still succeed when Discord rejects scheduled-event creation.

Commands are not visible immediately

Discord global commands can take time to propagate after a new release. Re-authorize the app using the installation link to ensure the applications.commands and bot scopes are present.

Register asks the player to connect an account

The Discord account used to select Register must be connected to the player's Biterra account. Follow the private Connect account link, sign in with that same Discord identity, and try again.