运行discord.py bot时在client.run('token')接收到运行时错误 [英] Receiving a runtime error at client.run('token') when running my discord.py bot

查看:50
本文介绍了运行discord.py bot时在client.run('token')接收到运行时错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试用Python创建一个Discord机器人,该机器人根据您所在的班级(在我的学校中)在Discord服务器上扮演一个角色.我才刚开始,但是每当尝试运行它时,我都会收到一个错误(我在Python 3 Notebook中的Google Colab中运行它).这是我的代码:

I am attempting to make a Discord bot in Python that gives you a role on a Discord server based upon what class you are in (at my school). I have just started, but I am receiving an error whenever I attempt to run it (I run it in Google Colab in a Python 3 Notebook). Here is my code:

from datetime import date
import time
import discord

client = discord.Client()

@client.event
async def on_ready():
    print('We have logged in as {0.user}'.format(client))

client.run('my token (not shown for obvious reasons)')

starttime=time.time()
while True:
  currentTime = time.strftime("%H:%M")
  print("new minute")
  if 0 <= date(int(time.strftime("%Y")), int(time.strftime("%m")), int(time.strftime("%d"))).weekday() <= 4:
    if currentTime == "13:41":
      print("First hour has started!")
    elif currentTime == "13:45":
      print("First hour has started! (hs)")
    elif currentTime == "14:30":
      print("First hour has ended at high school.")
  time.sleep(60.0 - ((time.time() - starttime) % 60.0))

当我运行它时,它会显示此错误:

When I run it, it presents me with this error:

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-5-d40f2b4200ae> in <module>()
      9     print('We have logged in as {0.user}'.format(client))
     10 
---> 11 client.run('my token')
     12 
     13 starttime=time.time()

2 frames
/usr/local/lib/python3.6/dist-packages/discord/client.py in run(self, *args, **kwargs)
    570 
    571         try:
--> 572             loop.add_signal_handler(signal.SIGINT, lambda: loop.stop())
    573             loop.add_signal_handler(signal.SIGTERM, lambda: loop.stop())
    574         except NotImplementedError:

/usr/lib/python3.6/asyncio/unix_events.py in add_signal_handler(self, sig, callback, *args)
     92                             "with add_signal_handler()")
     93         self._check_signal(sig)
---> 94         self._check_closed()
     95         try:
     96             # set_wakeup_fd() raises ValueError if this is not the

/usr/lib/python3.6/asyncio/base_events.py in _check_closed(self)
    375     def _check_closed(self):
    376         if self._closed:
--> 377             raise RuntimeError('Event loop is closed')
    378 
    379     def _asyncgen_finalizer_hook(self, agen):

RuntimeError: Event loop is closed

如果将 client.run 命令放在底部,该程序将永远无法到达它,因为循环会阻止它到达该命令.

If I put the client.run command at the bottom, the program never reaches it because the loop prevents it from reaching the command.

我错过了什么吗?我不知道问题出在哪里.希望能有所帮助.

Am I missing something? I do not know where the problem is. Would appreciate help.

推荐答案

基本上,如果您想在Google colab上运行Discord机器人,则需要执行各种操作.在这里,我使用discord.ext python库,执行该库,但是会阻塞,并阻止您执行任何其他单元格.

Basically there are various hacks you need to do if you want to run a discord bot on google colab. Here I use discord.ext python library, executing this, however will be blocking, and prevent you from executing any other cells.

!pip install discord.py
import nest_asyncio
nest_asyncio.apply()
 
import asyncio
await = lambda x: asyncio.get_event_loop().run_until_complete(x)
async def init(what, token):
    await what(token)
import discord
from discord.ext import commands
bot = commands.Bot(command_prefix="")
async def start():
    await bot.wait_until_ready()
    print("ready")
    await bot.get_channel(channelID).send("hi")

bot.loop.create_task(start())

TOKEN = ""   #@param {type: "string"}

这篇关于运行discord.py bot时在client.run('token')接收到运行时错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆