Discord I';我正在开发一个升级系统机器人,但我想在用户加入语音频道时每5秒钟添加一次xp

Discord I';我正在开发一个升级系统机器人,但我想在用户加入语音频道时每5秒钟添加一次xp,discord,discord.js,bots,Discord,Discord.js,Bots,我想在用户按时间间隔加入语音频道时添加xp,但当他们离开该频道时,仍然会添加xp 我的代码 client.on('voiceStateUpdate', (oldMember, newMember) => { let newUserChannel = newMember.channelID; const interval = setInterval (() => { if (newUserChannel) { const user = Levels.fet

我想在用户按时间间隔加入语音频道时添加xp,但当他们离开该频道时,仍然会添加xp

我的代码

client.on('voiceStateUpdate', (oldMember, newMember) => {
  let newUserChannel = newMember.channelID; 
  
   const interval = setInterval (() => {
     if (newUserChannel) {
const user =  Levels.fetch(newMember.id, newMember.guild.id);
console.log(`${newMember.id} server ${newMember.guild.id} level : ${user.level} xp : ${user.xp}`)


Levels.appendXp(newMember.id, newMember.guild.id, 1)



     }else {
       const channel = newMember.guild.channels.cache.find(channel => channel.id === "848698518537633895")
       
       channel.send("left channel ").then(clearInterval(interval))
       }
   }, 5000)})

interval
是每次事件发生时创建的局部变量

因此,当用户离开时,您实际上是在调用
clearInterval(未定义)您正在清除一个新的间隔,该间隔不起任何作用。此事件发出的状态对象不会自行更新

您需要将这些间隔存储在事件侦听器之外的对象中;大概是这样的:

constxpinterval={};
client.on(“voiceStateUpdate”,(旧状态、新状态)=>{
const connected=!!newState.channelID,
userId=newState.id;
如果(已连接){
//时间间隔还不存在
if(xpinterval[userId]=“未定义的类型”){
xpinterval[userId]=setInterval(()=>{
递增exp();
},5e3/*5秒*/);
}
}否则{
//用户离开后,清除间隔
clearInterval(xpInterval[userId]);
//删除interval对象,以便以后可以再次创建它
删除[userId];
}
});

非常感谢您的帮助