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

如何在Discord中添加斜杠命令并修复命令响应异常问题

Discord机器人问题解决方案

一、修复「仅@提及才响应命令」的问题

这是因为未开启message_content意图,Discord现在默认禁用消息内容读取权限,必须完成两步操作:

  1. 代码里修改intents配置,添加intents.message_content = True
  2. 登录Discord开发者平台的机器人页面,找到「Privileged Gateway Intents」,开启「Message Content Intent」开关(这步不能省略,否则代码配置无效)

二、添加斜杠命令(/paypal及新命令)

原来的@bot.command()是前缀命令(!paypal),要实现斜杠命令需使用discord.app_commands模块。以下是修改后的完整代码,同时兼容前缀命令和斜杠命令:

import discord
from discord.ext import commands
from discord import app_commands

TOKEN = '你的机器人令牌'

# 配置意图,必须开启message_content
intents = discord.Intents.default()
intents.typing = False
intents.presences = False
intents.message_content = True  # 关键:允许机器人读取消息内容

bot = commands.Bot(command_prefix='!', intents=intents)

@bot.event
async def on_ready():
    print(f'Bot已上线,登录账号:{bot.user.name}')
    # 同步斜杠命令到指定服务器(替换成你的服务器ID,测试用,立即生效)
    try:
        synced = await bot.tree.sync(guild=discord.Object(id=123456789012345678))
        print(f'已同步 {len(synced)} 条斜杠命令到服务器')
    except Exception as e:
        print(f'同步命令失败:{e}')

# 保留原有的前缀命令(!paypal)
@bot.command()
async def paypal(ctx, amount: float):
    await send_paypal_embed(ctx, amount)

# 新增斜杠命令(/paypal)
@bot.tree.command(name='paypal', description='生成PayPal收款信息')
@app_commands.describe(amount='基础支付金额')
async def paypal_slash(interaction: discord.Interaction, amount: float):
    await send_paypal_embed(interaction, amount)

# 提取公共的Embed生成逻辑,避免重复代码
async def send_paypal_embed(ctx_or_interaction, amount: float):
    total_amount = amount + (amount * 0.2)
    embed = discord.Embed(title='Payment', color=discord.Color.blue())
    embed.add_field(name='注意事项', value='请以「朋友与家人」方式将款项发送至myemail@gmail.com(美元结算,请勿添加备注)。', inline=True)
    embed.add_field(name='PayPal邮箱', value='My email', inline=False)
    embed.add_field(name='应付金额', value=f'${total_amount:.2f}', inline=False)  # 保留两位小数更规范
    embed.set_thumbnail(url='https://www.paypalobjects.com/webstatic/mktg/logo/pp_cc_mark_37x23.jpg')
    
    # 区分是前缀命令上下文还是斜杠命令交互对象
    if isinstance(ctx_or_interaction, commands.Context):
        await ctx_or_interaction.send(embed=embed)
    else:
        await ctx_or_interaction.response.send_message(embed=embed)

# 示例:添加新的斜杠命令/help
@bot.tree.command(name='help', description='查看机器人使用帮助')
async def help_slash(interaction: discord.Interaction):
    embed = discord.Embed(title='帮助中心', color=discord.Color.green())
    embed.add_field(name='/paypal amount:金额', value='生成PayPal收款信息,自动计算加20%手续费后的总金额', inline=False)
    await interaction.response.send_message(embed=embed)

bot.run(TOKEN)

关键说明

  • 斜杠命令同步:测试时用指定服务器ID同步,立即生效;如果要全局生效,去掉guild=discord.Object(id=...)参数,但需等待Discord审核(约1小时)
  • 添加新斜杠命令:直接复制@bot.tree.command()这段代码,修改命令名、描述和内部逻辑即可,比如上面的/help示例
  • 公共函数send_paypal_embed:把重复的Embed生成代码抽出来,同时适配前缀命令和斜杠命令的不同发送方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 13:07:46