基于 Python 的 Discord Bot 在本地工作,但从未在 heroku 上托管

Posted

技术标签:

【中文标题】基于 Python 的 Discord Bot 在本地工作,但从未在 heroku 上托管【英文标题】:Python-based Discord Bot working locally but not once hosted on heroku 【发布时间】:2019-07-22 21:25:45 【问题描述】:

我创建了一个 discord 机器人,它在本地启动时可以完美运行,但一旦托管和启动,除了 !help 之外不会响应任何命令。 我得到了错误日志,它们是:

尝试 !kick @user :

discord.ext.commands.errors.MissingRequiredArgument: user_kick is a required argument that is missing

该命令可以完全离线工作。

kick 命令是这样写的:

@bot.command()
async def kick(ctx, user_kick : discord.Member):
  role = discord.utils.get(user_kick.guild.roles, name=config['perm_role'])
  if role in ctx.message.author.roles:
    await user_kick.kick(reason=None)
  else:
    await ctx.send(content="Permission denied!")

我有(我认为?)正确的 requirements.txt、runtime.txt 和 Procfile 文件。

编辑:

我的 requirements.txt 文件如下所示:

-e git+git://github.com/Rapptz/discord.py.git@async#egg=discord

那里有什么要改变的吗? 感谢您阅读我,如果这不是在这里提问的正确方式,我们深表歉意。

编辑 2:

仍然不知道为什么会这样。

【问题讨论】:

请不要链接,尝试发布一个最小的、可行的、可重现的示例,我们不会查看您的存储库 编辑了我的帖子,解释了 kick 命令而不是整个 git heroku 自动休眠? 我确定工作人员 Dyno 已激活,因为该机器人仅响应帮助命令。 【参考方案1】:

我的一些机器人经常遇到这样的问题。如果您的机器人使用on_message,那么它将干扰其他命令。

要解决此问题,请在 on_message 中的某处添加 await client.process_commands(message)。如果您没有使用on_message,那么我建议您再检查一次 requirements.txt。

例子:

@client.event
async def on_message(message):
    if message.content.startswith("!thecommand"):
                    #whatever you had in the command


    await client.process_commands(message)

【讨论】:

我根本没有使用on_message,所以我要在requirements.txt中寻找一些东西。 你在用什么?您的 requirements.txt 中有什么内容? 我的 requirements.txt 在帖子里

以上是关于基于 Python 的 Discord Bot 在本地工作,但从未在 heroku 上托管的主要内容,如果未能解决你的问题,请参考以下文章

Python 3.6 Discord bot Bot 事件冲突

Discord bot python:discord.errors.ClientException:找不到ffmpeg

Discord Bot Python 让它创建嵌入

Discord Bot Client.User 在 Python 中转换为 Discord.Utils 时出错

Python Discord Bot 未加入语音频道

Discord Bot Python 提到