디스코드 봇을 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"의 방법이기 때문에 당연히 디스코드 파이썬 같은 곳엔 적용 자체가 불가능할 겁니다.
'tip' 카테고리의 다른 글
재설치 없이 어플 초기화 하기 (0) | 2019.09.21 |
---|---|
안드로이드 Only the original thread that created a view hierarchy can touch its views 해결하기 (0) | 2019.09.13 |
안드로이드 스튜디오 설치하기 (0) | 2019.04.14 |
티스토리 구버전 에디터 사용하는방법 (0) | 2019.03.28 |
크롬 사이트 알림 차단하기 (0) | 2019.03.23 |
최근댓글