5

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.

4
  • What version are you using? Run print(discord.__version__). Commented Aug 24, 2019 at 21:25
  • (Spyder maintainer here) To run async code in our consoles you first need to install the nest_asyncio package and then call it in our consoles before running any of your code. Commented Aug 25, 2019 at 9:34
  • @Carlos Cordoba Thank you so much dude! Can you add it as an answer so I can accept your question? Again, Thank you! Commented Aug 25, 2019 at 16:06
  • Glad to know that fixed your problem! Commented Aug 25, 2019 at 16:18

3 Answers 3

9

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

Sign up to request clarification or add additional context in comments.

1 Comment

The correct approach is given here: stackoverflow.com/questions/50243393/… Check for a running event loop and if there is one, use await otherwise run.
2

I encountered the same problem trying to run Discord examples on Jupyter Notebook. Moving to plain python script solved it for me.

1 Comment

it turns out that this problem seems to be unique to anaconda, so this would work. i was looking for a solution for all compilers, so switching to plain Python script wouldn't really be applicable.
0

maybe import this , will help .as it works for me.

if you use jupytet notebook or google colab you will face this error

import nest_asyncio

nest_asyncio.apply()

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.