discord.js-selfbot满足指定emoji.id条件后无法停发消息如何解决
问题根本原因
你的代码进入了死循环触发逻辑:
当指定表情反应被添加时,你在回调里主动调用了message.react(':wleft:847502744176820256'),你自己的账号添加这个表情的动作会再次触发messageReactionAdd事件,满足emoji.id的判断条件后又会执行一次相同的回调,重复发消息、加反应,就形成了无限循环。
修复方案
方案1:排除自己触发的反应事件
最直接的方式就是当事件触发来源是自身账号时,直接终止回调执行,修改后代码如下:
const { Client, Intents } = require("discord.js-selfbot"); const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_MESSAGE_REACTIONS], }); let token = ""; client.on('ready', () => { console.log('Ok'); }); client.on('messageReactionAdd', (messageReaction, user) => { // 新增判断:如果是自己添加的反应直接跳过 if(user.id === client.user.id) return const { message, emoji } = messageReaction; if(emoji.id === '847502744176820256'){ setTimeout(function(){ console.log("reaction ADD") message.channel.send("ok") message.react(':wleft:847502744176820256') }, 350); } });
方案2:标记已处理的消息避免重复触发
如果你确实需要监听自己添加的反应,你可以给已经处理过的消息加自定义标记,同一个消息的同个表情只处理一次:
client.on('messageReactionAdd', (messageReaction, user) => { const { message, emoji } = messageReaction; if(emoji.id === '847502744176820256'){ // 新增判断:如果这条消息已经处理过该表情就跳过 if(message._processedWleft) return // 标记已处理 message._processedWleft = true setTimeout(function(){ console.log("reaction ADD") message.channel.send("ok") message.react(':wleft:847502744176820256') }, 350); } });
额外提示:discord.js-selfbot属于第三方非官方客户端,使用会违反Discord的服务条款,可能导致账号被封禁,谨慎使用。
内容的提问来源于stack exchange,提问作者Andres Avendaño Aguilar
相关产品推荐
相关产品推荐

