The calendar
The Calendar tab of FlaviBot's Events page is where events are made and read. It works the way a calendar app does: four views of the same events, a toolbar that moves through time, a sidebar with a mini month and the filters, a click on an empty slot to create something there, a click on an event to open it, and events you can drag to another time.
The four views
| View | What it shows | Good for |
|---|---|---|
| Day | One day as an hour grid, 00:00 to 24:00 | A busy day with overlapping things |
| Week | Seven days side by side, same grid | Planning the week, spotting gaps |
| Month | The classic grid, up to three chips per day and a +N for the rest | The overview |
| Agenda | A list grouped by day, the next 60 days, Load more at the bottom, and a Show past toggle | Reading, on a phone |
The day and week views share one grid: an all-day row on top, hour rows below, one column per day. Events that overlap are laid side by side rather than stacked, and a red now line crosses the grid at the current time in the timezone you are viewing in. The grid opens scrolled to 08:00.
The month view stretches all-day and multi-day events across the days they cover. The week starts on the day set in the module's Settings, or on the day you chose in your own profile preferences, which win for you.
The calendar fills the height of the window: the day header and the hour gutter stay put while the grid scrolls underneath them, the month and agenda views scroll inside their own frame, and the page itself never scrolls.
Moving around
The toolbar is one row: previous, Today and next, a label naming the range on screen, the four view buttons, and Create. Everything also answers the keyboard, as long as you are not typing in a field:
| Key | Does |
|---|---|
T | Today |
D, W, M, A | Day, week, month, agenda |
←, → | Previous, next |
N | New event |
The view, the date, the timezone and the team filter are kept in the page address, so a link you copy opens the same week, in the same zone, for the person you send it to.
The sidebar
On a wide screen a column on the left of the calendar holds everything that is not the grid itself. On a narrow one the same column sits behind a Filters button in the toolbar and slides in from the side.
- The mini month browses on its own; days with events carry a dot, and clicking one jumps the current view to that day.
- Filters: the timezone you read in (below), the Team filter with a chip to clear it, and the kind chips, which toggle kinds on and off so a calendar full of meetings can be reduced to the streams in one click.
- The Add this server's events to my Google Calendar switch, when your Google account is connected; see Google Calendar and ICS.
- Next up: the next five upcoming events, each with its kind, a ↻ on an occurrence of a series and a slot summary when it has sign-up slots. Click one to open it.
Past events are not in the sidebar: switch the Agenda view to Show past to read them.
The timezone you read in
Every event has its own timezone, the one its organiser typed the time in. The calendar, though, is displayed in one zone at a time, chosen in the sidebar's filters:
- Server zone, the timezone set on your server's Configuration page. This is the default.
- My zone, the timezone from your profile preferences, or your browser's when you set none.
- Any other zone from the list, for when you are planning for members elsewhere.
Hovering an event shows its time in the zone on screen and, when they differ, in the event's own zone too. Members reading the panel in Discord never see any of this: Discord renders the start in each reader's own local time.
What a chip tells you
- The colour is the event's kind, or the colour override set on it.
- A struck-through, muted chip is cancelled; a plain muted one has ended; a chip with a pulsing dot is live now.
- A dashed chip marked ↻ is a future occurrence of a series that has no panel yet. It is real, it will be posted when its turn comes, but it cannot be edited on its own until then. See recurring events.
The calendar loads the window on screen plus a margin. When a range holds more events than can be shown at once, a banner says the list was cut; narrow the range or filter by team to see the rest.
Moving an event by dragging
Rescheduling does not need the form. In the day and week views, drag
a chip to another hour or another day to move it; the time snaps to a
quarter of an hour, a ghost of the chip follows the pointer, and Escape
drops it back where it was. Drag the bottom edge of a chip to change its
duration. In the month view, drag a chip to another day: it keeps its
time and changes its date. On a touch screen, press and hold the chip to
pick it up.
The new time is read in the zone you are viewing in and saved on the event in its own timezone, so a raid dragged to 21:00 on a calendar shown in Paris time starts at 21:00 Paris time, whatever zone the event was created in. The calendar shows the move at once; if the save fails, the chip goes back and an error says why.
Three kinds of chip cannot be dragged, and say so when you try: a dashed occurrence that has no panel yet, a cancelled event, and an ended one. Dropping an occurrence of a series asks whether to move this occurrence only or the whole series, the same choice the form gives; see recurring events.
Creating an event
Press Create, hit N, click an empty slot in the day or week grid (that
pre-fills the start and a 60-minute duration), or drag across a few hours to
pre-fill the exact range. Clicking a day in the month view does the same for
that day.
The form:
| Field | Notes |
|---|---|
| Title | Up to 100 characters. It is the title of the panel |
| Kind | Sets the colour and a few defaults; see the overview |
| All-day | Hides the time inputs and counts the duration in days |
| Starts at and Timezone | The time is read in that zone. It defaults to your server's zone, and daylight saving is handled |
| Duration | In minutes, with an ends at readout next to it. Empty means no declared end |
| Repeat | Does not repeat, daily, weekly, monthly, yearly, or a custom rule |
| Post the RSVP panel in | Where members sign up. Not needed for an Off entry |
| Voice channel | Where it happens, if it is a voice or stage event |
| Location | Free text, for anything that is not a voice channel |
| Capacity | Optional. Past it, sign-ups go to the waitlist |
| Sign-up slots | Optional. Named groups of seats, "Tank", "Healer", "DPS", each with an emoji, a label and its own capacity; up to ten. See sign-up slots |
| Required role | Optional. Only holders can sign up |
| Sign-ups open and close | Optional. The window the panel takes answers in; outside it the buttons are disabled and say why. See when sign-ups open and close |
| Participant role | Optional. Given to the members who say Going, taken back when they change their mind or the event ends. See the participant role |
| Hosts | Up to ten members shown as hosts. Empty means whoever created it |
| Team | Invites a team; its members are mentioned in the panel and DMed |
| Reminders | Use the server defaults, or switch it off and pick this event's own offsets, up to ten. See reminders and announcements |
| Announce when it starts | Server default, on, or off. With an optional role to ping instead of the members who said Going |
| Cover image | A direct image link, shown in the panel |
| Colour | Overrides the kind colour, with a reset |
| Visibility | Public puts the event on the server's public calendar and its public feed, Private keeps it off both. It starts on the server default and changes nothing else about the event |
| Create a Discord event | Mirrors it into the server's Events tab. Greyed out until the event has a voice channel or a location |
The panel preview at the bottom shows how the embed will read in Discord. The sign-up buttons are not part of the preview, but they are always there.
Opening an event
Click any chip and the event opens in a panel: when (in your zone and in the event's own), where, the capacity, the hosts, the team, the kind, the repeat rule if it is part of a series, the RSVP tally with the names behind it, grouped by slot when the event has slots, a link to the panel message in Discord, and the native Discord event link or, if the sync failed, why. A Public or Private badge sits next to the title, and the sign-up window and the participant role are listed when the event has them.
The panel is also where you set your own reminders for this event: the Remind me block offers the same presets the Discord button does, and saving there applies to you alone, not to the other attendees. See your own reminders.
Four things you can do from there:
- Add to calendar offers a Google Calendar link, an Outlook link and a
.icsdownload. None of them needs a connected account; see Google Calendar and ICS. - Edit reopens the form. On an occurrence of a series you choose between editing that occurrence and editing the whole series.
- Duplicate opens the create form filled in from this event: title, description, kind, colour, duration, timezone, channel, place, capacity, slots, required role, hosts, team, image, reminders and announcement settings. Only the date is left for you, pre-set to the next same weekday. Nothing is copied from the original's sign-ups; the copy gets a fresh panel of its own.
- Cancel asks for a confirmation, and on an occurrence asks the same question. Members keep their RSVP on a cancelled event; it simply does not run. Tick Also delete it permanently on that confirmation to erase the event instead of keeping it as cancelled; on an event already cancelled or over, the button reads Delete permanently (see the overview).
Managing attendees
The panel's buttons are the normal way in, but a manager sometimes has to answer for someone: a member who asked in a DM, a no-show to take off the list, a regular to pull off the waitlist. With Manage Server, the event's detail panel has a Manage attendees section:
- Add a member as Going or Maybe, with a slot when the event has slots. The member must be in the server. A Going on a full event, or a full slot, lands on the waitlist exactly as if they had pressed the button, and the same DMs and calendar entries follow.
- Remove any attendee with the button on their row. The seat frees up and the first person waiting is promoted, as usual.
- Promote a member on the waitlist with the button on their row, or the first in line with the button above the list. A promotion by a manager goes through even when the event is full: the choice is yours, the capacity is only a default. The member is DMed like any promotion.
- Export CSV downloads the whole list, one row per answer, with the member's ID, their status, their slot and when they answered.
Adding and promoting are offered only while the event still takes answers (scheduled or running). Once it is over or cancelled, those controls go away — the bot would refuse the write — while Remove and Export CSV stay, so a roster can still be tidied up or archived afterwards.
Every one of those repaints the panel in Discord at once.
Next: recurring events.
