iNdirect는 DM을 통해 사용하는 랜덤채팅 봇입니다.
2021.01.26 - 디스코드 봇 '전적이' 에 탑재되었습니다!
2021.02.08 - 디스코드 봇 'PH봇' 에 탑재되었습니다!
많은 이용 부탁드립니다!
;도움 을 입력해 전체 명령어를 확인할 수 있습니다.
먼저, 봇이 켜지면 각종 데이터와 설정을 불러온 후 utils/rchatmgr.py
의 RandchatMgr
(랜덤채팅 매니저) 인스턴스를 만듦과 동시에 매칭 작업이 이루어지는 백그라운트 태스크를 시작합니다. 그런 다음 명령어 모듈을 불러온 후 봇이 시작됩니다.
백그라운드 태스크에서는 매칭을 시작했을 때 등록되는 큐(Queue) 에서 랜덤으로 뽑아 매치(Matches)에 옮깁니다. 이를 반복합니다. 자세한 내용은 3. 매칭 중을 참조하세요.
DM 을 통해 유저가 명령어를 통해 매칭을 시작하면, 내부에서 RandchatMgr.start_match
메서드를 통해서, 유저 아이디와 인원수, 취소여부, 랜덤별명 사용여부 등을 QueueItem
클래스에 담아 큐(RandchatMgr.__queue
) 에 등록합니다.
매칭 작업은 봇이 켜져있는 동안 항상 반복 실행됩니다. RandchatMgr.match
메서드에서 이루어집니다. 여기에서 RandchatMgr.__queue
에 대기하고 있는 사용자가 있는지 확인하고, 조건이 충족되어(인원 수 등) 매칭할 수 있는 사용자만 필터링합니다. 그 결과에서 랜덤으로 뽑아 MatchItem
클래스로 데이터를 변환해 RandchatMgr.__matches
에 추가합니다. RandchatMgr.__matches
에 추가된 순간, 매칭이 완료됩니다. 만약 중간에 매칭을 취소한 경우 QueueItem
의 cancel
속성이 True
로 설정되어, 매칭 태스크에서 이것을 확인하면 큐에서 제거합니다.
매칭이 완료되면 이제 일부 명령을 제외한 모든 채팅은 매치된 사람들에게 전송되게 됩니다. 이 코드는 exts/events.py
의 Events.on_message
메서드에 있습니다.
랜덤채팅을 명령어를 통해 종료하게 되면 내부에서 RandchatMgr.exit_match
메서드에 의해 RandchatMgr.__matches
에서 해당 유저가 제거됩니다. 그러면 랜덤채팅이 종료됩니다.