使用foor循环discord.py将所有成员移动到通道命令

时间:2020-01-22 23:09:43

标签: python python-3.x discord.py

@bot.command()
async def move(ctx, channel : discord.VoiceChannel):
    for members in ctx.author.voice_channel:
        await members.move_to(channel)

我希望在执行者可以进入某个通道并使用'.move (name of channel)的地方使用该命令,然后它将该通道中的所有成员移动到(name of channel)。我收到的错误之一是它忽略空格,因此,如果语音通道名称中有空格,则只会在空格之前包含单词。我也得到了:Command raised an exception: AttributeError: 'Member' object has no attribute 'voice_channel'。有人可以帮我吗?

2 个答案:

答案 0 :(得分:0)

您可以使用仅关键字参数将消息的其余部分作为单个参数进行处理。您还需要通过ctx.author.voice.channel

访问呼叫者语音通道
from discord.ext.commands import check

def in_voice_channel():  # check to make sure ctx.author.voice.channel exists
    def predicate(ctx):
        return ctx.author.voice and ctx.author.voice.channel
    return check(predicate)

@in_voice_channel()
@bot.command()
async def move(ctx, *, channel : discord.VoiceChannel):
    for members in ctx.author.voice.channel.members:
        await members.move_to(channel)

答案 1 :(得分:0)

您需要为positional parameters for commands引用带空格的参数。
另外,您可以使用keyword-only argument for the command来消耗其余的输入。

正如异常消息告诉您的那样,Member个对象没有voice_channel属性。
您将改为使用Member.voice属性,以获取该用户/成员的VoiceState对象。然后,您可以将VoiceState.channel用于用户/成员连接的VoiceChannel

此外,请注意,您无法为连接到该语音通道的成员自己VoiceChannel进行迭代。您将改为使用VoiceChannel.members属性。