@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'
。有人可以帮我吗?
答案 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
属性。