0

所以,我正在尝试创建一个give命令,但每次运行它时,都会出现这个问题:Command raise an exception: TypeError: 'Member' object is not subscriptable。这是我的代码:

@client.command()
async def givecoke(message, amount, memberuser: discord.Member):
  await open_account(message.author)
  user = message.author
  users = await get_bank_data()

  memberuser[str(user.id)]["Roblox Coke"] += amount
  user[str(user.id)]["Roblox Code"] -= amount



  em = discord.Embed(title = f"Done!",color = random.randint(0, 0xffffff))
  await message.send(embed=em)

  with open("db.json","w") as f:
    json.dump(users,f)

这是我的代码的底部

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
    users[str(user.id)]["bank"] = 0

    #thanks
    users[str(user.id)]["thanks"] = 0

    #tradeable stuff
    users[str(user.id)]["B737"] = 1
    users[str(user.id)]["B747"] = 0
    users[str(user.id)]["B757"] = 0
    users[str(user.id)]["B767"] = 0
    users[str(user.id)]["B777"] = 0
    users[str(user.id)]["B787"] = 0
    users[str(user.id)]["BombardierCRJ700"] = 0
    users[str(user.id)]["Concorde"] = 0
    users[str(user.id)]["MC-DC10"] = 0
    users[str(user.id)]["MC-DC11"] = 0
    users[str(user.id)]["A320"] = 1
    users[str(user.id)]["A330"] = 0
    users[str(user.id)]["A340"] = 0
    users[str(user.id)]["A350"] = 0
    users[str(user.id)]["A380"] = 0
    users[str(user.id)]["Cookie"] = 0
    users[str(user.id)]["Roblox Coke"] = 0
    users[str(user.id)]["Coffee"] = 0


  with open("db.json", "w") as f:
    json.dump(users,f)
  return True

async def get_bank_data():
  with open("db.json", "r") as f:
    users = json.load(f)
    
  return users


async def update_bank(user,change = 0,mode = "wallet"):
  users = await get_bank_data()

  users[str(user.id)][mode] += change

  with open("db.json", "w") as f:
    json.dump(users,f)

  bal = [users[str(user.id)]["wallet"],users[str(user.id)]["bank"]]
  return bal```
4

2 回答 2

0

您尝试下标,memberuser尽管user它们是成员对象:

  memberuser[str(user.id)]["Roblox Coke"] += amount
  user[str(user.id)]["Roblox Code"] -= amount

如果你想得到这些的id,你可以做memberuser.id,然后将它们插入你的字典(这是一个全局变量users,顺便说一句不好)你可以做

if user.id in users:
    users[user.id]["Roblox Coke"] += amount
else:
    ... # insert the user into your dictionary

另外,我建议使用带有电机的数据库,例如mongodb

于 2021-05-04T13:24:05.737 回答
0

问题是,memberuser是一个不和谐的成员,但你这样做:

  memberuser[str(user.id)]["Roblox Coke"] += amount

Subscriptable 表示您可以使用[]on,因此 discord.Member 不可下标。

于 2021-05-04T13:14:13.543 回答