discord.py + mongodb
У меня в базе данных mongodb есть 10 полей типа string. Мне нужно сделать так, чтобы код проверял значение какого поля равно "None" и заносил в это поле нужные данные , как это можно реализовать?
Вот код инвентаря и код команды которая должная отвечать за снятие предмета из активного слота и помещения предмета в любой свободный слот.
Код инвентаря
@commands.command()
async def inv (self, ctx):
data = invcol.find_one({"_id": ctx.author.id})
await ctx.send(embed = discord.Embed(
description =
f"**[Инвентарь Пользователя __{ctx.author}__]**" + '\n' +
"**----------------------------------------------**" + '\n' +
f"**1 slot: {invcol.find_one({'_id': ctx.author.id})['1 slot']}**" + '\n' +
f"**2 slot: {invcol.find_one({'_id': ctx.author.id})['2 slot']}**" + '\n' +
f"**3 slot: {invcol.find_one({'_id': ctx.author.id})['3 slot']}**" + '\n' +
f"**4 slot: {invcol.find_one({'_id': ctx.author.id})['4 slot']}**" + '\n' +
f"**5 slot: {invcol.find_one({'_id': ctx.author.id})['5 slot']}**" + '\n' +
f"**6 slot: {invcol.find_one({'_id': ctx.author.id})['6 slot']}**" + '\n' +
f"**7 slot: {invcol.find_one({'_id': ctx.author.id})['7 slot']}**" + '\n' +
f"**8 slot: {invcol.find_one({'_id': ctx.author.id})['8 slot']}**" + '\n' +
f"**9 slot: {invcol.find_one({'_id': ctx.author.id})['9 slot']}**" + '\n' +
f"**10 slot: {invcol.find_one({'_id': ctx.author.id})['10 slot']}**" + '\n' +
"**----------------------------------------------**" + '\n' +
f"**[Активные Cлоты]**" + '\n' +
"**----------------------------------------------**" + '\n' +
f"**Шлем: {invcol.find_one({'_id': ctx.author.id})['helmet slot']}**" + '\n' +
f"**Куртка: {invcol.find_one({'_id': ctx.author.id})['jacket slot']}**" + '\n' +
f"**Пояс: {invcol.find_one({'_id': ctx.author.id})['belt slot']}**" + '\n' +
f"**Перчатки: {invcol.find_one({'_id': ctx.author.id})['gloves slot']}**" + '\n' +
f"**Плащ: {invcol.find_one({'_id': ctx.author.id})['raincoat slot']}**" + '\n' +
f"**Штаны: {invcol.find_one({'_id': ctx.author.id})['pants slot']}**" + '\n' +
f"**Обувь: {invcol.find_one({'_id': ctx.author.id})['shoes slot']}**" + '\n' +
f"**Ожерелье: {invcol.find_one({'_id': ctx.author.id})['necklace slot']}**" + '\n' +
f"**Кольцо: {invcol.find_one({'_id': ctx.author.id})['ring slot']}**" + '\n' +
f"**Оружие: {invcol.find_one({'_id': ctx.author.id})['weapon slot']}**" + '\n' +
"**----------------------------------------------**"))
команда которая отвечает за снятие предмета из активного слота и перемещения его в свободный слот
@commands.command()
async def actslot(self, ctx, number: int = None, action: str = ""):
data = invcol.find_one({"_id": ctx.author.id})
helmets = ['Кожаный Шлем']
if number == 1 and action == "снять":
if invcol.find_one({'_id': ctx.author.id})['helmet slot'] == "None":
await ctx.send(embed = discord.Embed(
description =
"**[Ошибка]**" + '\n' +
f"**Слот пустой.**"))
elif invcol.find_one({'_id': ctx.author.id})['helmet slot'] in helmets:
Тут должна быть проверка на свободный слот и перенос шлема из активного слота в свободный.
pass
Ответы (1 шт):
Вы не предоставили код, но проверку можно реализовать подобным образом:
if |достаем из бд нужные данные| is None: #вместо None можно записать нужное вам базовое значение, например "Не указано".
#здесь заносим данные
else:
return
По вашему комментарию я всё же не совсем понимаю что вы хотите реализовать и почему не можете. Как вы говорите у вас есть например 10 слотов. Я думаю, что здесь будет проще проверять каждый слот. Предположим у вас есть базовое значение для десяти слотов Пусто.
И так. *_slot у нас будет ваше значение из бд.
'Пусто' - базовое значение или значение по умолчанию.
Дальше мы просто проверяем каждый слот:
if 1_slot == 'Пусто':
#заносим предмет в базу данных.
#return
if 2_slot == 'Пусто':
#заносим предмет в базу данных.
#return
if 3_slot == 'Пусто':
#заносим предмет в базу данных.
#return
if 4_slot == 'Пусто':
#заносим предмет в базу данных.
#return
if 5_slot == 'Пусто':
#заносим предмет в базу данных.
#return
if 6_slot == 'Пусто':
#заносим предмет в базу данных.
#return
if 7_slot == 'Пусто':
#заносим предмет в базу данных.
#return
if 8_slot == 'Пусто':
#заносим предмет в базу данных.
#return
if 9_slot == 'Пусто':
#заносим предмет в базу данных.
#return
if 10_slot == 'Пусто':
#заносим предмет в базу данных.
#return
Таким образом пока каждая ячейка не заполниться они будут складываться по порядку. Да это сделает код больше, но тем не менее более читабельным и удобным.