Discord I';我正在开发一个升级系统机器人,但我想在用户加入语音频道时每5秒钟添加一次xp
我想在用户按时间间隔加入语音频道时添加xp,但当他们离开该频道时,仍然会添加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
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];
}
});
非常感谢您的帮助