#python #python-3.x #discord.py #discord.py-rewrite
#python #python-3.x #discord.py #discord.py-переписать
Вопрос:
Я работал над командой под названием «игра», однако для этой команды вам понадобится планшет в вашем инвентаре. Подводя итог, мой вопрос: как вы можете сделать так, чтобы бот проверял, есть ли предмет (планшет) в вашем инвентаре? я боролся с этим в течение последних 3 часов, я несколько раз пытался изменить код, например, изменить файл JSON, чтобы иметь дополнительный уникальная редкость и проверьте с помощью этой редкости, есть ли предмет, однако это также не имело никакого эффекта. Я не получаю никаких ошибок, но и никаких успехов, когда я запускаю команду, ничего не происходит, никаких ошибок, ничего не происходит на сервере. Любая помощь будет признательна!
Команда:
@client.command()
async def game(ctx):
await open_account(ctx.author)
user = ctx.author
users = await get_bank_data()
try:
bag = users[str(user.id)]["bag"]
except:
bag = []
if bag.contains("tablet"):
await ctx.send("More coding. . .")
else:
await ctx.send("Buy a tablet!")
Файл JSON:
{"703287162640007278": {"wallet": 431, "bank": 534404, "bag": [{"item": "milk", "amount": 2}, {"item": "Golden Coin", "amount": 1}, {"item": "alarm", "amount": 1}, {"item": "tablet", "amount": 1}, {"item": "pistol", "amount": 1}]}
Ответ №1:
Если я правильно понимаю, bag
это список dicts, т.Е. Вы уже получили доступ к ключу 'bag'
из файла JSON:
"bag": [{"item": "milk", "amount": 2}, {"item": "Golden Coin", "amount": 1}, {"item": "alarm", "amount": 1}, {"item": "tablet", "amount": 1}, {"item": "pistol", "amount": 1}]
Вам нужно проверить, есть ли таковые, если в любом из этих терминов есть ключ item
со значением tablet
. Так что:
if any(element['item'] == 'tablet' for element in bag):
РЕДАКТИРОВАТЬ: попробуйте что-то вроде этого:
bag = users[str(user.id)].get("bag")
print(bag)
# it should print the bag or None
# [{"item": "milk", "amount": 2}, {"item": "Golden Coin", "amount": 1},
# {"item": "alarm", "amount": 1}, {"item": "tablet", "amount": 1},
# {"item": "pistol", "amount": 1}]
if bag:
if any(element['item'] == 'tablet' and element['amount'] > 0
for element in bag):
# do something if tablet in bag
else:
# no tablet in bag
else:
# do something is there is no bag
ДЕМОНСТРАЦИЯ:
bag = [{"item": "milk", "amount": 2}, {"item": "Golden Coin", "amount": 1},
{"item": "alarm", "amount": 1}, {"item": "tablet", "amount": 1},
{"item": "pistol", "amount": 1}]
if bag:
if any(element['item'] == 'tablet' and element['amount'] > 0
for element in bag):
print('tablet found')
else:
print('no tablet in the bag')
else:
print('no bag')
выходной сигнал:
tablet found
Комментарии:
1. Спасибо! Это решило основную проблему, однако проблема все еще остается, если ‘amount’ = 0, товар все еще есть, но вы ничего не купили. Но еще раз спасибо вам за главную проблему! Теперь я постараюсь бороться с суммой 🙂
2. просто добавьте
and element['amount'] > 0
условие3. также вместо списка dicts может быть лучше реорганизовать его как простой dict, например
'bag':{'milk;:2, 'tablet':1...}
. Это значительно упростит доступ.4. да, я пришел к тому же решению, однако теперь оно не дает мне ошибок и снова не выводит данные на сервер. Я в замешательстве, так как код выглядит хорошо
5. Удалите пробел try except и проверьте, что вы получаете за сумку