# Discord # IU Bot

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

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

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

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

깃허브
봇 추가 링크

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

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

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

Other 카테고리 관련 글

위 글이 유용하셨다면, 아래 글도 읽어보세요!

Smooth Zoom

Smooth Zoom

Medium이나 Google Photos처럼 이미지를 부드럽게 확대할 수 있게 하는 가벼운 자바스크립트 라이브러리입

Smooth Zoom
About IU

About IU

소개 React.js와 친해지기 프로젝트 일환으로, 앞서 html, css, javascript로 제작한 트와이스 팬 페이지의 디자인을 기반으로 React로 아이유 팬 페이지를 제작했습니다.팬 페이지 만들 대상을 고민하다, 로고를 중심으로 Home, About / Discography, Filmography로 두 개씩 대칭을 맞출 수 있는 아이유를 선택했습니다. 앨범 데이터 JSON으로 작업하면서 양이 워낙 많아 괜히 했나 생각도 잠깐

ReactJS 아이유
[JS] Infinite Scroll 플러그인

[JS] Infinite Scroll 플러그인

스크롤을 움직이거나 버튼을 클릭하면 다음 / 이전 페이지의 내용을 불러오는 플러그인입니다. 깃허브 데모 페이지Masonry 데모 설치 CDN &lt;!-- 압축 --&gt; &lt;script src=&quot;https://cdn.jsdelivr.net/gh/marshallku/infinite-scroll/dist/infiniteScroll.min.js&quot;&gt;&lt;/script&gt; &lt;!-- 원본 --&gt; &lt;script src=&quot;https://cdn.jsdelivr.net/gh/marshallku/infinite-scroll/dist/infiniteScroll.js&quot;&gt;&lt;/script&gt; 다운로드 infiniteScroll.min.js - 압축된 jsinfiniteScroll.js - 원본 js 시작하기 JS 파일 삽입 &lt;script src=&quot;파일/경로/infiniteScroll.js&quot;&gt;&lt;/script&gt; cdn을 사용하시면 cdn 경로를, 본인이 js 파일을 업로드해 사용하신다면 해당 경로를 script 태그에 넣어서 사이트에 삽입해주세요. 기본적인 HTML 구조 &lt;article id=&quot;container&quot;&gt; &lt;div class=&quot;item&quot;&gt;내용&lt;/div&gt;

JavaScript infinite scroll
크롬 확장 프로그램 - TWICE New Tab

크롬 확장 프로그램 - TWICE New Tab

크롬 웹 스토어 링크 밋밋한 새 탭이 지겨워 만든 확장 프로그램입니다. 새 탭을 트와이스, 할 일 목록, 날씨, 포커스 타이머 등으로 채울 수 있습니다. 할 일 목록 (투 두 리스트) 좌측부터 북마크, 검색, D-day, 현재 날씨 대부분 설정에서 간단하게 사용자화가 가능합니다. 집중을 유지하기 위해, 집중할 시간을 설정하면 해당 시간 동안 유튜브 등의 사이트에 접속을 차단합니다.

확장 프로그램 크롬 TWICE New Tab