#python-3.x #discord.py
#python-3.x #discord.py
Вопрос:
Я только начал использовать .json некоторое время назад, чтобы создать экономичного бота, использующего discord.py . В моем коде есть игра в угадывание чисел, которая говорит сама за себя, и когда я играю в игру, все идет хорошо, но когда я пытаюсь проверить свой баланс, я получаю эту ошибку:
line 59, in numguess
guess = int(response.content)
ValueError: invalid literal for int() with base 10: 'game.balance'
Это мой фактический код:
@bot.command()
async def numguess(ctx):
global numguess_earnings
await open_account(ctx.author)
user = ctx.author
users = await get_bank_data()
#main--------------------
number = random.randint(0, 100)
await ctx.send("I am thinking of a number from 1-100. What is it?")
for i in range(0, 100):
response = await ctx.bot.wait_for('message')
guess = int(response.content)
if guess > number:
await ctx.send('That guess is too big! Try again!')
elif guess < number:
await ctx.send('That guess is too small! Try again!')
else:
await ctx.send(f'You got it right! It only took you {i 1} attempts! {100 - (i 1)} coins have been earned!')
numguess_earnings = 100 - (i 1)
#endmain-------------------
users[str(user.id)]["wallet"] = numguess_earnings
with open("main.json", "w") as f:
json.dump(users,f)
#ECONOMY COMMANDS===============================================================================================================================================
#balance-----------------------------------------------------------------------------------------------------------------
@bot.command()
async def balance(ctx):
await open_account(ctx.author)
user = ctx.author
users = await get_bank_data()
wallet_amt = users[str(user.id)]["wallet"]
em = discord.Embed(title = f"{ctx.author.name}'s balance", color = discord.Color.red())
em.add_field(name = "Wallet balance", value = wallet_amt)
await ctx.send(embed = em)
#helper commands---------------------------------------------------------------------------------------------------------------------------------------
#open account-----------------------------------------------------------------------------
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("main.json", "w") as f:
json.dump(users,f)
return True
#get bank data-----------------------------------------------------------------------------
async def get_bank_data():
with open("main.json", "r") as f:
users = json.load(f)
return users
Я также хотел бы отметить, что команда работала отлично, когда у меня были разделены обе команды, но как только я начал использовать команды economy в играх с числами, начали возникать ошибки. Спасибо.
Ответ №1:
Бот получил сообщение с содержимым game.balance
, которое не может быть преобразовано в целое число. Убедитесь, что вы ввели число.
Более того, используйте проверку, чтобы принимать только сообщения, автором которых является ctx.author, каналом которого является ctx.channel, а содержимое — цифра.
def check(m):
return m.author == ctx.author and m.channel == ctx.channel and m.content.isdigit()
response = await ctx.bot.wait_for('message', check=check)
guess = int(response.content)