무작위로 팀을 나누는 Discord Bot을 만들었다 😇
GODFIELD 라든지 홍백전을 할 때에, 얼른 팀 나누어 주는 툴이 있으면 편리하다고 생각해, 만들기로 했다.
이미 그러한 웹사이트 1 2 이나 Discord Bot 3 4
사양
사양으로서는, 커맨드(!rt)와 팀수를 받아, 커맨드를 친 사람이 참가하고 있는 VoiceChannel의 참가 멤버로 팀 분할을 한다(코코 중요). 통화에 참가하고 있는 멤버로 팀 나누기 때문에, 멤버의 이름이나 일람을 일일이 입력할 필요가 없다는 천재적 발상😜🤔
사용한 언어는 Dart🎯로 nyxx 라는 Discrod API의 wrapper Package를 사용했다.
팀 분할 로직 구현
팀이 나눌 수 없는 경우 어떻게 하는지 꽤 고민했지만, 깨끗한 남을 보결로 해, 판단은 그 상황에 맡기기로 했다😇
random_team.dart
Map<String, List<String>> getRondomTeam(int teamNum) {
int fill = players.length % teamNum;
Map<String, List<String>> teams = {};
teamNameList.shuffle();
players.shuffle();
int peoplePerTeam = players.length ~/ teamNum;
teamNameList.take(teamNum).toList().asMap().forEach(
(i, teamName) =>
teams[teamName] = players.skip(i * peoplePerTeam).take(peoplePerTeam);
teams['😇 sub'] = players.sublist(players.length - fill, players.length);
return teams;
}
players.length ~/ teamNum
는 (players.length/teamNum).toInt()
와 동의어, ~/
연산자는 잘 하는 나눗셈과 int 에의 캐스트를 동시에 해 준다😍팀명은 가르팡에 얽힌 이모티콘으로 만들려고 했는데, 이런 이모티콘이 없었기 때문에, 어쩔 수 없이 왠지 같은 동물의 이모티콘으로 하기로 했다😢 자세한 구현은 GitHub !
DiscordBot Embed 구현
embed (내장 메시지)는 ↓ 같은 사람
메인 구현은 nyxx의 문서를 보거나 이
embed_builder.dart
EmbedBuilder embed = (EmbedBuilder()
..title = "random team"
..color = DiscordColor.fromInt(13369286));
randomTeam.forEach((key, value) => embed.addField(
name: key,
content: value.isNotEmpty ? ' ' + value.join(', ') : '👻',
inline: true));
↑의 코드와 같이
embed_builder
로 embed를 작성해, send(embed: embed)
와 같은 느낌으로 embed를 표시할 수 있습니다만, embed.addField(name: name, content: '')
와 같이, content에 공문자( ''
)를 건네주면 에러 을 토하지 않고 embed도 표시되지 않기 때문에, 뭔가 건네주어야 한다VoiceChannel에 참여하는 회원 획득
소중한 사촌을 쓰는 것을 잊었다 🤣
get_vc_member.dart
var channel = (e.message.author as Member).voiceState.channel;
List<String> users = channel.connectedUsers
.map((voiceState) => voiceState.user.username)
.toList();
1행째로, 커멘드를 친 user의 참가하고 있는 VoiceChannel를 취득해, 2행째의
channel.connectedUsers
로, 통화에 참가하고 있는 멤버의 리스트를 취득할 수 있다📞결론
개인적으로 Bot는, 만들기 쉽고 실용적이고 공부도 되는 최강의 교재라고 생각하기 때문에 꼭 만들어 보길 바란다 🤖 특히 DiscordBot는, 대부분의 언어로 도서관 가 준비되어 있으므로 매우 추천
htps //w w. 자메 s 테아세. 이. u k / 테이 게이와 r / ↩
htps //w w. 케 mk. 코 m / 랜드 m-o-mege 네라와 r ↩
htps : // 료우동. 하테나아 ry. jp/엔트리/2019/04/07/130910 ↩
htps : // ぢs이 rd 보 ts. rg/보트/457161248430358538 ↩
Reference
이 문제에 관하여(무작위로 팀을 나누는 Discord Bot을 만들었다 😇), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/dennougorilla/items/c1b808d6fb7a37b71476텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)