путь не может быть найден для героя бота discord

#python #heroku #discord #discord.py

Вопрос:

Я развернул discord.py перепишите бота в Heroku, и я выполнил все шаги по развертыванию, и это сработало. Я попытался настроить свой код так, чтобы у него были изменяемые префиксы, но мне нужно было использовать папку JSON, чтобы она работала, поэтому я сделал это и добавил ее в PATH, и я добавил ее к своему представителю на GitHub, и все, казалось, работало, она загружена и развернута, но бот теперь не будет работать, потому что он не может найти префикс. Ошибка, по-видимому, заключается в том, что он не может найти путь к файлу JSON.

Мой путь получить код:

 async def get_prefix(client, message):
    with open('storage\pp.json', 'r') as f:
        prefixes = json.load(f)

    try:
        prs = prefixes[str(message.guild.id)]
    except KeyError:
        prs = "p."
    return prs
 

Ошибка Heroku с помощью «Журналы Heroku —хвост»:

 2021-08-24T17:31:59.796711 00:00 app[worker.1]: Ignoring exception in on_message
2021-08-24T17:31:59.796863 00:00 app[worker.1]: Traceback (most recent call last):
2021-08-24T17:31:59.796909 00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.9/site-packages/discord/client.py", line 343, in _run_event
2021-08-24T17:31:59.796910 00:00 app[worker.1]: await coro(*args, **kwargs)
2021-08-24T17:31:59.796918 00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.9/site-packages/discord/ext/commands/bot.py", line 979, in on_message
2021-08-24T17:31:59.796919 00:00 app[worker.1]: await self.process_commands(message)
2021-08-24T17:31:59.796928 00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.9/site-packages/discord/ext/commands/bot.py", line 975, in process_commands
2021-08-24T17:31:59.796928 00:00 app[worker.1]: ctx = await self.get_context(message)
2021-08-24T17:31:59.796937 00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.9/site-packages/discord/ext/commands/bot.py", line 886, in get_context
2021-08-24T17:31:59.796937 00:00 app[worker.1]: prefix = await self.get_prefix(message)
2021-08-24T17:31:59.796947 00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.9/site-packages/discord/ext/commands/bot.py", line 831, in get_prefix
2021-08-24T17:31:59.796948 00:00 app[worker.1]: ret = await discord.utils.maybe_coroutine(prefix, self, message)
2021-08-24T17:31:59.796950 00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.9/site-packages/discord/utils.py", line 343, in maybe_coroutine
2021-08-24T17:31:59.796951 00:00 app[worker.1]: return await value
2021-08-24T17:31:59.796961 00:00 app[worker.1]: File "/app/bot.py", line 97, in get_prefix
2021-08-24T17:31:59.796962 00:00 app[worker.1]: with open('storage\pp.json', 'r') as f:
2021-08-24T17:31:59.796979 00:00 app[worker.1]: FileNotFoundError: [Errno 2] No such file or directory: 'storage\pp.json'
 

Путь правильный, и он работает на моем компьютере. Это просто не сработает на Героку? Что-то не так с Linux?

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

1. Как выглядит структура вашего бота? Вы всегда должны указывать боту полный путь.

2. В Linux мы используем прямую косую черту ( / ) вместо обратной косой черты ( ` )

3. Чтобы предотвратить это, всегда используйте os.path.sep его, чтобы выбрать соответствующую косую черту

Ответ №1:

Поэтому, по-видимому, когда вы отправляете бота в Heroku, он помещает этого бота на сервер Linux, он же машина Linux, которая не понимает тот же путь, что и Windows:

Так и должно быть:

 async def get_prefix(client, message):
    with open('storage\pp.json', 'r') as f: #  It should be 'storage//pp.json'
        prefixes = json.load(f)

    try:
        prs = prefixes[str(message.guild.id)]
    except KeyError:
        prs = "p."
    return prs
 

Таким образом, в основном ваш путь должен быть прямой косой чертой 2 косых черты