Learn to Code via Tutorials on Repl.it!

← Back to all posts
Hosting discord.py bots with repl.it
h
TheDrone7

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.

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

Next, create the actual server.

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

@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.

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.

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: -

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!

Voters
DiogoMapper
LeoXu2
ChinmaySinghal1
Akkua
jhitl42
TawnyARMY
lucasericsson
numbermaniac
zte2976exe
wordbug
Comments
hotnewtop
iMikei

I get the following error:

OrianPax

@iMikei oof bro, same here. dunno what to do. my previous bot is working fine, this one is sucking.

SebastianChris1

@iMikei Add
flask = "^1.1.4"
under [tool.poetry.dependencies] in the pyproject.toml

muhammadali13

@SebastianChris1 This works perfectly. Thanks for the comment.

JuanPortal

Thank you! @SebastianChris1

ImOsaym
WoefulNebula

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

Ricky_J_Aquino

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...

ShivrajJ

@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

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.

therealsujitk

@ShivrajJ Thanks!

alex243
oloskos

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 http://0.0.0.0:8080/ (Press CTRL+C to quit)
jojojojo0254

@oloskos hey i had the same problem and you must run this core directly in repl.it, not in any software you are using.

tdserapio

@oloskos dude thats what supposed to happen

McJet

@oloskos you probably have the window minimized, you have to drag the window open.

JacobH460

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

DK2blue

package operation failed

TheDrone7

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

IronMerkGames

it is currently 2021 is this still a viable way of making a bot?

UMARismyname

@IronMerkGames I mean it's working perfectly fine for me but my bot is relatively simple so I'm not sure it'll work for bots that need more memory than repl.it's 500MB limit. You could buy the hacker plan, but not everyone has enough spare memory.

Warhawk947

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

bottestingg

Can I stop the run after this?

a5rocks

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

TheDrone7
viraxor

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

ShravanPY

@viraxor You need to do os.getenv(token). I'm a year late but yeah.

JoshuaGottfried

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

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

jojojojo0254

@RealRupert i got iz working, you must run this code directly in repl.it, notin any software you are using

jojojojo0254

@JoshuaGottfried you must run code in repl.it

NORXND

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

PYer

Really good!

TheDrone7

@PYer thank you.

ChinmaySinghal1

Hey, I tried it out, and it was working perfectly fine, but a from a few days ago, idk why I always have to restart the bot every 5-6 hrs, even when I am using uptimerobot, please help

missduonggoogle

If I get a discord bot with 10k server, should I do like that?

FragNite

I'm getting this error after creating keep_alive file, I've even done all the steps correctly

ChinmaySinghal1

Umm, I tried this for my discord bot, and fortunately, it is up for most of the time, but like around a certain period of time, I don't know what really happens, but my bot stops working.

[deleted]

i got following error

Traceback (most recent call last):
File "run.py", line 79, in <module>
keep_alive.keep_alive()
AttributeError: module 'keep_alive' has no attribute 'keep_alive'
Unclosed client session

aldo4256

Hi i have been using uptimerobot for sometime with no issues and now i am unable to ping my code with uptimerobot and i think i found the reason for some reason the http has changed from being 0.0.0.0 too 172.18.0.28 and i have no clue on how to fix this issue please help

K1mLotTV


Why no module name error?

ShravanPY

@K1mLotTV Assuming the file is named 'keep_alive', do 'from keep_alive import keep_alive' instead of 'import keep_alive.'

Trepoe

Thanks ! Very helpful

Batecoder

Thanks dude!

arrrsman

how do i check if this is working?
and does this slow down your bot?

CalebEevee

I followed the directions; but my bot is usually offline 1 hour after I closed the repl.it tab. Can anyone help?

Suurlemoen

Traceback (most recent call last) Q x
File "main.py", line 1, in <module>
import keep_alive
File "/home/ runner/SFAKMRO/keep_alive.py", line 6
@app.route( "/')
IndentationError : unexpected indent

Help

AestheticGaming



hi, i did this and it's not working. pls help fast, thank you

[deleted]

From flask import Flask @AestheticGaming

AestheticGaming

Ok thank you so much. @BertAssistant

AestheticGaming

which file do i do it in @BertAssistant

[deleted]

keep_alive.py @AestheticGaming

AestheticGaming
WoahdangJr

Works great for me! The only thing I am doing differently is I use betteruptime.com, instead of uptimerobot. It is slightly more advanced, but it does the same thing and even has an automatic status-page. Also, with the free plan, it checks a minimum of every 3 minutes, instead of the 5 on uptimerobot. Would def recommend betteruptime.com over uptimerobot if you are looking for a slightly more modern feel, and an automatically updating status page that is also fully controllable.

TheDrone7

@MalakaiShryock I actually use the uptimerobot mobile app nowadays (it didn't exist when I originally wrote this tutorial) cuz it has a really epic UI. 💯 Recommend that. Also 5 minutes is actually low enough. Anything below 30 would give maximum uptime and would even keep the workload on replit servers lower.

WoahdangJr

@TheDrone7 I prefer a higher ping-frequency so I know almost immediately when it is down.

Madbrad200

@MalakaiShryock you shouldn't ping abuse repl anymore than is absolutely necessary.

[deleted]

works like a charm!

wsx04321

What to do when this happens

"Repl.it: Updating package configuration

--> python3 -m poetry lock

[RuntimeError]The Poetry configuration is invalid:

'description' is a required property

exit status 1

Repl.it: Package operation failed."

pls help