discord.py中suggestion命令触发线程创建失败问题求助
问题诊断与修复方案
你的代码核心问题在于错误地在频道上创建线程,而非关联到刚发送的建议消息上。Discord中针对特定内容的讨论线程,需要绑定到对应的消息才能和建议内容关联显示,否则即使创建了线程,也不会和建议消息绑定,导致看不到预期的讨论入口。
修复步骤
将创建线程的逻辑从频道对象调用,改为使用刚发送的建议消息对象调用:
原错误代码片段:
channel = bot.get_channel(int(1059976520376012811)) thread = await channel.create_thread( name=f"{interaction.user}'s Suggestion Discussion")
修改为:
# 直接在刚发送的建议消息上创建关联线程 thread = await message.create_thread( name=f"{interaction.user}'s Suggestion Discussion", auto_archive_duration=1440 # 可选:设置线程自动归档时间(单位分钟,这里为24小时) )
完整修正后的代码
@bot.tree.command(name="suggestion", description="Sends a suggestion to our suggestion channel!") async def _suggestion(interaction, suggestion:str): channel = bot.get_channel(1059976520376012811) suggestEmbed = discord.Embed(color=0xFF5349) # 修正头像URL的获取方式,原写法无法返回有效链接 suggestEmbed.set_author(name=f'New suggestion by {interaction.user}', icon_url=interaction.user.avatar.url) suggestEmbed.add_field(name='The suggestion is:', value=f'{suggestion}') message = await channel.send(embed=suggestEmbed) # 改用Unicode表情,避免字符串形式的表情识别失败 await message.add_reaction('✅') await message.add_reaction('❌') # 在建议消息上创建绑定线程 thread = await message.create_thread( name=f"{interaction.user}'s Suggestion Discussion", auto_archive_duration=1440 ) # 将建议内容同步到线程,方便讨论 await thread.send(f"Discuss {interaction.user}'s suggestion!\n> {suggestion}") embed=discord.Embed(title="Successful!", color=0x23B425) embed.add_field(name="This command was successful.", value="Your suggestion was successfully posted in #suggestions", inline=False) await interaction.response.send_message(embed=embed)
额外注意事项
- 权限检查:确保机器人在目标频道拥有
创建公开线程和发送消息的权限。 - 头像链接修正:原代码中
f'{interaction.user.avatar}'无法返回有效头像URL,必须使用interaction.user.avatar.url,若用户无自定义头像,可添加默认头像 fallback 逻辑。 - 表情使用:
:white_check_mark:这类字符串形式的表情可能无法被Discord正确识别,建议直接使用Unicode表情(如✅、❌),或通过bot.get_emoji(表情ID)获取服务器内的表情对象。
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

