如何在Discord中添加斜杠命令并修复命令响应异常问题
Discord机器人问题解决方案
一、修复「仅@提及才响应命令」的问题
这是因为未开启message_content意图,Discord现在默认禁用消息内容读取权限,必须完成两步操作:
- 代码里修改intents配置,添加
intents.message_content = True - 登录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
相关产品推荐
相关产品推荐

