This has been written to serve a single Discord guild, paired to a single Google Calendar shared by all channels in that guild.
Note that this is not a "hands free" or "simple" setup, and requires working knowledge of running Discord bots and Google APIs. If these are outside your experience, other projects may be better suited.
The bot needs a config.json
and token.json
file in the working directory.
It'll create persist
, persist-events
, and persist-rsvp
directories to
store its state.
{
"calendarId": "...",
"discordClientId": "...",
"discordSecret": "...",
"discordToken": "...",
"channel": "...",
"refreshInterval": 60000,
"limit": 7,
"prefix": "!"
}
{
"access_token": "...",
"refresh_token": "..."
"scope": "https://www.googleapis.com/auth/calendar.events"
"token_type": "Bearer",
"expiry_date": ...
}
You'll need to setup a Discord Bot instance, and fill in the discordClientId
,
discordSecret
, and discordToken
fields in the config.json
.
You'll need to setup a Google Calendar and authenticate the bot for API access,
filling in the token.json
with the results and the calendarId
in
config.json
Put the name of the general Discord channel (without #
) in channel
. You can
adjust the prefix
for bot commands, and the refreshInterval
for sync with
Google (leave it at 60000
, really).
The limit
field is the number of days before an event that the bot will
add invites if not already present, and even if the event is not the next one
for a given role.
The bot assumes that the calendar is used to schedule a number of concurrent games, and that each game has an associated Discord Role and Channel with a 1:1 map between each of them.
To associate a Role with a channel, use:
!channel @Game #game
To specify which game a calendar event is associated with, include the role name in the description as:
Invite: Game
The bot will track invites through the reactions to the Discord message, or
interested marks on the Discord scheduled event. In Google they will appear as
discord@Username
.
This can be changed to the user's Google Calendar address, and real invites sent via the calendar.
To associate a Player's Discord user with their Google Calendar address, use:
!google @User [email protected]
In addition to Invite:
the bot will also recognize Image:
as a URL to an
image to include in the invite. Other text is added to the description of the
event.
Invite: Game
Image: http://some/cool/image.jpg
Description of the game