Discord.py货币bot;“创建银行帐户”命令仅适用于使用该命令的第一个人。如何修复?

2024-05-16 03:47:21 发布

您现在位置:Python中文网/ 问答频道 /正文

@client.event
async def on_message(message):
  if message.content.lower().startswith('.enroll'):
    dent = message.author.id
    bcall = message.author.display_name

    fart ={
    f"{dent}": [
    {
      "cash": 0,
      "bank": 0
    }
    ]
    }

    json_object = json.dumps(fart, indent = 3)

    with open("bank.json", "w") as outfile: 
      outfile.write(json_object)

    ebank = discord.Embed(title=f"{bcall}'s Enrollment", color=random.choice(colours))
    ebank.set_author(name='Eisendrache', icon_url='https://media.discordapp.net/attachments/803648238497824839/816356860369961021/eisendrache.png')
    ebank.add_field(name="User ID", value=dent, inline=False)
    ebank.add_field(name="Cash", value="0 :money_with_wings:", inline=False)
    ebank.add_field(name="Bank", value="0 :money_with_wings:", inline=False)
    ebank.set_image(url="https://media.discordapp.net/attachments/817048944022257744/817993420366282772/BOT_BANK.jpeg")
    ebank.set_footer(text=f'Eisendrache • {(timestamp)}', icon_url='https://media.discordapp.net/attachments/803648238497824839/816356860369961021/eisendrache.png')
    await message.channel.send(embed=ebank)

JSON文件:

{
   "799335941160173609": [
      {
         "cash": 0,
         "bank": 0
      }
   ]
}

因此,当我使用该命令时,第一个人的信息进入json文件。但此后任何使用它的人,它都不起作用。请帮我修一下


Tags: namehttpsjsonurlmessagenetwithmedia
2条回答

如果您想要附加到JSON文件,那么也许您应该告诉Python这就是您想要的

    with open("bank.json", "a") as outfile: 
      outfile.write(json_object)

然而,这有一个问题。具有一系列单独JSON记录的文件不是有效的JSON文件。如果你只想记住这些,没关系。但如果您计划稍后阅读这些内容并对其进行JSON解码,那么您还有额外的工作要做。这就是为什么JSON对于这样的数据库是一个糟糕的选择

您需要做的是在每次创建新用户时更新json文件。如果创建新词典并将其写入文件。旧数据将被删除

async def on_message(message):
  #other stuff
  with open('bank.json', 'r') as f:
       bank_details = json.load(f) #use better names than fart
  if str(message.author.id) in bank_details:
       #user already exists
  else:
      #create new user
      bank_details[str(message.author.id)] = {} #details here
  with open('bank.json', 'w') as f:
      json.dump(bank_details, f, indent=3)

相关问题 更多 >