Получение ошибки времени выполнения на client.run ('token') при запуске моего бота discord.py - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь создать бота Discord в Python, который даст вам роль на сервере Discord в зависимости от того, в каком классе вы учитесь (в моей школе). Я только что начал, но я получаю сообщение об ошибке всякий раз, когда я пытаюсь запустить его (я запускаю его в Google Colab в Python 3 Notebook). Вот мой код:

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

Когда я запускаю его, он выдаёт мне эту ошибку:

---------------------------------------------------------------------------
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 внизу, программа никогда не будет достигает его, потому что l oop не позволяет ему достичь команды.

Я что-то упустил? Я не знаю, где проблема. Буду признателен за помощь.

1 Ответ

0 голосов
/ 24 января 2020

ноутбуки Jupyter , на которых основан и используется Google Colab, имеют свои собственные циклы событий.
Client.run использует текущее событие l oop, если ничего не указано и закрывает его после завершения работы.
Вы должны были бы запустить его один раз, прежде чем событие l oop было закрыто, и последующие попытки запустить его снова скажут вам об этом. Вместо этого вы захотите использовать Client.start и обработать событие l oop самостоятельно, если хотите запустить его несколько раз в одной и той же записной книжке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...