【发布时间】:2021-06-07 08:11:51
【问题描述】:
我试图为我的机器人创建一个余额检查命令,但是当我尝试它时,它不起作用 bot 的其他命令有效,但 bal 命令不起作用。
所做的更改:定义用户并将 {} 添加到 json 文件。
这也是我得到的新错误:
Traceback (most recent call last):
File "/home/dcoder/.cache/pypoetry/virtualenvs/project-e8xowoWm-py3.8/lib/python3.8/site-packages/discord/ext/commands/core.py", line 85, in wrapped
ret = await coro(*args, **kwargs)
File "main.py", line 21, in balance
await open_account(ctx.author)
File "main.py", line 36, in open_account
users[str(user.id)]["wallet"]=0
KeyError: '774126913664188416'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/dcoder/.cache/pypoetry/virtualenvs/project-e8xowoWm-py3.8/lib/python3.8/site-packages/discord/ext/commands/bot.py", line 902, in invoke
await ctx.command.invoke(ctx)
File "/home/dcoder/.cache/pypoetry/virtualenvs/project-e8xowoWm-py3.8/lib/python3.8/site-packages/discord/ext/commands/core.py", line 864, in invoke
await injected(*ctx.args, **ctx.kwargs)
File "/home/dcoder/.cache/pypoetry/virtualenvs/project-e8xowoWm-py3.8/lib/python3.8/site-packages/discord/ext/commands/core.py", line 94, in wrapped
raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: KeyError: '774126913664188416'
代码如下:
import discord
import discord.ext
import webserver
import json
from webserver import keep_alive
from discord.ext import commands
client = commands.Bot(command_prefix='.')
@client.event
async def on_ready():
print('{0.user}'.format(client) , 'is now online')
await client.change_presence(activity=discord.Game(name="with pokemons"))
@client.command(name='fact')
async def facts(ctx):
await ctx.send("elon musk is the richest person in world")
@client.command(name='bal')
async def balance(ctx):
await open_account(ctx.author)
users = await get_bank_data()
wallet_amt = users[str(user.id)]["wallet"]
em = discord.Embed(title = f"{ctx.author}'s balance",color = discord.Color.blue())
em.add_field(name = "Wallet balance", value = wallet_amt)
await ctx.send(embed = em)
async def open_account(user):
users = await get_bank_data()
if str(user.id) in users:
return False
else:
users[str(user.id)]["wallet"]=0
with open("mainbank.json","w") as f:
users = json.dump(users,f)
return True
async def get_bank_data():
with open("mainbank.json","r") as f:
users = json.load(f)
return users
keep_alive()
client.run('token')
【问题讨论】:
标签: python command discord.py balance