본문 바로가기
tip

디스코드 봇 꺼지는 현상 해결하기

by Hancho1577 2019. 4. 15.
반응형

디스코드 봇을 discord.js를 통해 노래봇으로 구동하고 있었는데 이상하게 하루정도 지나면 사용 안 해도 꺼져있더라고요??

콘솔을 보면..

events.js:199
      throw err;
      ^

Error [ERR_UNHANDLED_ERROR]: Unhandled error. ([object Object])
    at Client.emit (events.js:197:19)
    at WebSocketConnection.onError (/root/discordBot/node_modules/discord.js/src/client/websocket/WebSocketConnection.js:374:17)
    at WebSocket.onError (/root/discordBot/node_modules/ws/lib/event-target.js:128:16)
    at emitOne (events.js:125:13)
    at WebSocket.emit (events.js:221:7)
    at _receiver.cleanup (/root/discordBot/node_modules/ws/lib/websocket.js:211:14)
    at Receiver.cleanup (/root/discordBot/node_modules/ws/lib/receiver.js:557:13)
    at WebSocket.finalize (/root/discordBot/node_modules/ws/lib/websocket.js:206:20)
    at emitOne (events.js:125:13)
    at TLSSocket.emit (events.js:221:7)

위와 같은 오류가 발생해 있었습니다..

 WebSocketConnection을 보고 네트워크 관련 문제인가 싶기도 했고.. discord.js 에서 오류가 발생하는 걸 보니 디스코드 봇이 구버전인가 싶어서 싹 밀고 재설치해보았더니 결과는 같았습니다.

뭐가 문제인지 모르겠어서 방치하려고 했으나... 실사용 도중에서도 꺼지는 현상이 발생하더라고요.

불편해서 봇이 오류로 꺼지면 다시 켜지도록 스크립트를 만드려고도 했는데 구글링 좀 해보기로 했습니다.

https://github.com/discordjs/discord.js/issues/2523 

불러오는 중입니다...

첫 번째로 발견한 곳인데요, 솔직히 무슨 말인지 아마추어 입장에선 잘 모르겠습니다 ㅋㅋㅋㅋ

그래서 다시 좀 구글링 좀 하던 도중 발견한 곳이 있었는데...

https://stackoverflow.com/questions/52683542/discord-bot-crashed-after-some-time

 

Discord Bot crashed after some time

So I have a discord bot which works perfectly fine, but after some time (about 30 minutes) the bot crashes with this error message: Error: Unhandled "error" event. ([object Object]) at Client.e...

stackoverflow.com

여기였습니다. 역시 스택오버플로

 

여기선 해당 오류가 발생하는 곳에 다시 연결하는 소스?를 추가하라는 것 같습니다.

 

일단 해당 부분을 수정하기 위해 ftp 등을 이용해서 디스코드 봇이 있는 폴더로 들어갑시다.

디스코드 봇 폴더에 node_modules 폴더가 있을 텐데 들어가서 discord.js 폴더로 들어갑니다.

그다음 src폴더로 들어가고, client폴더로 들어갑니다.

websocket폴더의 WebSocketConnection.js 파일을 수정해주면 됩니다.

이 파일엔 

  onError(error) {
    if (error && error.message === 'uWs client connection error') {
      this.reconnect();
      return;
    }
    /**
     * Emitted whenever the client's WebSocket encounters a connection error.
     * @event Client#error
     * @param {Error} error The encountered error
     */
    this.client.emit(Constants.Events.ERROR, error);
  }

이 부분이 있습니다!

이 부분을  

onError(error) {
    if (error && error.message === 'uWs client connection error') {
      this.reconnect();
      return;
    }
    console.log("Attempting to reconnect!")
    return this.reconnect()
    /**
     * Emitted whenever the client's WebSocket encounters a connection error.
     * @event Client#error
     * @param {Error} error The encountered error
     */
    this.client.emit(Constants.Events.ERROR, error);
  }

이렇게 수정하면 됩니다.

즉, 

console.log("Attempting to reconnect!")

return this.reconnect()

을 추가해주는 겁니다. (저는 364번째 줄에 있네요)

 

파일을 수정한 다음, 저장을 하고 봇을 재시작해주면 됩니다.

이렇게 하면 기존엔 그냥 오류를 떨궜지만 재연결 시도하는 것 같네요.

이 문제를 겪고 계시는 분들도 해결하시길 바랍니다.

 

참고로 discord "js"의 방법이기 때문에 당연히 디스코드 파이썬 같은 곳엔 적용 자체가 불가능할 겁니다.

반응형

최근댓글

최근글

skin by © 2024 ttuttak