Stuck at home these past–checks calendar–732 months, I’ve been spending a lot more time on Discord (an online voice, video and text communications service) than I ever thought I would. Chatting with far-flung friends, playing games, exploring, finding community as I am able, and generally learning about a platform I had not used all that much before the pandemic. And part of that fun was seeing all the cool bots people have made on Discord to liven things up: moderation, trivia, and games: many little, weird, random games.
So I wondered: could I make one?
Since bots are just code that interact with Discord’s APIs, they have to have a computer to run on. Cool, I have one of those. But I don’t want my bot to disappear just because my computer is off, so I need something better: a computer that can always stay on. Reliable infrastructure. If only I could find that somewhere…
What would it take to actually run a bot on someone else’s (ie. Google’s) computers?
I’m assuming here that you’ve set up your Discord developer account, made a New Application (with a clever name of course), got the bot token from the menu under Settings > Bot > Token (have to Copy or Reveal), and have that stored safely on a sticky note by your desk.
Now, on to Google Cloud! First make sure you have an account set up and are able to create new resources. We’ll need a Virtual Machine (VM), part of Google Compute Engine. In Google Cloud, make a new project, head to Compute, and create a new instance. The smallest instance is going to be fine for this Hello, World example, so let’s use an f1-micro instance, because it’s free! To get that going I chose us-east1 as my region, Series N1, then Machine type f1-micro.
While I love me some serverless architecture, and it’s usually much lower overhead, in this case we want to have a persistent instance so there’s always a process ready to respond to a request, via the Discord API. We want to avoid any timeouts that might emerge if a serverless solution takes time to spin up listeners. At the same time, we need to avoid having more than one process running, otherwise we could have multiple responses to a Discord signal, which will be confusing.
In choosing our VM we need something running Python 3.5+, to support our Discord bot code. The default (as I write) is Debian GNU/Linux 10 (buster) which is running Python 3.7, good enough for us! Once the VM is live we can start getting our code setup on it. You’ve got a few options for connecting to the Linux VMs. Once you’ve done so, time to install and run some code!
To run our code we want to install and setup pip (package installer for python), using
sudo apt update
sudo apt install python3-pip
pip3 install discord.py
…to install the Discord library onto your server.
We can drop our code directly into a new bot.py file; organizing it into more structured files will come after we move past the Hello, World! stage. For now you’ll hard code the bot token into bot.py, even though that gives me the shivers.
from discord.ext import commands
bot = commands.Bot(command_prefix='..', description='A simple Discord bot')
token = '<YOUR_TOKEN_HERE>'
async def hello(ctx):
And now we’re ready to run our bot!
And you can add it to our server by going back to the Discord Developer portal, select our App, and look under Settings for OAuth2. Once you choose the right scope (we can stick with just bot for now), a new link will appear below the Scopes box, starting with
https://discord.com/api/oauth2/authorize?<lots of numbers here>
Loading that in your browser is all it takes to add you new bot the the server you have permissions to manage, and now you are all set! Test it out by sending the message `..hello` to your server.
You can read more about the Free Tier for Compute Engine and other services, and come back next time for a deeper exploration into operations for your Google Cloud-powered Discord bot.
Our humans need coffee too! Your support is highly appreciated, thank you!