如何用Slash命令在指定频道发送Embed?求代码修正及颜色指导
问题修正与解决方案
一、代码错误修正
你的代码存在变量名不匹配的问题,修正后的完整代码如下:
@bot.tree.command(guild=discord.Object(id=1127167530184740954), name="embed", description="Create an embed!") async def cr_embed(interaction: discord.Interaction, title: str, description: str, colour_: int, field: str, value: str, channel_: discord.app_commands.AllChannels): # 修正变量名:将couleur改为参数传入的colour_ cr_embed = discord.Embed(title=title, description=description, colour=colour_) cr_embed.add_field(name=field, value=value, inline=False) # 修正变量名:将salon改为参数传入的channel_,移除无效的ephemeral参数 await channel_.send(embeds=[cr_embed]) # 必须给交互发送响应,避免Discord判定命令超时 await interaction.response.send_message(f"Embed已发送到 {channel_.mention}", ephemeral=True)
二、核心功能说明
1. 选定频道发送消息
通过channel_: discord.app_commands.AllChannels参数接收用户选择的频道,直接调用channel_.send()即可将Embed发送到目标频道。注意:Slash命令必须调用interaction.response.send_message()返回响应,否则Discord会提示命令执行超时。
2. Embed颜色设置
Embed颜色支持三种设置方式:
- 十进制整数:使用十六进制颜色对应的十进制值(例如白色
#FFFFFF对应十进制16777215),直接传入colour_参数 - 十六进制字符串转换:将参数类型改为
str,处理用户输入的十六进制值(带或不带#):if colour_.startswith('#'): colour_ = colour_[1:] colour = int(colour_, 16) - Discord预设颜色:直接调用
discord.Colour的内置方法,无需手动输入数值:
常用预设包括:cr_embed = discord.Embed(title=title, description=description, colour=discord.Colour.blue())blue()、red()、green()、gold()、purple()等。
额外优化提示
如果想降低用户输入颜色的门槛,可以给colour_参数设置默认值,或在输入无效时自动使用默认颜色:
async def cr_embed(interaction: discord.Interaction, title: str, description: str, colour_: str = "FFFFFF", field: str, value: str, channel_: discord.app_commands.AllChannels): if colour_.startswith('#'): colour_ = colour_[1:] try: colour = int(colour_, 16) except ValueError: colour = discord.Colour.blue() cr_embed = discord.Embed(title=title, description=description, colour=colour) # 后续发送逻辑不变
内容的提问来源于stack exchange,提问作者Side Heat
相关产品推荐
相关产品推荐

