Connect Evennia channels to Discord¶
+Discord is a popular chat service, especially for game +communities. If you have a discord server for your game, you can connect it +to your in-game channels to communicate between in-game and out.
+Configuring Discord¶
+The first thing you’ll need is to set up a Discord bot to connect to your game. +Go to the bot applications page and make a new application. You’ll need the +“MESSAGE CONTENT” toggle flipped On, and to add your bot token to your settings.
+# mygame/server/conf/secret_settings.py
+DISCORD_BOT_TOKEN = '<your Discord bot token>'
+You will also need the pyopenssl module, if it isn’t already installed.
+Install it into your Evennia python environment with
pip install pyopenssl
+Lastly, enable Discord in your settings
+DISCORD_ENABLED = True
+Start/reload Evennia and log in as a privileged user. You should now have a new
+command available: discord2chan. Enter help discord2chan for an explanation
+of its options.
Adding a new channel link is done with the following command:
+ discord2chan <evennia_channel> = <discord_channel_id>
+The evennia_channel argument must be the name of an existing Evennia channel,
+and discord_channel_id is the full numeric ID of the Discord channel.
++Your bot needs to be added to the correct Discord server with access to the +channel in order to send or receive messages. This command does NOT verify that +your bot has Discord permissions!
+
Step-By-Step Discord Setup¶
+This section will walk through the entire process of setting up a Discord +connection to your Evennia game, step by step. If you’ve completed any of the +steps already, feel free to skip to the next.
+Creating a Discord Bot Application¶
+++You will need an active Discord account and admin access to a Discord server +in order to connect Evennia to it. This assumes you already do.
+
Make sure you’re logged in on the Discord website, then visit +https://discord.com/developers/applications. Click the “New Application” +button in the upper right corner, then enter the name for your new app - the +name of your Evennia game is a good option.
+You’ll next be brought to the settings page for the new application. Click “Bot” +on the sidebar menu, then “Build-a-Bot” to create your bot account.
+Save the displayed token! This will be the ONLY time that Discord will allow +you to see that token - if you lose it, you will have to reset it. This token is +how your bot confirms its identity, so it’s very important.
+Next, add this token to your secret settings.
+# file: mygame/server/conf/secret_settings.py
+
+DISCORD_BOT_TOKEN = '<token>'
+Once that is saved, scroll down the Bot page a little more and find the toggle for +“Message Content Intent”. You’ll need this to be toggled to ON, or you bot won’t +be able to read anyone’s messages.
+Finally, you can add any additional settings to your new bot account: a display image, +display nickname, bio, etc. You can come back and change these at any time, so +don’t worry about it too much now.
+Adding your bot to your server¶
+While still in your new application, click “OAuth2” on the side menu, then “URL +Generator”. On this page, you’ll generate an invite URL for your app, then visit +that URL to add it to your server.
+In the top box, find the checkbox for bot and check it: this will make a second
+permissions box appear. In that box, you’ll want to check off at least the
+following boxes:
-
+
Read Messages/View Channels (in “General Permissions”)
+Send Messages (in “Text Permissions”)
+
Lastly, scroll down to the bottom of the page and copy the resulting URL. It should +look something like this:
+https://discord.com/api/oauth2/authorize?client_id=55555555555555555&permissions=3072&scope=bot
+Visit that link, select the server for your Evennia connection, and confirm.
+After the bot is added to your server, you can fine-tune the permissions further +through the usual Discord server administration.
+Activating Discord in Evennia¶
+You’ll need to do two additional things with your Evennia game before it can connect +to Discord.
+First, install pyopenssl to your virtual environment, if you haven’t already.
pip install pyopenssl
+Second, enable the Discord integration in your settings file.
+# file: server/conf/settings.py
+DISCORD_ENABLED = True
+Start or reload your game to apply the changed settings, then log in as an account
+with at least Developer permissions and initialize the bot account on Evennia with
+the discord2chan command. You should receive a message that the bot was created, and
+that there are no active connections to Discord.
Connecting an Evennia channel to a Discord channel¶
+You will need the name of your Evennia channel, and the channel ID for your Discord +channel. The channel ID is the last part of the URL when you visit a channel.
+e.g. if the url is https://discord.com/channels/55555555555555555/12345678901234567890
+then your channel ID is 12345678901234567890
Link the two channels with the following command:
+discord2chan <evennia channel> = <discord channel id>
+The two channels should now relay to each other. Confirm this works by posting a +message on the evennia channel, and another on the Discord channel - they should +both show up on the other end.
+++If you don’t see any messages coming to or from Discord, make sure that your bot +has permission to read and send messages and that your application has the +“Message Content Intents” flag set.
+
Further Customization¶
+The help file for discord2chan has more information on how to use the command to
+customize your relayed messages.
For anything more complex, however, you can create your own child class of
+DiscordBot and add it to your settings.
# file: mygame/server/conf/settings.py
+# EXAMPLE
+DISCORD_BOT_CLASS = 'accounts.bots.DiscordBot'
+++If you had already set up a Discord relay and are changing this, make sure you +either delete the old bot account in Evennia or change its typeclass or it won’t +take effect.
+
The core DiscordBot account class has several useful hooks already set up for
+processing and relaying channel messages between Discord and Evennia channels,
+along with the (unused by default) direct_msg hook for processing DMs sent to
+the bot on Discord.
Only messages and server updates are processed by default, but the Discord custom +protocol passes all other unprocessed dispatch data on to the Evennia bot account +so you can add additional handling yourself. However, this integration is not a full library +and does not document the full range of possible Discord events.
+
+