Learn to Code via Tutorials on Repl.it!

← Back to all posts
Hosting discord.py bots with repl.it
TheDrone7 (1343)

Hosting discord.py bots on repl.it

This tutorial shows you how you can host your discord.py bots on repl.it.

For Node.js see this tutorial.

Before you start, you should already have a working bot. Also, this really doesn't matter if you're using discord.py async or discord.py rewrite. Works like a charm for both!

Just to ease things, we'll be using the end product of this tutorial.

Here is the end result: https://repl.it/@TheDrone7/discordpy-rewrite

What we'll be doing?

  1. Creating a web server.

  2. Using uptimerobot to ping our bot every 30 minutes.

    We do this because our repl goes offline after 1 hour of inactivity. So we keep pinging the repl every 30 minutes, to avoid it being idle for one hour.

Step 1: Installing the dependencies.

Using the repl.it package manager, install the following dependencies (assuming you've already made the bot, discord.py would be installed already but is listed just in case): -

  • discord.py
  • flask

In case you don't know about the repl.it package manager, click here to get started with the repl.it editor.

flask is a python module for handling http requests.

Step 2: Setting up a server

Setting up a server using Flask is very easy. But to keep things simple and your bot's file clean, we'll make a server in a new file and name it keep_alive.py since that is what most people like to call the file that helps keep their bot alive.

Open up the keep_alive.py file and import Flask also import Thread you can learn more about Threads here.

from flask import Flask
from threading import Thread

We didn't have to add threading to our requirements since it comes with python.

Next, create the actual server.

app = Flask('')

Easy, isn't it? But it's not over just yet.

Next, we add a route. A route is basically what handles http requests. Without a route the existence of our server does nothing. So add the following code

def main():
    return "Your bot is alive!"

@app.route() is a decorator which defines a route. '/' is the default route or the homepage of our server. The main function is called whenever a user makes a request to the '/' route which basically returns whatever has to displayed on the webpage, here we simply send the string Your bot is alive to keep things simple.

Now that our server is ready, we need to make sure that it runs and http requests can be made to it.

def run():
    app.run(host="", port=8080)

You can basically put any 4 digit number in port which is not already in use. The defaults for python is 8080 and that's what we'll stick to.

Finally, we make a function that we can call to prepare our server and allow it to be pinged.

def keep_alive():
    server = Thread(target=run)

And we're basically done with our keep_alive.py file.

Step 3: Combining the server and bot.

Now that we're done making both the bot and the server, we need to combine the two. That is easy too, open up the main.py file ( or whatever file has the discord_client.run(bot_token) function in it ) and add the following line at the top: -

import keep_alive

This will import the keep_alive file in your bot's main file.

Now just before starting the bot, at the bottom of the same file write the following code: -


This will run the keep_alive() function that we defined in the keep_alive.py file earlier.

And now your server is ready too! Run the bot, you should see something like this: -

Notice that small window saying Your bot is alive! if you see it, you successfully created the server! Only the last step remains! Before you go into the last step, make sure to copy the repl.co link you see in that small window's address bar. (https://discordpy-rewrite.thedrone7.repl.co in the picture, it will be referred to as the server link in the rest of the tutorial)

And in case you don't see it, go through this tutorial again and make sure you didn't miss something, also if it retains, don't hesitate to comment and tell me.

Step 4: Setting up uptimerobot

First of all visit https://uptimerobot.com/ and register an account just like any other website. (It is free of course)

Next, Once, you're logged in,

  1. Click on the New Monitor button.

  2. Next, choose the HTTP(S) Monitor Type.
    Give it a friendly name of your choice ( naming it after your bot is recommended )
    Paste your server link in the URL/IP field.
    Set the Monitoring Interval to anything between 5 minutes to 45 minutes. ( 30 minutes is recommended)

    Optionally, Select yourself as one of the "Alert Contacts To Notify" so you are notified via e-mail whenever your bot goes offline.
    Finally making it look something like this: -

  3. Click on Create Monitor and you're good to go!

Now you're bot will stay online for as long as it can.

( Repl it being just another host, won't be able to host it 24/7 so it will have a downtime of a few minutes within every 24 hours.)

And you're done! The final product can be found here.

Please upvote if you found this useful!

Also, comment down below if there's something you would like to share or ask.

And finally, thanks for reading it!

Ricky_J_Aquino (6)

Is it just me or did this stop working today?
I am even making a fork of yours and setting my own token and still won't load. (It has been working the past few days).
This is the error...

Repl.it: Updating pack configuration
--> python3 -m poetry install
The Poetry configuration is invalid:
  - 'description' is a required property
Repl.it: Package operation failed.
ShivrajJ (2)

@Ricky_J_Aquino Yeah, I had the same problem. I found a way to make it work after a bit of snooping around. It's failing because there's no description specified in your pyproject.toml file

So, all I did was go to the file pyproject.toml, which might look something like

authors = ["Your Name <[email protected]>"]
name = "root"
version = "0.0.0"

and then some stuff below that. I just added a description = "ABC" right below the version key, and it started working.

No clue why it stopped working out of nowhere, but yeah, it says the description bit is mandatory in the Poetry documentation(https://python-poetry.org/docs/pyproject/) now, so maybe something got changed.

Hope it works.

WoefulNebula (2)

The repl says it’s working and Uptime bot says 100% but my bot is not online

DK2blue (2)

package operation failed

TheDrone7 (1343)

@DK2blue please report it to the repl.it team at https://repl.it/discord/ I'll mention @enigma_dev cuz he da best.

viraxor (1)

token env thingy stopped working, here's the error:

Traceback (most recent call last):
  File "tb.py", line 103, in <module>
    bot.run(token, bot=True, reconnect=True)
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/client.py", line 678, in run
    return future.result()
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/client.py", line 658, in runner
    await self.start(*args, **kwargs)
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/client.py", line 621, in start
    await self.login(*args, bot=bot)
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/client.py", line 472, in login
    await self.http.static_login(token.strip(), bot=bot)
AttributeError: 'NoneType' object has no attribute 'strip'
Warhawk947 (525)

such a great tutorial! How did I not see this sooner?

JoshuaGottfried (1)

It works, but once I went to test it, since it HOSTS the bot, i closed my IDE and the bot just turned off. I thought it would be hosted,

RealRupert (0)

@JoshuaGottfried Did you get it working because thats happening to me

oloskos (1)

I don't get the pop-up saying that 'the bot is alive', here's the cmd:

  • Serving Flask app "" (lazy loading)
  • Environment: production
    WARNING: This is a development server. Do not use it in a production deployment.
    Use a production WSGI server instead.
  • Debug mode: off
  • Running on (Press CTRL+C to quit)
a5rocks (793)

Good job! Now the pressure is on for me to finish my discord bot tutorial... Well, I can just copy and paste this at the bottom :D

bottestingg (1)

Can I stop the run after this?

FireDevelopment (0)

OK, so I have a problem, it's running the bot twice, so if I do a command, it responds twice.

AidanMcConachie (0)

I did everything but it goes offline after one hour. I assume this means Flask works but the uptimebot doesn't work. I put the url and 30 minutes interval, please let me know if there is anyway to troubleshoot.

KushalReddy1 (0)

alternatively you can use pythonanywhere.com to do a continous get request to the url of the bot project
others would suggest running the bot directly on pythonaywhere but it does not allow the script to run
so we can set make a script to do a get request to our bot url in a while loop with certain interval of time other in between the get requests

iamcooliguess (16)

My repl works fine when I click run, however, it doesn't work in UptimeRobot. It says "Your bot is alive", so I think the issue is with UptimeRobot.

satyamers (0)

I'm getting erorr that Run is not defined

AlexanderLaw (0)

I am getting the following error, though this method used to work up to about 4 months ago:

The current project's Python requirement (*) is not compatible with some of the required packages Python requirement:

  • flask requires Python >=2.7, !=3.0., !=3.1., !=3.2., !=3.3., !=3.4.*

Because no versions of flask match >1.1.2,<2.0.0
and flask (1.1.2) requires Python >=2.7, !=3.0., !=3.1., !=3.2., !=3.3., !=3.4.*, flask is forbidden.
So, because root depends on flask (^1.1.2), version solving failed.
exit status 1

Repl.it: Package operation failed.


I did exactly as you said, but I didn't get the "I am alive" thingy and now i don't know my url for uptimebot

Eyseedoubleyou (24)

What url do I do if the bot is in multiple servers? What link do I do?

Eyseedoubleyou (24)

Yes I worked this out some time after posting @iamcooliguess thanks anyways

Hodat2k9 (0)

I have done this and this is very good. REALLY GOOD. It worked for me.

HelenaSouza (0)

But I Repls are public so someone can take my token, log in to my bot, and hack me

TheDrone7 (1343)

@HelenaSouza you can put your token inside the .env file and nobody will be able to see it, other than you or the people you invite to the repl using the multiplayer feature.

NarwhalFanatic (26)

Thanks for the tutorial! So helpful!

CoolJames1610 (619)

Great thanks needed to know about the uptime thing

OscarMcroob (0)

This worked great for one of my bots, thanks! It has been up for ages without issues. However, I recently made another bot and this one crashes every couple of hours. No errors, it just stops running. I have exactly the same setup with keep_alive, the only difference being that this bot uses cogs. Any help would be greatly appreciated, thanks.

MellowTv (0)

Make a .env file so you don't have to pay to make your repl.it private... smh.

JacobH460 (0)

my bot goes down every minute and doesn't come back up for a while
Edit: I got it working, make sure you put the keep_alive.keep_alive() code before the client.run('') code


I got OSError: [Errno 98] Address already in use

windowsboy111 (0)

cannot add package. I know it doesn't add it in the package menu. there's nothing in it even i specified discord.py in requirements.txt. Manually adding it does not work either.

TheDrone7 (1343)

Replit has shifted to the poetry package manager. I'd recommend using the replit package manager which is the "cube" icon in the left most menu. @windowsboy111

windowsboy111 (0)

@TheDrone7 Oh I tried that. It's not working so, for my script, I imported os, and then os.system('pip install flask discord.py blah blah blah')
btw idk why my bot is constantly offline after a while even I see "bot is alive".

TheDrone7 (1343)

I guess the package manager might be having some issues then. I'm glad you figured out a workaround. Also, if you see "bot is alive" and the bot isn't online, the bot probably had a bug that crashed it. I'd recommend temporarily getting rid of the server and debugging the bot. @windowsboy111

ripu (3)

thanks so much nice job

ripu (3)

i had been having alot of trouble finding a good tutorial thx


This is nice. I don't know why it does go down but I am trying anything.

TheDrone7 (1343)

@HUDSON_REYREY I did say it will go down sometimes. It's just that, it'll automatically come back up within the time interval you set at uptimerobot.