import discord
from discord.ext import commands
import os
import json
import random
from discord.ext.commands import Bot
os.chdir("")
有正确的路径,我检查了这个
Bot = commands.Bot(command_prefix = "$")
token = 'my token'
这也是正确的
@Bot.command()
async def give(ctx, member:discord.Member, amount = None):
await open_account(ctx.author)
await open_account(member)
amount = int(amount)
if amount == None:
await ctx.send("Please enter the amount")
return
bal = await update_bank(ctx.author)
if amount>bal[1]:
await ctx.send("You don't have that much money")
return
if amount<=0:
await ctx.send("Amount must be positive")
return
await update_bank(ctx.author, -1*amount, "wallet")
await update_bank(member, 1*amount, "wallet")
emb = discord.Embed(description = f"You gave {member.name} {amount} gold coins", color = 0x2ecc71)
await ctx.send(embed = emb)
有完整的命令
async def open_account(user):
users = await get_bank_data()
if str(user.id) in users:
return False
else:
users[str(user.id)] = {}
users[str(user.id)]["wallet"] = 0
with open("mainbank.json", "w") as f:
json.dump(users, f)
return True
async def update_bank(user, change = 0, mode = "wallet"):
users = await get_bank_data()
users[str(user.id)][mode] += change
with open("mainbank.json", "w") as f:
json.dump(users, f)
bal = [users[str(user.id)]["wallet"]]
return bal
如您所见,给出命令是行不通的。我也知道,这个问题不在于 open_account 函数,但我不确定 update_bank。
有一个错误:
if amount>bal[1]:
IndexError: list index out of range
如果你有想法,请写下来。
答案 0 :(得分:0)
您正在将 bal 的列表嵌套在另一个列表中:[users[str(user.id)]["wallet"]]
。因此,如果 users[str(user.id)]["wallet"]
的值为 [0, 1]
,它实际上是 [[0, 1]]
。没有索引 1,只有索引 0 和一个嵌套列表,直到索引 1。您可以通过简单地删除额外的括号来解决这个问题:users[str(user.id)]["wallet"]
。
您可以通过print
bal
轻松发现这一点。知道如何调试是一项非常有用的技能。