무작위로 팀을 나누는 Discord Bot을 만들었다 😇

9724 단어 디스코드Dartbot
htps : // 기주 b. 코 m / HG bs / 랜드 m_ 테아 m

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 

좋은 웹페이지 즐겨찾기