Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to Fix Runtime Error: Cannot close a running event loop - Python Discord Bot

I am trying to create a Discord bot with Python, however whenever I run the sample code here:

import discord

client = discord.Client()

@client.event
async def on_message(message):
    # we do not want the bot to reply to itself
    if message.author == client.user:
        return

    if message.content.startswith('!hello'):
        msg = 'Hello {0.author.mention}'.format(message)
        await client.send_message(message.channel, msg)

@client.event
async def on_ready():
    print('Logged in as')
    print(client.user.name)
    print(client.user.id)
    print('------')

client.run('tokenhere')

It returns the error:

Traceback (most recent call last):

  File "<ipython-input-6-ea5a13e5703d>", line 1, in <module>
    runfile('C:/Users/User/Pictures/rito_bot.py', wdir='C:/Users/User/Pictures')

  File "C:\Users\User\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 703, in runfile
    execfile(filename, namespace)

  File "C:\Users\User\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 108, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "C:/Users/User/Pictures/rito_bot.py", line 22, in <module>
    client.run('token')

  File "C:\Users\User\Anaconda3\lib\site-packages\discord\client.py", line 595, in run
    _cleanup_loop(loop)

  File "C:\Users\User\Anaconda3\lib\site-packages\discord\client.py", line 97, in _cleanup_loop
    loop.close()

  File "C:\Users\User\Anaconda3\lib\asyncio\selector_events.py", line 94, in close
    raise RuntimeError("Cannot close a running event loop")

RuntimeError: Cannot close a running event loop 

Every other line seems to run just fine, but without the last line it doesn't connect to the server, which makes it useless.

Note: I have seen the question here, however OP's solution doesn't seem applicable to my situation.

like image 764
12 rhombi in grid w no corners Avatar asked Aug 24 '19 16:08

12 rhombi in grid w no corners


People also ask

How do I stop discord running bots?

A way to end the entire script your bot is running on is by using the built in python functions exit() and quit() both do the same thing. by putting @commands. is_owner() you're making it so that only the owner of the bot can use this command.

Will discord PY shut down?

According to the maintainer, Discord has told that the bots will continue to work fine even after April 2022.


1 Answers

(Spyder maintainer here) To run async code in our consoles you first need to install the nest_asyncio package and then call it before running any of your code as described on its Readme.

like image 167
Carlos Cordoba Avatar answered Oct 02 '22 12:10

Carlos Cordoba