在Node.js中通过HTTP与Axios实现Discord Bot延迟回复后的消息更新
在Node.js中通过HTTP与Axios实现Discord Bot延迟回复后的消息更新
我明白你现在的需求——已经用延迟响应让Discord知道Bot正在处理,现在想通过HTTP+Axios来更新这条消息,而不是用网关对吧?其实很简单,Discord专门提供了对应的API端点来做这件事,我给你一步步说明:
核心原理
当你发送DEFFERED_CHANNEL_MESSAGE_WITH_SOURCE类型的响应后,Discord会生成一个关联的交互令牌(interaction.token),你可以用这个令牌加上你的Bot应用ID,调用Discord的Webhook API来编辑那条“正在处理”的延迟消息。
修改你的代码实现
你只需要在完成业务逻辑后,向特定的API端点发送PUT请求即可。这里直接修改你现有的代码:
app.post('/interactions', verifyKeyMiddleware(PUBLIC_KEY), async (req, res) => { const interaction = req.body; if (interaction.type === InteractionType.APPLICATION_COMMAND) { if(interaction.data.name === 'chat'){ // 第一步:发送延迟响应,告诉Discord我们正在处理 res.send({ type: InteractionResponseType.DEFFERED_CHANNEL_MESSAGE_WITH_SOURCE, }); // 第二步:执行你的业务处理逻辑(比如调用API、计算等耗时操作) // 这里用setTimeout模拟耗时任务,替换成你实际的代码 await new Promise(resolve => setTimeout(resolve, 2000)); const finalMessageContent = "处理完成啦!这是更新后的消息内容"; // 第三步:用Axios调用Discord API更新延迟消息 try { await discord_api.put( `/webhooks/${APPLICATION_ID}/${interaction.token}/messages/@original`, { content: finalMessageContent, // 你还可以添加embeds、components等其他消息内容,比如: // embeds: [{ title: "结果", description: "这是处理后的嵌入消息" }] } ); console.log("延迟消息更新成功"); } catch (error) { console.error("更新消息失败:", error.response?.data || error.message); } return; } } });
关键注意事项
- API端点说明:
/webhooks/{APPLICATION_ID}/{token}/messages/@original是Discord专门为编辑延迟响应消息提供的端点,@original表示我们要编辑最初的那条延迟消息。 - 请求方法:必须使用
PUT请求,因为我们是在编辑已存在的消息内容。 - 权限与头信息:你已经通过
discord_api实例配置了正确的Bot授权头,所以不需要额外添加认证信息。 - 支持的消息内容:除了纯文本
content,你还可以发送嵌入消息、按钮组件等,和普通Discord消息的格式完全一致。 - 错误处理:一定要捕获请求异常,Discord可能会返回错误码(比如401表示令牌无效,404表示消息已被删除),通过
error.response?.data可以查看详细的错误信息。
这样你就能完全基于HTTP和Axios实现延迟回复后的消息更新,不需要依赖网关啦。
备注:内容来源于stack exchange,提问作者Sumant Sukla
相关产品推荐
相关产品推荐

