discord.js开发:如何实现点击按钮时机器人发送DM消息?
按钮触发机器人发送DM消息实现修正方案
现有代码问题
- 你使用的
button.clicker.send()属于discord.js早于v12版本的过时API,现在已被移除 - 按钮交互的唯一标识属性是
customId而非id - 未做异步操作处理与异常捕获,极易出现交互超时、程序崩溃问题
修正后可运行代码
client.on('interactionCreate', async interaction => { // 过滤非按钮交互事件 if (!interaction.isButton()) return; if(interaction.customId === "onBtn"){ // 先延迟更新按钮状态,避免3秒交互超时报错 await interaction.deferUpdate(); try { // 给触发按钮的用户发送私信 await interaction.user.send('ok'); } catch (error) { // 处理用户关闭私信权限的异常,仅触发用户可见提示 await interaction.followUp({ content: '无法向您发送私信,请开启服务器成员私信权限后重试', ephemeral: true }); } } });
注意事项
- 所有涉及接口请求的异步操作都需要加
await关键词,避免逻辑时序错乱 ephemeral: true参数可以让提示消息仅对触发交互的用户可见,不会公开刷出消息- 如果使用其他机器人开发框架,获取触发用户的API对应调整即可,核心逻辑通用
内容的提问来源于stack exchange,提问作者antonmetas
相关产品推荐
相关产品推荐

