Discord scheduled events

Discord has its own events: the Events tab at the top of the channel list, with a countdown, an Interested bell, and a banner in the voice channel when it starts. FlaviBot can create one of those for each of your events, so the server header and the RSVP panel say the same thing.

The panel is the real surface: sign-ups, the waitlist, reminders and the roster all live there. The Discord event is a mirror of it. If the mirror cannot be created, the event still works.

When one is created

Each event has a Create a Discord event switch in its form. Its default comes from two places:

  • The module setting Create Discord events by default, on by default.
  • The kind: Meeting, Session, Milestone, Deadline and Off start with the switch off, because a staff meeting or a day off has no business in the public Events tab. Event and Stream start with it on.

Flip the switch on an existing event and the native copy is created or removed accordingly.

Discord also needs a place. An event happening in a voice or stage channel is created as a voice event (or a stage event, with the Start Stage button, when the channel is a stage). An event with a location and no channel is created as an external event, which Discord requires an end time for; when you gave none, FlaviBot declares two hours. An event with neither a channel nor a location cannot be mirrored, and the switch is greyed out with that explanation until you add one.

The permission it needs

For a voice or stage event the bot also needs View Channel and Connect on that channel. FlaviBot checks all of this before calling Discord, so a missing permission is reported at once rather than as a refusal from Discord.

What is mirrored

Title, description, start, end, and the place. Editing any of them on the event pushes the change to the native copy; cancelling the event deletes it.

What is not mirrored: the cover image, the capacity, the sign-up slots, the hosts, the RSVPs, and the reminders. Discord's Interested count is Discord's own and has nothing to do with the panel, and Discord's own notifications are not FlaviBot's reminders. Members who want a reminder from FlaviBot press Going on the panel; members who want Discord's own notification press the bell. Both are fine.

When the sync fails

The event's detail panel shows the native event as a link when it exists, and the reason when it does not. The reason is stored on the event, so it survives a page reload and can be read by another admin.

ReasonWhat happenedFix
Missing permissionsThe bot lacks Create Events, or View Channel / Connect on the voice channelRe-invite the bot, or grant the permission to its role
No placeThe event has neither a voice channel nor a locationAdd one of the two
Limit reachedThe server already has as many scheduled events as Discord allowsLet some finish, or cancel old ones in the Events tab
Unsupported repeat ruleThe series' rule has no equivalent on DiscordNothing to fix: each occurrence is mirrored on its own instead
RefusedDiscord rejected the request for another reasonTry editing the event; if it persists, ask on the support server

A failure never blocks the event. Fix the cause and edit the event (any save retries the sync), and the reason is cleared once the native copy exists.

Recurring series

Discord can repeat a scheduled event on its own, but only for a small set of rules. When your series uses one of them, FlaviBot creates one native recurring event for the whole series, and the individual occurrences do not get their own. Otherwise, each posted occurrence gets a native event of its own, as a plain event would.

RuleMirrored as one native recurring event
Every dayYes
Every day on Monday to Friday, Tuesday to Saturday, Sunday to Thursday, Friday and Saturday, Saturday and Sunday, or Sunday and MondayYes
Every week or every two weeks, on one weekdayYes
Every month on the Nth weekday (first Tuesday, last Friday)Yes
Every year on a month and a dayYes
Every 3+ weeks, several weekdays a week, every month on day N, custom intervalsNo, one native event per occurrence

Two things Discord's version cannot express:

  • An end. A series that ends on a date or after N occurrences is mirrored as an open-ended native event; FlaviBot deletes it itself when the series ends.
  • A skipped date. Cancelling one occurrence of a series takes down that occurrence's own native event when it has one, but a series mirrored as a single recurring event still shows that date in the Events tab. Post a message, or cancel the occurrence's own native copy by hand if you need the tab to match.

One bot per server

A Discord scheduled event belongs to the application that created it. No other bot, not even another FlaviBot custom bot, can edit or delete it. That is why the module has a primary bot setting: only that bot creates and maintains the native copies. Switching the primary bot deletes every native event the old bot made and recreates them under the new one, which takes a moment and needs the old bot to still be in the server to remove its copies.

Next: teams and finding a time.

Written on