-
TypeError: Cannot read properties of undefined (reading '_add')아리스봇/삽질로그 2022. 5. 28. 13:35
※ 맨 밑에 세 줄 요약 있음.
TypeError: Cannot read properties of undefined (reading '_add') at InteractionWebhook.fetchMessage (/home/dunamis/arisbot/node_modules/discord.js/src/structures/Webhook.js:305:70) at runMicrotasks (<anonymous>) at processTicksAndRejections (node:internal/process/task_queues:96:5) at async Object.execute (/home/dunamis/arisbot/src/commands/slash/blackjack.js:352:9) at async Client.<anonymous> (/home/dunamis/arisbot/index.js:29:9)
최근 봇을 작살낸 에러입니다.
최근 딱히 건드린 게 없는데 에러가 떠 있어서 디스코드 기능 추가로 문제가 발생한 건가 싶기는 했는데, 금요일에 좀 바빠서 예외 처리를 못 했더니 봇을 재부팅 시킬 때마다 어딘가에서 해당 에러로 봇을 자꾸 죽였습니다. 거의 금요일 하루 동안 봇이 죽어있었던 점은 이 자리를 빌려 사과드립니다.
잠시 삼천포로 빠지자면 한 서버에서 그런 건 아닌 것 같고, 디스코드에서 새 기능을 추가해서 그런지 사용하시는 분들이 여기저기 계신 것 같았습니다. 디스코드에서 딱히 공지도 안 한 베타 기능을 어떻게 찾아서 다들 사용하는 건지는 조금 신기하네요.
아무튼 본론으로 돌아가서, 관련해서 찾아보니 원인을 알 수 있었는데, 최근 디스코드 커뮤니티 서버에 아래와 같이 음성 채팅 내의 채팅 기능이 추가되었고, 이 기능이 문제를 일으키고 있었습니다.
음성 채팅 내의 채팅 채널.. 이라고 부르자니 직관성도 떨어지고 적기도 귀찮으니까 이하 '음성채팅채팅'이라고 부르겠습니다.
문제는 이 음성채팅채팅에 대한 프로퍼티가 현재 제대로 할당되어 있지 않다는 점입니다.
단적인 예로 맨 위의 에러 로그를 보면 프로퍼티가 undefined되어 타입에러가 발생하는 것을 볼 수 있습니다.
TypeError: interaction.channel.createMessageComponentCollector is not a function
메시지 콜렉터도 할당되어 있지 않기에 반응 수집기를 사용할 수 없으며, 1 2
TypeError: Cannot read properties of undefined (reading 'fetch')
fetch도 할당되지 않아 bulkDelete 기능을 사용할 수가 없습니다. 3
bulkDelete 대신 단순 삭제 기능을 응용하려고 해도 messages.foreach(m => fetch(m.id).delete()); 와 같이 fetch를 사용해야 하므로 현재 음성채팅채팅에서 메시지 일괄 삭제 기능을 사용하기에는 무리가 있지 않나 싶습니다.
게다가 더 골 때리는 점은 channel.type로 음성채팅채팅의 타입을 보니 GUILD_VOICE로 나온다는 점입니다. 노래 봇을 운영하시는 분들은 아마 타입 문제로 인해 장기적으로 애로사항을 겪게 되지 않을까 싶습니다. 4
아무튼 일단은 interaction.channel.type !== 'GUILD_TEXT' 면 return을 주는 식으로 대응하는 게 맞는 것 같습니다.
아리스 봇은 우선 위와 같이 예외 처리하기로 했습니다.
예외 처리 대상은 블랙잭, 발할라와 같은 메시지 기반 명령어와 메시지 일괄 삭제 명령어입니다.
+ 쓸데없는 이야기인데, 음성채팅채팅에서는 메시지를 특정 이용자에게만 보여주는 ephemeral 옵션도 지원하지 않는 것 같음.
세 줄 요약
1. 음성 채팅 내의 채팅 기능이 추가됨.
2. 문제는 이 기능이 기존 채팅 채널에서 사용되던 프로퍼티를 제대로 지원하지 않음.
3. 아리스 봇은 우선 해당 신규 채팅 채널에서 일부 명령어 사용을 지원하지 않는 식으로 대응함.
'아리스봇 > 삽질로그' 카테고리의 다른 글
봇 인증 진행 중 (0) 2022.08.06 예정 (0) 2022.07.08 0430 삽질로그 (0) 2022.04.30 for / indexOf (0) 2022.04.29 twit 에러 핸들링 (0) 2022.04.13