首页 > 解决方案 > Discord.py 如何使命令发生一定次数

问题描述

所以我目前正在制作一个名为 tornado 的有趣命令,它可以让用户在一堆语音通道中移动。我想要做的是使命令>tornado @Blah#1234 5并让它们在返回到语音通道 0(初始语音通道)之前通过 6 个语音通道 5 次。到目前为止,我能够命令>tornado @Blah#1234并且它们通过 6 个语音通道移动一次,然后返回到其原始语音通道。任何帮助表示赞赏!

@bot.command(pass_context=True)
async def tornado(ctx, member: discord.Member):
  voice1 = bot.get_channel(824745972768702525)
  voice2 = bot.get_channel(729916324272144439)
  voice3 = bot.get_channel(729927718296223839)
  voice4 = bot.get_channel(775807325641375744)
  voice5 = bot.get_channel(729958198957834290)
  voice6 = bot.get_channel(729958233669632020)
  voice0 = member.voice.channel
  await member.move_to(voice1) ; sleep(0.1)
  await member.move_to(voice2) ; sleep(0.1)
  await member.move_to(voice3) ; sleep(0.1)
  await member.move_to(voice4) ; sleep(0.1)
  await member.move_to(voice5) ; sleep(0.1)
  await member.move_to(voice6) ; sleep(0.1)
  await member.move_to(voice0)

标签: pythondiscorddiscord.py

解决方案


你可以用一个非常简单的for循环来做到这一点。这是一个例子:

@bot.command(pass_context=True)
async def tornado(ctx, member: discord.Member):
    voice1 = bot.get_channel(824745972768702525)
    voice2 = bot.get_channel(729916324272144439)
    voice3 = bot.get_channel(729927718296223839)
    voice4 = bot.get_channel(775807325641375744)
    voice5 = bot.get_channel(729958198957834290)
    voice6 = bot.get_channel(729958233669632020)
    voice0 = member.voice.channel
    for i in range(5):
        await member.move_to(voice1) ; sleep(0.1)
        await member.move_to(voice2) ; sleep(0.1)
        await member.move_to(voice3) ; sleep(0.1)
        await member.move_to(voice4) ; sleep(0.1)
        await member.move_to(voice5) ; sleep(0.1)
        await member.move_to(voice6) ; sleep(0.1)
    await member.move_to(voice0)

但是有一个更简单的方法:

@bot.command(pass_context=True)
async def tornado(ctx, member: discord.Member):
    voices = [
        824745972768702525,
        729916324272144439,
        729927718296223839,
        775807325641375744,
        729958198957834290,
        729958233669632020,
    ]
    voice0 = member.voice.channel
    for i in range(5):
        for voice in voices:
            await member.move_to(bot.get_channel(voice)
            sleep(0.1)
    await member.move_to(voice0)

我正在做的只是将成员移动通过voices列表中的所有语音通道(第二个for循环),5 次(第一个for循环)。最后,让他回到原来的语音频道。


推荐阅读