首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MaxListenersExceededWarning:检测到可能的EventEmitter内存泄漏。11个voiceStateUpdate监听器添加到[客户端]

MaxListenersExceededWarning:检测到可能的EventEmitter内存泄漏。11个voiceStateUpdate监听器添加到[客户端]
EN

Stack Overflow用户
提问于 2020-08-31 01:14:06
回答 1查看 527关注 0票数 0

我这里有这段代码,它检测机器人是否被踢出了语音聊天。

代码语言:javascript
复制
const serverQueue = message.client.queue.get(message.guild.id);
const botvc = message.guild.me.voice.channel;
if (botvc === null) {
 if (serverQueue === undefined) {
  const queueConstruct = {
   connection: null,
   songs: [],
   volume: 2,
   playing: true,
  };
  message.client.queue.set(message.guild.id, queueConstruct);
  const newqueue = message.client.queue.get(message.guild.id);
  if (newqueue.songs[0] !== undefined) {
   newqueue.songs[0].looped = 0;
   message.client.queue.delete(message.guild.id);
  } else {
   message.client.queue.delete(message.guild.id);
  }
 } else {
  serverQueue.songs[0].looped = 0;
  serverQueue.songs = [];
  message.client.queue.delete(message.guild.id);
 }
}

它是discord.js中的voicestateupdate事件,位于事件处理程序中。

代码或修复内存泄漏的东西有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-31 08:19:28

您的代码中可能有其他voiceStateUpdate侦听器,或者您的代码多次添加侦听器(调用client.on('voiceStateUpdate', listener))。警告(发生在所有的EventEmitter上,不仅仅是Discord.js的Client上)告诉你为一个事件添加太多的监听器(缺省值是10)可能是一个错误。

在调试时尝试在client.on('voiceStateUpdate', ...上添加断点),以确定何时添加了侦听器。或者,尝试使用--trace-warnings标志查看内存泄漏警告的堆栈跟踪。

如果确实需要10个以上的voiceStateUpdate侦听器(不太可能),请使用setMaxListeners更改事件的最大侦听器数:

代码语言:javascript
复制
// Changes the maximum number of listeners for an event to 11
client.setMaxListeners(11)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63660061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档