Запустите изменяемое количество переменных в Python - PullRequest
0 голосов
/ 07 ноября 2018

Итак, я делаю бот-дискорд, и для этого я использую discord.py. Я хотел использовать функцию move_member для перемещения многих людей с одного канала на другой, но она позволяет перемещать только одного участника за раз, поэтому с помощью некоторых людей я создал следующую систему для разделения участников на отдельные переменные.

@client.event
async def on_message(message):
   server = message.server
   cnt = message.content
   canalote = server.get_channel(message.author.voice.voice_channel.id)
   print(str(canalote) + " this is the channel id")
   members = canalote.voice_members
   canal_def = client.get_channel("destination channel id")

   member_ids = []

   for member in members:
       member_ids.append(member.id)

   for idx, val in enumerate(member_ids, 1):
       globals()["id" + str(idx)] = val

   if message.author == client:
       return()

   elif "move" in cnt:
       for int in range(idx):
            await client.move_member(server.get_member(val), canal_def) 


   else:
       return("nothing for me to do")

Моя проблема в том, что я не знаю, как я мог бы выполнить команду move_member один раз для каждого пользователя в канале, а также изменить идентификатор пользователя, которого он перемещает. Бот захватывает все идентификаторы пользователя в канале и помещает их в список, а затем, используя словари, разделяет их на переменные с именами id1, id2, id3 ...

Я пытался использовать "random.choice", но я не могу этого сделать, если я не знаю, какие переменные существуют, а какие нет.

Как мне это сделать?

Буду признателен за любые отзывы, так как я довольно новичок в программировании.

1 Ответ

0 голосов
/ 08 ноября 2018

Создайте копию списка members, затем выполните итерацию по этому списку, вызывая move_member для каждого из его элементов:

@client.event
async def on_message(message):

   members = list(message.author.voice.voice_channel.voice_members) # create a copy of the list
   canal_def = client.get_channel("destination channel id")

   if message.author == client:
       return()
   elif "move" in message.content:
       for member in members:
            await client.move_member(member, canal_def) 
...