디스코드 서버/ 봇 설치 후, 실행하다 이 에러가 난다면?
구글 코랩 및 주피터에서 디스코드(discord.py) 실행시 겪을 수 있는 오류이다. 내 경우는, 구글 코랩에서 디스코드 봇 실행과정에서 발생했고, 다음과 같이 문제를 해결했다. 혹시나 유사한 문제를 겪을 수도 있는 누군가를 위해 기록으로 남긴다.
디스코드 봇을 설치/ 테스트 해보고자 하는데, 기본 코드를 따라 하다 보니 RuntimeError: Cannot close a running event loop라는 에러가 발생하였다. 혹시나 하여, 로컬 PyCharm에서 실행해보니 정상적으로 실행되는 코드였다.
문제를 일으킨 코드
디스코드 채널이 정상적으로 생성되어 있고, 그 채널에 봇이 연결만 되어 있다면 아래 코드는 정상적으로 실행된다. 맥북에서 직접 실행해 보니 정상적으로 실행되지만, 구글 코랩에서 실행하니 문제가 발생하였다.
import discord
from discord.ext import tasks
TOKEN = '토큰'
CHANNEL_ID = 채널ID
client = discord.Client()
@client.event
async def on_ready():
send_msg.start()
print("Hi, logged in as")
print(client.user.name)
print()
@tasks.loop(minutes = 5)
async def send_msg():
channel = client.get_channel(CHANNEL_ID)
await channel.send('Hello')
client.run(TOKEN)
이렇게 생긴 코드를 구글 코랩에서 실행시켰을 때 발생한 에러 전문은 아래와 같다.
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
/usr/local/lib/python3.7/dist-packages/discord/client.py in run(self, *args, **kwargs)
712 try:
--> 713 loop.run_forever()
714 except KeyboardInterrupt:
10 frames
RuntimeError: This event loop is already running
During handling of the above exception, another exception occurred:
RuntimeError Traceback (most recent call last)
RuntimeError: This event loop is already running
During handling of the above exception, another exception occurred:
RuntimeError Traceback (most recent call last)
/usr/lib/python3.7/asyncio/selector_events.py in close(self)
86 def close(self):
87 if self.is_running():
---> 88 raise RuntimeError("Cannot close a running event loop")
89 if self.is_closed():
90 return
RuntimeError: Cannot close a running event loop
문제를 해결한 코드
다른 블록을 열어, 아래의 코드를 먼저 실행시킨다.
!pip install nest_asyncio
import nest_asyncio
nest_asyncio.apply()
그리고 나서, 앞서 문제가 발생한 코드를 다시 실행시켜 보자. 그러면, 앞서 에러가 발생한 부분에서 더이상 에러가 발생하지 않고 동작하게 된다. 해당 내용은 주피터랩/주피터 노트북에서 동일한 에러가 발생할 때도 적용해 보면 될 듯 하다.
관련 글
'Development > 디스코드봇' 카테고리의 다른 글
Heroku - 디스코드 봇 토큰 정보 보호하기 (숨기기) (0) | 2021.12.23 |
---|---|
Heroku - 실행중인 디스코드 봇의 로그를 보려면? (2) | 2021.12.16 |
Heroku - 파이썬 디스코드 봇 프로젝트 연동하기 (깃헙기반) (0) | 2021.12.12 |
Heroku - 디스코드 봇 무료 호스팅 준비하기 (0) | 2021.12.09 |
파이썬 디스코드 봇 - 사용자 커맨드에서 파라미터 전달받기 (0) | 2021.12.04 |
파이썬으로 디스코드 봇 개발 시작하기 (기본 구조 잡기) (1) | 2021.11.28 |
디스코드 봇 준비- discord.py 설치하기 (feat 맥북, 구글 코랩) (0) | 2021.10.16 |
디스코드 서버-봇 설정하기 (0) | 2021.10.15 |