discord.py - 'command' 不可迭代?
discord.py - 'command' is not iterable?
我是 python 的新手,正在制作不和谐的机器人,如果这是一个菜鸟问题,我很抱歉,但我被困住了。
几个小时以来一直在努力弄明白。
我正在编写一个简单的机器人,它将遍历 28 个对象的列表并随机选择其中的 4 个。然后将这 4 个选择发送到聊天中,以便人们可以为他们的选择投票。
昨晚我在用
@client.event
async def on_message(message):
if message.author == client.user:
return
if message.content.startswith('!maps'):
await message.delete()
channel = client.get_channel(800086126173225010)
await channel.send('**New poll! Vote below now for tomorrow\'s map!**')
choice = random.sample(maps,4)
for x in range(0, 4):
mapemp.append(emoji[x]+" - "+choice[x])
msg = await channel.send('\n\n'.join(mapemp))
for x in range(0,4):
await msg.add_reaction(emoji[x])
mapemp.clear()
这很好用。但后来我发现 @bot.command
而不是 @client.event
所以我想换成那个。但是,当我尝试 运行 命令时 returns
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: TypeError: 'Command' object is not iterable
@bot.command(pass_context=True)
async def maps(ctx):
await ctx.message.delete()
channel = bot.get_channel(800086126173225010)
await channel.send('**New poll! Vote below now for tomorrow\'s map!**')
choice = random.sample(list(maps,4)
for x in range(0, 4):
mapemp.append(emoji[x]+" - "+choice[x])
msg = await channel.send('\n\n'.join(mapemp))
for x in range(0,4):
await msg.add_reaction(emoji[x])
mapemp.clear()
是什么让 @bot.command
与 @client.event
如此不同以至于我无法遍历这些选择?
我以前没有 random.sample(list(maps,4)
,但是当我尝试 运行 它时 random.sample(maps,4)
我得到了一个不同的错误。
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: TypeError: Population must be a sequence or set. For dicts, use list(d).
所以我将其更改为 random.sample(list(maps,4)
如果重要的话。
问题是你的函数名和列表名都是maps
。因此,当您 运行 choice = random.sample(list(maps,4)
时,它认为您指的是函数 maps
,而不是列表。为了解决这个问题,您要么想要
更改函数的名称(也更改命令的名称)。您只需将 async def maps(ctx):
更改为 async def newCommandName(ctx):
即可完成此操作(将 newCommandName 更改为您想要的函数新名称)。
更改 maps
列表的名称。我不知道这个定义在哪里,但我假设它是这样的maps = []
。相反,您需要将名称更改为 mapsList
之类的名称,然后将对列表的所有引用更改为使用 mapsList
。
此外,作为旁注,choice = random.sample(list(maps,4)
应该是 choice = random.sample(list(maps),4)
。
我是 python 的新手,正在制作不和谐的机器人,如果这是一个菜鸟问题,我很抱歉,但我被困住了。
几个小时以来一直在努力弄明白。
我正在编写一个简单的机器人,它将遍历 28 个对象的列表并随机选择其中的 4 个。然后将这 4 个选择发送到聊天中,以便人们可以为他们的选择投票。
昨晚我在用
@client.event
async def on_message(message):
if message.author == client.user:
return
if message.content.startswith('!maps'):
await message.delete()
channel = client.get_channel(800086126173225010)
await channel.send('**New poll! Vote below now for tomorrow\'s map!**')
choice = random.sample(maps,4)
for x in range(0, 4):
mapemp.append(emoji[x]+" - "+choice[x])
msg = await channel.send('\n\n'.join(mapemp))
for x in range(0,4):
await msg.add_reaction(emoji[x])
mapemp.clear()
这很好用。但后来我发现 @bot.command
而不是 @client.event
所以我想换成那个。但是,当我尝试 运行 命令时 returns
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: TypeError: 'Command' object is not iterable
@bot.command(pass_context=True)
async def maps(ctx):
await ctx.message.delete()
channel = bot.get_channel(800086126173225010)
await channel.send('**New poll! Vote below now for tomorrow\'s map!**')
choice = random.sample(list(maps,4)
for x in range(0, 4):
mapemp.append(emoji[x]+" - "+choice[x])
msg = await channel.send('\n\n'.join(mapemp))
for x in range(0,4):
await msg.add_reaction(emoji[x])
mapemp.clear()
是什么让 @bot.command
与 @client.event
如此不同以至于我无法遍历这些选择?
我以前没有 random.sample(list(maps,4)
,但是当我尝试 运行 它时 random.sample(maps,4)
我得到了一个不同的错误。
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: TypeError: Population must be a sequence or set. For dicts, use list(d).
所以我将其更改为 random.sample(list(maps,4)
如果重要的话。
问题是你的函数名和列表名都是maps
。因此,当您 运行 choice = random.sample(list(maps,4)
时,它认为您指的是函数 maps
,而不是列表。为了解决这个问题,您要么想要
更改函数的名称(也更改命令的名称)。您只需将
async def maps(ctx):
更改为async def newCommandName(ctx):
即可完成此操作(将 newCommandName 更改为您想要的函数新名称)。更改
maps
列表的名称。我不知道这个定义在哪里,但我假设它是这样的maps = []
。相反,您需要将名称更改为mapsList
之类的名称,然后将对列表的所有引用更改为使用mapsList
。
此外,作为旁注,choice = random.sample(list(maps,4)
应该是 choice = random.sample(list(maps),4)
。