我正在尝试使用Discord.py创建自己的Discord机器人,并跟踪单个玩家的积分,我使用了一个列表,一个带有玩家名称,另一个带有玩家的积分,并且两者都是相同的数字在那个名单上。我想做的是将发送命令的人员的姓名添加到玩家列表中。 代码:
@bot.command()
async def pointadd(ctx, amount, points=points, players=players):
yes = 1
for x in players:
if players[x] == {ctx.message.author}:
yes = ('Yes')
level = x
if yes == ('Yes'):
points[level] = (points[level] + amount)
await ctx.send(points[level])
else:
players.append(ctx.message.author)
points.append('0')
错误:
Ignoring exception in command pointadd:
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/discord/ext/commands/core.py", line 85, in wrapped
ret = await coro(*args, **kwargs)
File "/home/pi/pipy_bot/bot.py", line 58, in pointadd
if players[x] == {ctx.message.author}:
TypeError: list indices must be integers or slices, not str
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/discord/ext/commands/bot.py", line 903, in invoke
await ctx.command.invoke(ctx)
File "/usr/local/lib/python3.5/dist-packages/discord/ext/commands/core.py", line 859, in invoke
await injected(*ctx.args, **ctx.kwargs)
File "/usr/local/lib/python3.5/dist-packages/discord/ext/commands/core.py", line 94, in wrapped
raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: TypeError: list indices must be integers or slices, not str
我也可以使用一些帮助使之变得更整洁。
答案 0 :(得分:0)
x
是一个players
列表元素,我想是一个discord.Member
对象。列表索引必须是整数,不能有其他任何内容,因此会出现此错误。您必须写:
@bot.command()
async def pointadd(ctx, amount, points=points, players=players):
found = False
for x in players:
if x == ctx.message.author:
found = True
level = players.index(x)
if found:
points[level] = (int(points[level]) + amount)
await ctx.send(points[level])
else:
players.append(ctx.message.author)
points.append('0')
({points[level]
必须是整数才能进行计算,所以我写了int(points[level])
)
可以使用字典来代替使用列表:
#Your points definition
points = {}
#Your pointadd command
@bot.command()
async def pointadd(ctx, amount: int, points=points):
try:
points[ctx.author.id] += amount
except:
points[ctx.author.id] = 0
await ctx.send(points[ctx.author.id])
最后,您的points
词典将如下所示:
{
'user_id_1': xp_amount_1
'user_id_2': xp_amount_2
...
}