自動チーム分けボット

実現したいこと

・自動で作成したボイスチャンネルからそのボイスチャンネルの人のチーム分けをする
・コマンドでは、!pera 2など入力し、数字の数だけチームを分けたい
・ボイスチャンネルの人数が8名になったら3秒後などに自動でチーム分けをして移動をさせたい
・チーム分けをしたリストを特定のテキストチャンネルに出力したい

発生している問題・エラーメッセージ

あらかじめ作成してあるボイスチャンネルのチーム分けができたのですが、 自動で作成したボイスチャンネルのチーム分けがうまくいかないです。

該当のソースコード

discord.py

1import discord 2import random 3import asyncio 4#lunch.py 5intents = discord.Intents.all() 6intents.members = True 7client = discord.Client(intents=intents) 8 9 10TEXT_CHANNEL_ID = 12345667 11# TEXT_CHANNEL_ID = 12345667 12#会議部屋 13# TEAM_VOICE_CHANNEL_ID =[12345667,12345667,12345667,12345667] 14TEAM_VOICE_CHANNEL_ID =914861975408869383 15#個通部屋 16#TEAM_VOICE_CHANNEL_ID2 = [12345667,12345667,12345667,12345667,12345667,12345667,12345667,12345667] 17#TEAM_VOICE_CHANNEL_ID2 =[12345667,12345667] 18 19#男性ロール 20JARIB = 1234566712345667 21#女性ロール 22JARIG = 12345667 23 24 25token = "トークン" 26 27 28@client.event 29async def on_ready(): 30 print('-----Logged in as------') 31 print(client.user.name) 32 print(client.user.id) 33 print('-----------------------') 34 35@client.event 36async def on_message(message): 37 team_cahnnel_text = client.get_channel(TEXT_CHANNEL_ID) 38 member_number = len(message.author.voice.channel.members) 39 member=discord.Member 40 41 i=0 42 if message.content == "!me": 43 if member_number == 0: 44 await message.channel.send("さびしい…") 45 if member_number > 0: 46 for a in message.author.voice.channel.members: 47 if a.bot==True: 48 member_number=member_number-1 49 await message.channel.send("【会議にいる人数】" + str(member_number) + "人") 50 51 if message.content.startswith("!pera"): # チーム分け 52 #入力されたメッセージを、!poriで分割 53 k = int(message.content.split("!pera")[1]) 54 room_list = [[] for i in range(k)] 55 Jarib_List = [] 56 Jarig_List = [] 57 #user_name = [member.name for member in message.author.voice.channel.members] # ボイスチャットに接続中のメンバーネームを得る 58 user_list = [member for member in message.author.voice.channel.members] # ボイスチャットに接続中のメンバーのIDを得る 59 60 for player in user_list: 61 if message.guild.get_role(JARIB) in player.roles: 62 Jarib_List.append(player) 63 if message.guild.get_role(JARIG) in player.roles: 64 Jarig_List.append(player) 65 66 67 random.shuffle(Jarib_List) 68 random.shuffle(Jarig_List) 69 70 player_list = Jarib_List + Jarig_List 71 i = 0 72 73 for player in player_list: 74 room_list[i].append(player) 75 i = i + 1 76 # !pori2だったら2部屋にわけるし、!pori3だったら3部屋 77 if i == k: 78 i = 0 79 80 i = 0 81 room_members = "" 82 for room in room_list: 83 room_members += "【" + client.get_channel(TEAM_VOICE_CHANNEL_ID[i]).name + "】\n" 84 for player in room: 85 room_members = room_members + player.name + "\n" 86 #移動 87 if str(player.voice.channel.id) != TEAM_VOICE_CHANNEL_ID[i]: 88 await player.move_to(client.get_channel(TEAM_VOICE_CHANNEL_ID[i])) 89 i = i + 1 90 await team_cahnnel_text.send("@everyone 会議の人数を分けてます!\n好きなほうの会議部屋に入ってくださ~い") 91 await client.get_channel(TEXT_CHANNEL_ID).send(room_members) 92 if message.content == "=me": 93 member_number = len(message.author.voice.channel.members) 94 # if member_number == 0: 95 # await message.channel.send("さびしい…") 96 # else: 97 await message.channel.send("【会議にいる人数】" + str(member_number) + "人") 98 99 #個通 100 # if message.content.startswith("!poz"): # チーム分け 101 # #入力されたメッセージを、!poriで分割 102 # 103 # 104 # Jarib_List = [] 105 # Jarig_List = [] 106 # #user_name = [member.name for member in message.author.voice.channel.members] # ボイスチャットに接続中のメンバーネームを得る 107 # user_list = [member for member in message.author.voice.channel.members] # ボイスチャットに接続中のメンバーのIDを得る 108 # 109 # for player in user_list: 110 # if message.guild.get_role(JARIB) in player.roles: 111 # Jarib_List.append(player) 112 # if message.guild.get_role(JARIG) in player.roles: 113 # Jarig_List.append(player) 114 # 115 # 116 # random.shuffle(Jarib_List) 117 # random.shuffle(Jarig_List) 118 # Jarib = len(Jarib_List) 119 # Jarig = len(Jarig_List) 120 # 121 # ninzum = min(Jarib,Jarig) 122 # kotu_member = "" 123 # for p in range(ninzum): 124 # # 1個目の部屋が0だったら 125 # for q in range(len(TEAM_VOICE_CHANNEL_ID2)): 126 # if(len(client.get_channel(TEAM_VOICE_CHANNEL_ID2[q]).members)==0): 127 # await Jarib_List[p].move_to(client.get_channel(TEAM_VOICE_CHANNEL_ID2[q])) 128 # await Jarig_List[p].move_to(client.get_channel(TEAM_VOICE_CHANNEL_ID2[q])) 129 # kotu_member = kotu_member + client.get_channel(TEAM_VOICE_CHANNEL_ID2[q]).name + "\n・"+ Jarib_List[p].name + "\n・"+Jarig_List[p].name+"\n" 130 # break 131 # await team_cahnnel_text.send("@everyone 個通部屋を分けました!\n割り振りは以下の通りです!\n移動しなかった人は、待ちです!") 132 # await client.get_channel(TEXT_CHANNEL_ID).send(kotu_member) 133 134@client.event 135async def on_voice_state_update(member,before,after): 136 i=0 137 mem=after.channel.members 138 length = len(mem) 139 if (before.channel != after.channel): 140 # if (after.channel): 141 # for分使わないとだめだ 142 for a in mem: 143 i = i + 1 144 if (a.bot == True): 145 length=length-1 146 147 148 if (length == 8): 149 pokemon = await client.get_channel(TEXT_CHANNEL_ID).send("<@&915017082716967033>"+"\n8人以上になりました。部屋をわけてみませんか?") 150 # ヒトカゲの絵文字ID 151 await pokemon.add_reaction("<:01monsterball:915056383295098900>") 152 153# @client.event 154# async def on_reaction_add(reaction,user): 155# if(reaction.message.content.startswith("8人以上になりました。部屋をわけてみませんか?")): 156# #ヒトカゲの絵文字ID 157# print(reaction.emoji.id) 158# if(reaction.emoji.id == 915056383295098900): 159# team_cahnnel_text = client.get_channel(TEXT_CHANNEL_ID) 160# 161# k = 2 162# room_list = [[] for i in range(k)] 163# Jarib_List = [] 164# Jarig_List = [] 165# # user_name = [member.name for member in message.author.voice.channel.members] # ボイスチャットに接続中のメンバーネームを得る 166# user_list = [member for member in user.voice.channel.members] # ボイスチャットに接続中のメンバーのIDを得る 167# 168# for player in user_list: 169# if reaction.message.guild.get_role(JARIB) in player.roles: 170# Jarib_List.append(player) 171# if reaction.message.guild.get_role(JARIG) in player.roles: 172# Jarig_List.append(player) 173# 174# random.shuffle(Jarib_List) 175# random.shuffle(Jarig_List) 176# 177# player_list = Jarib_List + Jarig_List 178# i = 0 179# 180# for player in player_list: 181# room_list[i].append(player) 182# i = i + 1 183# # !pori2だったら2部屋にわけるし、!pori3だったら3部屋 184# if i == k: 185# i = 0 186# 187# i = 0 188# room_members = "" 189# for room in room_list: 190# room_members += "【" + client.get_channel(TEAM_VOICE_CHANNEL_ID[i]).name + "】\n" 191# for player in room: 192# room_members = room_members + player.name + "\n" 193# # 移動 194# if str(player.voice.channel.id) != TEAM_VOICE_CHANNEL_ID[i]: 195# await player.move_to(client.get_channel(TEAM_VOICE_CHANNEL_ID[i])) 196# i = i + 1 197# await team_cahnnel_text.send("@everyone 会議の人数を分けてます!\n好きなほうの会議部屋に入ってくださ~い") 198# await client.get_channel(TEXT_CHANNEL_ID).send(room_members) 199 200 201client.run("トークン") 202# client.run("トークン")

試したこと

静的に用意したボイスチャンネルのチームわけはできました
わけた人のチーム分けも静的なものはできました。
リストも静的なものは出力できました。

お手柔らかにお願いします

コメントを投稿

0 コメント