디스코드 아이유 봇 - 프로토타입

작업물

디스코드 아이유 봇 - 프로토타입
최종 수정일:

어제 대충 만들었던 아이유 봇이 이제 대충 구색은 갖추고 돌아가는 중입니다.

제일 처음 만든 목적은 움짤 편하게 보내고 랜덤으로 움짤 보기였는데, 이런저런 기능이 덕지덕지 많이 붙었네요.
붙이다 보니 하고 싶은 건 더 많아져서 끝도 없네요.

깃허브
봇 추가 링크

npm : discord.js, node-fetch, ytdl-core
ubuntu package : ffmpeg

Node.js에 상술한 넷만 추가로 설치하시면 직접 돌리실 수 있습니다.

아직 프로토타입이라 서버 재시작이 굉장히 잦습니다.
봇을 추가하셔도 종종 명령어가 작동하지 않을 수 있습니다.

명령어 구조는 기존에 ![명령어]에서 지은아 [명령어]로 변경했습니다.

좀 건방지게 반말하는 느낌이긴 한데…일단 기능 추가가 우선이니 이건 나중에 고려해봐야겠습니다.

심지어 봇은 처음에 높임말 하게 설정해서 지금도 계속 높임말 하게 만들고 있는데, 이건 수정이 귀찮고…
매번 명령어 입력할 때마다 이거 해주세요 저거 해주세요 하려면 입력할 게 너무 많고…
지은 말 어쩌구 뭐 아예 이런 식으로 가는 건 너무 이상하고…
어렵네요.

서버에 퀸지은이란 역할 추가하고 제일 위에 올려뒀습니다.

안녕, 잘 가, ㅇㅋ, ㅠㅠ, ㅋㅋ, 굿, 헉, 열 받네

일단 위 8가지 명령어는 움짤 보는 용도입니다.
랜덤이랑 이것저것 추가할 예정입니다.

안녕과 잘 가엔 💜 이모지를 추가해줍니다.

아무래도 편하게 입력하는 게 우선이니 잘가, 열받네처럼 띄어쓰기가 없어도 작동하게 해뒀습니다.

매번 명령 추가할 때마다 help 업데이트하는 게 더 귀찮습니다.
그냥 깃허브 문서 하나 만들어두고 fetch 해서 가져오거나 링크만 던져주게 바꿔야 하나 싶습니다.

아무런 명령어도 입력하지 않으면 도움말 보는 방법을 가르쳐줍니다.

echo가 없으면 섭해서 만들어봤습니다.

말해 [문자열] -지워
라고 제일 마지막에 -지워를 입력하면 본인이 보낸 메시지는 삭제되고 봇이 한 말만 남습니다.

뭐 추가할지 고민하다 예전에 짜둔 퀵소트 함수 가져다가 정렬 기능도 추가해봤습니다.

이거 테스트하다가 알았는데, "a", "b"같은 스트링도 대소비교가 되더라고요.
지은아 정렬해줘 ["c", "b", "a"] 넣으면 abc 순으로 정렬해줍니다.

Math.random()을 이용한 간단한 게임도 추가해봤습니다.

kick과 ban 기능도 있길래 추가해봤습니다.

아무렇게나 작동하면 꽤 리스크가 큰 명령어라 바로 실행되는 게 좀 꺼려졌는데,
<message>.channel.awaitMessages를 이용하니 대답을 기다릴 수 있어서 재차 확인 후 kick, ban 처리를 진행하도록 해뒀습니다.

10초 이내에 응 혹은 ㅇㅇ을 입력해야 실행됩니다.

정말 삽질을 많이 한 부분입니다.
이런저런 가이드 찾아보니 죄다 옛날 거로 소개하고 있어 진행이 안 되더라고요.
공식홈페이지에 적힌 가이드도 굉장히 부실해 콘솔 찍어가며 진행하다가, 가이드 문서 찾아서 여기서 참조도 많이 했습니다.

혹시나 비슷한 거 만들다 우연히 찾아오신 분이 있다면 <message>.guild.roles는 역할을 반환하지 않으니 <message>.guild.roles.cache를 사용하세요. 저 .cache 하나면 문제 대부분이 해결됩니다.

Node.js의 crypto를 이용해 간단히 암호화와 복호화가 가능합니다.
key 값도 별도로 넣어서 key를 알아야 복호화가 가능하게 만들까 생각도 했었는데, 딱히 쓸 일이 많진 않을 것 같아 보류 중입니다.

node-fetch 패키지를 이용해 인스타그램 페이지를 크롤링하게 만들었습니다.
예전에 작성한 api 없이 인스타그램 가져오기랑 긁어온 데이터를 처리하는 방식은 같습니다.

MessageAttachment를 이용해 사진을 첨부해서 전송하고 있는데, 비디오 링크는 존재하질 않더라고요.
비디오면 다시 다른 페이지 크롤링해서 비디오 url을 가져와야 하는데, 일단 고민을 좀 해봐야겠습니다.

인스타그램에 새 포스트를 올리면 알림을 보내는 방법도 찾아보는 중입니다.
아이유 봇이니 이 정도는 있어야겠다 싶네요.

뮤비 혹은 뮤직비디오를 입력하면 랜덤으로 뮤직비디오 링크를 보내도록 해뒀습니다.

ytdl-core와 ffmpeg를 이용해 음악을 재생하는 기능을 추가했습니다.
외국 봇들은 음질도 구리고 끊김도 심해서 못 들어주겠던데, 이 봇은 유저가 없으니 똑같이 서버가 외국에 있는데도 가끔 끊기는 현상은 있지만, 음질이나 끊김이 전반적으로 나쁘지 않습니다.

아직 재생기능밖에 추가를 못 했습니다. 큐에 음악을 추가하고, 큐를 관리하는 기능도 추가해야 합니다.
물론 그 전에 정지부터 만들어야 하고요.

지금은 그냥 음악 재생하고 음악 끝나면 음성 채팅방에서 나가게 해뒀습니다.

Report an issue