如何在Pycord中向指定频道响应Slash命令?
解决Pycord Slash命令在其他频道响应的问题
Slash命令必须在Discord规定的时间内完成正式响应,否则会触发「应用未响应」警告,以下是两种可行的解决方式:
方案一:先发送确认响应,再在目标频道发内容
先用ctx.respond完成命令的正式响应(可以给用户一个操作反馈),之后再调用目标频道的send方法发送实际内容。示例代码:
@bot.slash_command(description="在指定频道发送消息") async def send_to_channel(ctx: ApplicationContext, channel: discord.TextChannel, content: str) -> None: # 完成正式响应,避免警告,ephemeral=True仅让命令发起者看到该提示 await ctx.respond(f"消息已发送到频道 {channel.mention}!", ephemeral=True) # 在目标频道发送实际内容 await channel.send(content)
方案二:发送空响应后自由操作
如果不需要在原频道显示任何提示,可以发送一个空响应(或带自动删除的占位响应),完成命令的正式响应后,即可任意在其他频道发送消息:
@bot.slash_command(description="在指定频道发送消息") async def secret_send(ctx: ApplicationContext, channel: discord.TextChannel, content: str) -> None: # 发送空响应,立即完成命令的正式响应,delete_after=0让响应自动删除 await ctx.respond("", delete_after=0) # 在目标频道发送内容 await channel.send(content)
注意:如果后续操作存在耗时逻辑,建议先完成ctx.respond响应,再用asyncio.create_task异步处理后续任务,避免超过Discord的3秒响应时限。
内容的提问来源于stack exchange,提问作者Willem
相关产品推荐
相关产品推荐

