You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.py部署Heroku报错:commands无slash_command属性的解决问询

解决方案

1. 先排查依赖版本问题

你本地能用@commands.slash_command(),大概率是用了discord.py的fork版本(比如nextcord)或者额外的slash命令扩展库,但Heroku上默认装的是原生discord.py——原生discord.py的commands模块根本没有slash_command这个属性,所以报错。

先核对本地和Heroku的依赖:

  • 查看本地的requirements.txt,如果写的是nextcord而不是discord.py,那Heroku必须装nextcord,不能用原生库。
  • 如果本地用的是原生discord.py还能用这个装饰器,那你肯定是装了discord-ext-slash-command这类第三方扩展,Heroku也得同步装这个库。

2. 改用官方原生斜杠命令实现(推荐)

如果想贴合discord.py官方标准,把@commands.slash_command()换成官方的app_commands写法,兼容前缀命令的同时,避免依赖第三方扩展:

from discord import app_commands
from discord.ext import commands

class BotCog(commands.Cog):
    def __init__(self, bot):
        self.bot = bot

    # 原有的前缀命令保留不变
    @commands.command()
    async def wallet_verify(self, ctx):
        # 你的Web3钱包验证逻辑
        await ctx.send("正在验证钱包...")

    # 斜杠命令用app_commands装饰器
    @app_commands.command(name="wallet_verify", description="Web3钱包验证")
    async def slash_wallet_verify(self, interaction):
        # 复用钱包验证逻辑,避免重复代码
        await self._wallet_verify_logic(interaction)
        await interaction.response.send_message("钱包验证完成")

    # 抽离共享逻辑
    async def _wallet_verify_logic(self, user_context):
        # 这里写你的Web3验证代码
        pass

# 加载Cog并同步斜杠命令
async def setup(bot):
    await bot.add_cog(BotCog(bot))
    # 全局同步命令(生产环境建议按服务器同步,避免官方审核延迟)
    await bot.tree.sync(guild=None)  # guild=None表示全局,指定guild_id则仅同步到对应服务器

3. 强制Heroku安装正确依赖

如果非要保留@commands.slash_command()写法:

  • 编辑requirements.txt,明确指定依赖库:
    • 用nextcord的话:nextcord>=2.3.0
    • 用discord-ext-slash-command的话:discord.py>=1.7.3和discord-ext-slash-command>=1.7.0
  • 把修改后的requirements.txt推送到Heroku,重新触发部署。

4. 检查Heroku部署日志

如果还是不行,去Heroku的部署日志里看依赖安装过程,确认有没有安装失败、版本不兼容的情况。比如有没有自动降级了库版本,导致slash_command属性消失。


内容的提问来源于stack exchange,提问作者RuffBuff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 04:02:52