Невозможно получить данные из JSON с условиями - PullRequest
0 голосов
/ 30 января 2019

В настоящее время я почти новичок в программировании и создаю многоязычного бота Discord, написанного на Discord.py Rewrite, который будет получать свои строки из определенного JSON в соответствии с языком сервера.

Вот мой код в начале моей тестовой команды:

async def _bottranslate(self, server, str_name):

        # We are looking for our guild's language
        for guild in self.bot.guilds:
            server = guild

        # Ask to MongoDB which language they use
        language = self.settings.getServerConfig(server, "Language")
        langfile = ''

        # In case - something went wrong with server config
        #if language is None:
        #   langfile = "en_US.json"

        # Removed - it always returns English Strings

        # In case it's English
        if language == "English":
            langfile = "en_US.json"

        # In case it's Turkish  
        if language == "Turkish":
            langfile = "tr_TR.json"

        # Check path if our json exists
        if os.path.exists(langfile):
            f = open(langfile,'r')
            filedata = f.read()
            f.close()
            selflanguage = json.loads(filedata)

            for lang in selflanguage: 
                botstring = '{}'.format(lang[str_name])

        else: # Warn your bot admin
            selflanguage = []
            print("WARNING! - Corrupted/Deleted translation {} detected, please take a look on it".format(langfile))

        # End of Translation stuff

Вот моя команда для моего первого теста:

    @commands.command(pass_context=True)
    async def worddefine(self, ctx, *, word : str = None):
        """Search a definition from UrbanDictionnary."""

        if not word:
            msg = await self._bottr(ctx.guild, str_name="no_word")
            await ctx.channel.send(msg)
            return

Бот получает «Нет» в качестве ответа и не можетЧтобы отправить сообщение, появилось сообщение «Невозможно отправить пустое сообщение».Вот полный ответ:

Ignoring exception in command worddefine:
Traceback (most recent call last):
  File "AppData\Local\Programs\Python\Python36\lib\site-packages\discord\ext\commands\core.py", line 62, in wrapped
    ret = await coro(*args, **kwargs)
  File "Cogs\UrbanDict.py", line 74, in worddefine
    await ctx.channel.send(msg)
  File "AppData\Local\Programs\Python\Python36\lib\site-packages\discord\abc.py", line 772, in send
    data = await state.http.send_message(channel.id, content, tts=tts, embed=embed, nonce=nonce)
  File "AppData\Local\Programs\Python\Python36\lib\site-packages\discord\http.py", line 214, in request
    raise HTTPException(r, data)

discord.errors.HTTPException: BAD REQUEST (status code: 400): Cannot send an empty message

Мои JSON правильно отформатированы, эта ошибка исчезает, когда я удаляю закомментированные строки в _bottranslate, всегда возвращает английские строки, и это не то, что мне нужно.

Я предполагаю, что бот не может получить языковую переменную из MongoDB, но я не понимаю, почему он правильно получает его потребности от Mongo для других команд.

Спасибо за помощь!

...