https://github.com/LONGNEW/Rather_Bot
친구들이랑 쓰는 디스코드 서버에 사용할 봇을 만들기로 했다.
매번 학교 공지사항 확인하는 것이 귀찮아서 크롤링을 통해
셀레니움을 써서 하면 속도가 더 나올거 같지만 혹시나 봇을 다른 컴퓨터에서 돌리는 일이 발생할 수도 있어 bs4로 제작하기로 생각했다.
: 가장 막힌 부분이었다.
디스코드 계정 이메일 인증이 되어 있지 않으면 생성을 할 수 없다.(내껀 되어 있는 계정이였는데..)
https://discord.com/developers/applications
위 웹 사이트에서 New Application 버튼을 눌러 새로운 앱을 만들고 앱의 이름이 봇의 이름은 아니기 때문에 상관없다.
그 후 왼쪽 상단(가로줄 3개) 버튼을 누른후 Bot 카테고리에서 Add Bot을 클릭한다.
그 때 봇의 이름을 설정 하고 봇이 수행해야 하는 행동에 따라 밑에 있는 Permission을 주면 된다.
나중에 봇을 서버에 추가하려면 OAuth2 카테고리에서 URL을 생성한 후에 이를 검색창에 붙여넣으면 자기의 서버로 연결을 할 수 있다.
디스코드에서 명령어를 작성 할 때 접두사가 꼭 필요하다 생각하고 있었는데 설정하기 나름이다.
본인의 봇에서는 그냥 접두사가 없으며 코딩 해둔 내용과 동일 한 채팅이 존재하면 봇이 행동을 수행한다.
1, 2, 3, 4 와 같이 숫자를 명령어로 만들었다.
봇이 명령어를 인식을 했다면 인제 내용을 가져와야 한다.
다른 클래스에 메소드를 작성한 후에 리턴 값을 출력하게 하였으며 출력시에 await
을 사용하여야 한다.
이 커맨드가 얼마나 있느냐에 따라 속도의 차이가 아주 크므로 유의 해야 한다.
await
내부에 \n
문자도 알아서 인식해서 출력 하므로 개행 문자를 사용하던지 아니면 """ """
을 사용하여 간편하게 작성하는 것을 추천한다.
3가지의 메소드로 나누었다.
1. 숫자를 매개변수로 받아서 각 메소드를 수행한 후 리턴되어 온 값을 리턴 함.
2. 컴퓨터 공학과 홈페이지의 내용을 가져오기
3. 백마 광장 새소식 가져오기(이때까지는 이게 공지사항인줄 알았음)
컴퓨터 공학과 공지 사항 내용의 경우 td
태그를 이용하여 파싱하였다.
가장 큰 틀은 tr
이여서 이를 파싱하여 리스트 처럼 사용하였다.
tr
의 값들을 files
에 넣어서 for 문을 수행하였는데 내가 원하는 값들은 공지 사항을 제외한 게시글들이기에 공지사항만 가지고 있는 b-top-box
를 이용해 이를 가진 값들을 제외 시켰다.
그 외에는
0 게시글 숫자
1 게시글 제목
2 첨부파일 유무
3 작성자
4 게시일
5 조회수
6 링크
를 순서대로 담고 있게 하였고 각 수행이 끝날 때마다 return할 리스트에 append
하도록 하여 각 메소드가 끝날 때 리턴 하도록 하였다.