DEV Community

Cover image for Deploy your Discord Bot using Amazon EC2
Gen Benedict Casio
Gen Benedict Casio

Posted on

4 2 2 1 2

Deploy your Discord Bot using Amazon EC2

Ready to host your first application on the cloud? ☁️ In this article, we’ll explore how to deploy your Discord bot using Amazon EC2 💻. While this guide offers an overview, my Word Bot Github Repo provides a step-by-step walkthrough to get your bot up and running 🚀.


Story Time 📖

I was debating on what application to code and which service to use for my mentorship assignment when I decided to sift through my pythonpythonpython folder. That’s when I rediscovered my old Discord bot from 2021! 🎉

Excited, I booted it up... but it didn’t work 😅. Discord had updated their API, and my bot used deprecated code 🔧. It was the perfect reminder of how quickly tech evolves 🌱. So, I revamped it, and what better way to host it than on the cloud with Amazon EC2? 🌥️


python banner

Why Python? 🐍

  • Versatility: Python offers an extensive range of libraries, making it ideal for various development use cases 🔄.
  • Ease of Use: Its simple and readable syntax makes coding efficient and beginner-friendly 👨‍💻👩‍💻.
  • Rich Ecosystem: With libraries like discord.py, it’s easy to interact with APIs 🌐.
  • Security: Modules like dotenv help manage sensitive environment variables securely 🔒.

ec2 banner

Why EC2? 🌍

  • Scalability: Amazon EC2 scales easily to meet the demands of different workloads, from small projects to enterprise-level applications 📈.
  • Reliability: Running your bot 24/7 is effortless with AWS's robust infrastructure ⚡.
  • Flexibility: EC2 supports a wide variety of operating systems and configurations 🖥️.
  • Ease of Configuration: Setting up an EC2 instance is straightforward, even for beginners 🛠️.

Prepare Your Bot 🤖

If you already have a bot, make sure it’s updated with the latest discord.py version 🔄. If you don’t, you can use my Word Bot as a starting point! 🚀

One of the simplest and most engaging features of my Word Bot is responding to a user with a friendly "Hello!" 👋 when they send a message. Here's a snippet from the repository:

# Bot setup
bot = commands.Bot(command_prefix="$", intents=intents)

# Simple command that responds with a random hello message
@bot.command(name="hello")
async def hello_command(ctx):
    async with ctx.typing():
        greeting = random.choice(hello_messages).format(user=ctx.author.display_name)
        await ctx.send(greeting)

Enter fullscreen mode Exit fullscreen mode

This function listens for messages 📩, checks if the content is "$hello," and responds with a friendly message in return 🗨️.


Deploying Your Bot

Here’s a quick overview of the deployment process. Detailed instructions are in the repo!

1) Launch an EC2 Instance 🚀:

  • Sign in to AWS and go to the EC2 Dashboard.
  • Click "Launch Instance" and select Amazon Linux 2023 AMI.
  • Choose an instance type (e.g., t2.micro for the free tier).
  • Configure your instance settings, ensuring SSH access is enabled in the security group.
  • Download the .pem key file to SSH into your instance.

2) Connect to Your Instance 🔌:

  • Open your terminal or Git Bash and navigate to the folder where your .pem key is located.
  • SSH into your EC2 instance:

     ssh -i your-key-name.pem ec2-user@your-ec2-public-ip
    

3) Set Up Dependencies ⚙️:

  • Update the package manager and install Python 3 and the necessary packages(Discord and DotEnv):

     sudo yum update -y
     sudo yum install python3 python3-pip -y
     pip3 install discord.py python-dotenv
    

4) Install Git in the EC2 Instance 🛠️:

  • Ensure that Git is installed:

     sudo yum install git -y
    

5) Clone the Repository 📂:

  • Use the clone command and navigate into the project directory:

     git clone https://github.com/yourusername/word-bot.git
     cd word-bot
    

6) Set Up Environment Variables 🗝️:

  • Create a .env file in the root directory and add your bot’s token:

     echo "DISCORD_BOT_TOKEN=your-discord-token" > .env
    

7) Run the Bot ▶️:

  • Start the bot on your EC2 instance:

     python3 discord-bot.py
    

8) Keep the Bot Running in the Background 🕒:

To keep the bot running after you close the terminal, use screen:

  • Install screen:

     sudo yum install screen -y
    
  • Start a new screen session:

     screen -S discord-bot
    
  • Run the bot inside the screen session:

     python3 discord-bot.py
    
  • Detach from the screen session by pressing Ctrl + A, then D.

  • Reattach to the session later:

     screen -r discord-bot
    

Typical Interaction with the Bot 🤖💬

Once your bot is up and running, here’s what a typical interaction in your Discord server might look like:

sample interaction with the bot

Yep, my bot's name is Wordie! 😄 But hey, I'm always open to fun suggestions!


You made it to the end! 🎉🎉

Deploying your Discord bot on Amazon EC2 is a great way to bring your projects to life on the cloud ☁️. With the simplicity of Python 🐍 and the flexibility of EC2 💻, you can easily set up and scale your bot, ensuring it’s running 24/7 ⏰. By following the steps outlined in this guide, you’ve learned how to get your bot up and running with minimal hassle.

Remember, the beauty of cloud computing 🌐 is that your bot can grow with you! Whether you're adding new features, improving performance, or just experimenting 🎮, EC2 provides the resources to support your journey.

So, go ahead—give your bot some personality and functionality, and watch it thrive in the cloud! 🚀 If you encounter any bumps along the way, don't forget to check the troubleshooting section or refer to the Discord API documentation 📚.


Happy coding! 👨‍💻👩‍💻

Image of Timescale

Timescale – the developer's data platform for modern apps, built on PostgreSQL

Timescale Cloud is PostgreSQL optimized for speed, scale, and performance. Over 3 million IoT, AI, crypto, and dev tool apps are powered by Timescale. Try it free today! No credit card required.

Try free

Top comments (1)

Collapse
 
asi_security profile image
Isaeus "Asi" Guiang • Edited

super sharp article, benedict!!!

although I see some few vulnerabilities that can be fixed easily! you instructed enabling SSH access but doesn't specify the range of IPs allowed. if SSH access is not restricted (0.0.0.0/0) can expose the instance to brute force or other attacks.

I would recommend restrict SSH access to a specific IP range or CIDR block for better security. try using EC2 Instance Connect instead of SSH for temporary access.

Try this guide below!

blog.cloudterms.net/restrict-ssh-w...

Image of Timescale

Timescale – the developer's data platform for modern apps, built on PostgreSQL

Timescale Cloud is PostgreSQL optimized for speed, scale, and performance. Over 3 million IoT, AI, crypto, and dev tool apps are powered by Timescale. Try it free today! No credit card required.

Try free

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay