Проверьте, есть ли .словарь json содержит идентификатор пользователя discord.py

#python #json #discord.py

#python #json #discord.py

Вопрос:

Я создаю бота с рекапчей и системой прокачки.

Данные хранятся в файле .JSON (временно я пытаюсь научиться использовать MySQL и передавать данные в соответствующую базу данных, чтобы предотвратить повреждение данных)

Файл .JSON выглядит примерно так

 {
  "user": [
    {
      "u": "224906648890638337",
      "m": 89,
      "lvl": 0,
      "score": 28,
      "captcha": false,
      "captchacode": 123456
    },
    {
      "u": "635042028643811357",
      "m": 0,
      "lvl": 0,
      "score": 0,
      "captcha": false,
      "captchacode": 12345
    ]
}
 

Код Captcha — это код, который был отправлен пользователю при подключении к серверу в виде Изображения.

Что я хочу сделать, так это иметь команду проверки, которая просматривает файл .JSON и возвращает captcacode пользователя, отправившего команду проверки.

И затем он проверяет, совпадает ли отправленный им код captchacode с тем, который они отправили в команде проверки.

Мой код для этого:

 @commands.command()
    async def verification(self, ctx, code):
        with open("JSON_files/testdb.json", "r") as f:
            db = json.load(f)

        if captchacode == code:
            await ctx.send("Captcha successfully completed ✅")
            remove_unverified = discord.utils.get(ctx.message.guild.roles, name="unverified")
            await ctx.author.remove_roles(remove_unverified)
        else:
            await ctx.send("⛔| Invalid captcha! Make sure to type: `!verification (code that was sent to you)` but without the brackets")
 

Если бы кто-нибудь мог мне в этом помочь, это было бы здорово.
Прокомментируйте или просто спросите, если что-то нуждается в уточнении.
Спасибо!

Ответ №1:

Во-первых, } в вашем файле json отсутствует a

       "captcha": false,
      "captchacode": 12345
      } <- here
    ]
}
 

В вашей функции проверки вы можете перебирать каждого пользователя, а затем проверять, совпадает ли код captchacode.

Ваша функция проверки может выглядеть следующим образом

 @commands.command()
async def verification(self, ctx, code):
        with open("JSON_files/testdb.json", "r") as f:
            db = json.load(f)        
        
        
        captchacode_matched = False
        
        # iterate through every user
        for user in db["user"]:
            # get the captchacode
            user_captchacode = user["captchacode"]
            # check if the code matches
            if user_captchacode == code:
                captchacode_matched = True
                
                await ctx.send("Captcha successfully completed ✅")
                remove_unverified = discord.utils.get(ctx.message.guild.roles, name="unverified")
                await ctx.author.remove_roles(remove_unverified)
                
                # break the loop
                break

        # if no captchacode matched, send invalid captcha
        if captchacode_matched == False:
            await ctx.send("⛔| Invalid captcha! Make sure to type: `!verification (code that was sent to you)` but without the brackets")
 

Я надеюсь, что это сработает для вас

Комментарии:

1. Я почти уверен, что ваш код должен работать, но при его запуске я получаю ошибку, которая является той же ошибкой, которую я получаю с любым другим методом: user_captchacode = user["captchacode"]

2. TypeError: string indices must be integers

3. подождите, nvm, это была ошибка, потому что я неправильно отформатировал файл json, спасибо за помощь!