discord.py+Heroku部署问题:本地正常的TXT读取命令云端失效
解决Heroku上Discord机器人无法读取.txt文件的问题
看起来你遇到的核心问题是本地运行正常,但部署到Heroku后找不到指定的.txt文件,这大概率是路径逻辑或文件上传环节出了问题,我给你梳理几个排查和解决方向:
1. 先确认文件是否已同步到GitHub仓库
Heroku是从你的GitHub分支拉取代码的,如果cogs/chelp/目录下的.txt文件没被提交到GitHub,Heroku自然找不到它们:
- 检查本地的
.gitignore文件,有没有把.txt后缀或者cogs/chelp/目录加入了忽略规则?如果有,需要移除对应规则后重新提交文件。 - 直接登录你的GitHub仓库,手动查看
cogs/chelp/目录下是否存在你需要的那些.txt文件。
2. 修正文件路径的写法(关键解决步骤)
本地运行时,你的工作目录可能和机器人脚本所在目录完全一致,但Heroku的工作目录结构和本地有差异,直接用相对路径f'cogs/chelp/{name}.txt'会导致路径定位错误。推荐用os.path模块基于脚本自身位置构建绝对路径,这样不管部署到哪个环境都能精准找到文件:
修改你的命令代码如下:
import os from discord.ext import commands async def chelp(self, ctx, name = 'help'): name = name.lower() # 获取当前命令所在脚本文件的绝对路径 current_script_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接出目标txt文件的完整路径(假设chelp目录和当前脚本在同一层级) file_path = os.path.join(current_script_dir, 'chelp', f'{name}.txt') # 用with语句打开文件,自动处理关闭操作,比直接open更安全 with open(file_path, 'r', encoding='utf-8') as file: message = file.read() await ctx.send(message.format(ctx.author.name)) await ctx.message.delete()
3. 额外提醒:日志里的扩展加载失败
虽然这不是当前文件读取问题的直接原因,但日志里显示cogs.ErrorHandler和cogs.CustomCommands加载失败,建议后续也检查下这些扩展的路径或代码问题,避免影响机器人的其他功能。
内容的提问来源于stack exchange,提问作者sebkuip
相关产品推荐
相关产品推荐

