https://gall.dcinside.com/teamfortress2/301145
discord.js를 이용해서 게임 디스코드에서 쓸 봇을 생각해봤는데
코딩은 파이썬 잠깐 배워본 게 전부야
봇이 작동하는 방식에 대해 말로 풀어써봤는데
이걸 실제로 코드로 구현하려면 초보가 얼마나 걸릴지 궁금해서 그래
사실 이거 이후에도 rcon 라이브러리로 스팀 서버와 연동시키는 것도 추가해야 하는데, 그건 차차 공부하면서 업데이트 한다고 치고
일단 뼈대부터 지어보려고
장문 미안해 생초보 한번만 도와줘!!!
언어는 JS야
1. 인증 단계
https://github.com/eggsywashere/discord-steam-verification
위 api를 이용해
스팀 인증한 사람에겐 인증 태그와
대기열에 참가할 수 있는 역할 "인증됨"을 부여한다.
스팀 인증한 사람의 아이디 정보가 봇에 저장되므로 이걸로 섭주의 취향에 따라 멤버들의 닉네임에 현재 스팀 닉네임 태그를 붙이거나 멤버들의 닉네임을 스팀 닉네임으로 강제로 변경하는 것이 가능하다.
2. 대기열 참가 단계
봇이 보이스 채널 입장을 감지할 수 있는지 모르겠지만(아마 될듯) 안되면 명령어로 대기열 [참가]하면 봇이 멤버를 move 커맨드로 대기열 보이스 채널로 이동시킨다.
해당 멤버에 "매치 대기 중" 역할을 부여한다.
[참가 자원딕]하면 자원딕 대기열로 이동시키고
"자원딕 대기 중"을 부여한다.
[불참]하면 대기열에서 나가지고 해당 멤버의
"매치 대기 중", "자원딕 대기 중"을 박탈한다.
빈 서버가 있으면(예시:3섭) 대기열에서 차출 탐색을 시작한다.
차출 탐색 값이 참으로 밝혀지면 봇이 이를 공지하고 5초 동안 참이 유지되면 팀 분배 단계로 넘어간다.
빈 서버 판단 방법: 해당 서버와 관련된 역할자 수0
2-1. 차출 탐색 단계
자원딕이 3명 이상일 경우: 자원딕이 2명일 경우로 넘어간다.
자원딕이 2명일 경우: 대기열이 10명에서 부족하면
부족한 만큼 봇이 대기열 모집 전용 채널에(멤버는 채팅 불가) ~명 모어를 외친다(외침은 멤버가 명령어로 반복 가능).
10명이상이면 그 중 10명을 뽑아 팀분배 채널로 옮기고 딕2명을 (3섭)딕 분배 채널로 옮기고 다음 단계로 넘어간다.
자원딕이 1명일 경우: 대기열이 11명이하면 ~~~
11명이상이면 그 중 한 명을 자원딕 채널로 움직이고 10명을 (3섭)팀 분배 채널로 옮기고 딕2명을 (3섭)딕 분배 채널로 옮기고 다음 단계로 넘어간다.
자원딕이 0명일 경우: 대기열이 12명이하면 ~~~
12명이상이면 그 중 두 명을 자원딕 채널로 움직이고 10명을 (3섭)팀 분배 채널로 옮기고 다음 명령어로 넘어간다.
3. 팀 분배 단계
아직 전 게임으로부터 남아있는 각 팀 보이스 채널의 멤버들을 킥 한다.
딕 분배 채널로부터 자원딕을 무작위 배치 한 후 팀 분배 채널로부터 나머지도 무작위 배치한다.
각 보이스 채널에 배치된 팀원들에 "3섭 준비 안됨" 역할을 부여한다.
3섭 역할("3섭 게임 중", "3섭 준비 안됨", "3섭 준비됨")을 가진 사람만 읽고 참여할 수 있는 3섭 채팅 채널에서 맵과 레디를 투표함(맵을 투표할 수 있을진 모르겠음)
4. 투표 단계
봇이 팀원들에게 준비하라고 dm을 지속적으로 보낸다.
[준비]하면 그 멤버에 "3섭 준비됨"역할을 부여하고 "3섭 준비안됨" 역할을 박탈한다.
이 단계에서 한 명이라도 [닷지]하면 판이 깨진다.
이 경우 그 판 멤버들의 역할을 박탈하고 [닷지]한 멤버를 제외한 모든 멤버를 대기열 참가 단계로 되돌린다.
일정 시간(20초~ 1분30초) 안에 모든 멤버가 [준비]하지 않아도 판은 깨진다.
이 경우에도 준비하지 않은 멤버를 제외한 모든 멤버를 대기열 참가 단계로 되돌린다.
닷지하거나 afk한 멤버는 서버명단에 기록하고
30분간 대기열에 참석 불가능한 페널티를 부여하고 해당 행동이 반복될 시 어드민 재량으로 일정 기간 밴한다.
"3섭 준비됨"의 역할자가 12명이 되면 게임 시작 단계로 넘어간다.
+디스코드 봇으로 서버의 맵을 바꾸는 것이 가능하면 맵 투표도 실시한다.
5. 게임 시작 단계
"3섭 게임 중"의 역할을 부여하고 "3섭 준비됨"의 역할을 박탈한다.
dm과 채팅방으로 해당 서버의 접속 링크를 보낸다.
예시 3섭) steam://connect/183.103.205.30:27121/supermatch/
6. 게임 중 단계
서버 내의 채팅은 relay를 이용해 채팅 채널과 연동하는 것이 가능하다.
접속하지 않은 멤버가 있거나, 게임 내 채팅 비매너가 발생했다면 3섭 채팅채널에서 [리폿]기능을 활용하면 된다.
매치 진행이 불가한 상황이라면 곧바로 매치를 끝내도 좋다.
7. 게임 종료 단계
[끝]을 사용하면 봇이 채팅으로 게임이 끝났는지 묻는다.
이때 이모지 버튼 눌림 횟수가 일정 이상 도달하면(4~6)
해당 매치의 로그를 로그 전용 채팅 방에 띄우는 동시에
멤버들의 역할을 박탈한다.
3쥴요약
흑흑
이정도 기획력과 설계력이면 그냥 알아서 하면 됨 능력자네 ㅅㄱ
고마워 ㅠㅠ
자바스크립트는 새로 배워야겠지만 잘 할 수 있을 거 같군
사랑해
디스코드봇 이런거같운 구체적인?특정한 지식은 설명해줘도 얼마나 걸릴지 모름
그러겠네..
다음 기획서는 좀더 가능단위 목록으로 나열해라
감사합니다.. 필요한 기능들 펑션같은 단위로 나누어서 체계화 하는 말씀이지요?? 확실히 그래야 부딪히는게 가능할 것 같슴니다..