如何删除客户端事件侦听器?

     2023-03-14     299

关键词:

【中文标题】如何删除客户端事件侦听器?【英文标题】:How to remove a Client event listener? 【发布时间】:2022-01-18 18:50:03 【问题描述】:

我有一个<Client>.on 函数,我想停止监听这个事件,例如:

bot.on('messageCreate', message => 
  // some code
);

如何停止它并且不再接收此事件?

【问题讨论】:

【参考方案1】:

我假设botClient 的一个实例,它扩展了Node.js 的EventEmitter。您可以使用on 监听事件(例如messageready)并使用off 删除该监听器。 addListenerremoveListener 也分别是 onoff 的别名。

将监听器函数存储在一个变量中,当您需要删除该监听器时使用bot.off(eventName, listener)

const listener = () => 
  // your code here...


bot.on('event', listener)

// When you need to remove the listener:
bot.off('event', listener)

【讨论】:

这在开始时有效,但它导致了一些错误,导致我的机器人崩溃 @SciscorX 您能否编辑您的问题以包含错误? 如果您需要将信息传递给侦听器,您会怎么做?此外,假设您正在运行多个“客户端”实例(例如在两台服务器上运行的机器人)。事实上,侦听器将注册来自所有服务器的事件,而不仅仅是一个。因此,如果在服务器 A 上发生“事件”,它将在两个服务器中触发。您将如何管理将每个服务器的侦听器分开? @J.Day 我不太清楚你的意思。如果你想让某些东西只在特定的公会(服务器)上运行,你可以输入if (message.guild.id !== 'some ID') return(例如)。在侦听器中的其余代码之前。如果您还有其他问题,请随时提出新问题。【参考方案2】:

您遇到了一个问题,我正在自己进行故障排除,尝试过滤每个服务器的事件,我终于弄明白了。 在这种情况下,我使用的是 bot 对象而不是客户端。但这就是您可以过滤每个服务器的单个事件的方式,只需添加到 if/else 语句中。我将只说明 channelCreate 的方法,但该概念适用于您可以收听的大多数事件。在文档中它指出通道类型是整数,但在我的调试中它显示为字符串。在 if 语句行,该方法通过检查创建通道所在的位置(创建它的公会)来工作,如果符合您的条件,则继续。

bot.on("channelCreate", (channel) => 
    if(channel.guild.id == "######")
        if(channel.type == 4 || channel.type == "category")
            console.log(`Category Created: ID: $channel.id Name: $channel.name`)
        
        else if(channel.type == 0 || channel.type == "text")
            console.log(`Channel Created: ID: $channel.id Name: $channel.name`)
        
    
    else if (channel.guild.id == "######")
      //do other stuff
    
);

链接:

列出事件的 Discord 文档: https://discord.js.org/#/docs/main/stable/class/Client

一个很好的 github gist 来查看函数: https://gist.github.com/koad/316b265a91d933fd1b62dddfcc3ff584

频道类型: https://discord.js.org/#/docs/main/stable/typedef/ChannelType https://discord.com/developers/docs/resources/channel#channel-object-channel-types

【讨论】:

如何在服务器端事件上注册客户端事件侦听器?

】如何在服务器端事件上注册客户端事件侦听器?【英文标题】:HowcanIregisteraclient-sideeventlisteneronaserver-sideevent?【发布时间】:2012-01-2909:14:35【问题描述】:(当然,假设它甚至可以在.Net中实现。)最终,我想要完成的是一个... 查看详情

如何正确删除节点 js eventemitter 中的事件侦听器

】如何正确删除节点jseventemitter中的事件侦听器【英文标题】:Howtoproperlyremoveeventlistenersinnodejseventemitter【发布时间】:2014-07-1615:05:55【问题描述】:我设置了一个GET和一个POST路由,其想法是POST到该路由会触发一个事件,而GET路... 查看详情

flash AS3 如何删除舞台事件侦听器

】flashAS3如何删除舞台事件侦听器【英文标题】:flashAS3howdoIremovestageeventlisteners【发布时间】:2010-10-0917:53:42【问题描述】:我正在用flash和as3制作动画,我有一个添加舞台的功能eventListener,stage.addEventListener(Event.ENTER_FRAME,setScrollP... 查看详情

如何使用 .bind(this) 删除对象的事件侦听器? [复制]

】如何使用.bind(this)删除对象的事件侦听器?[复制]【英文标题】:Howtoremoveeventlistenerofaobjectwith.bind(this)?[duplicate]【发布时间】:2015-04-2407:18:26【问题描述】:内部对象构造函数:this.notification.addEventListener(barcodeScanner.NEW_READING,thi... 查看详情

如何删除 DocumentSnapshot 事件的侦听器(Google Cloud FireStore)

】如何删除DocumentSnapshot事件的侦听器(GoogleCloudFireStore)【英文标题】:HowtoremovelistenerforDocumentSnapshotevents(GoogleCloudFireStore)【发布时间】:2018-03-2010:32:13【问题描述】:我是GoogleCloudFireStore的新手。Document对象有一个函数调用onSna... 查看详情

如何在事件发生之前删除监听器?

...供解决方案。所以,我的问题是:问题是我的树中有三个侦听器,在checkchange上,我想阻止it 查看详情

删除匿名事件侦听器

】删除匿名事件侦听器【英文标题】:Removingananonymouseventlistener【发布时间】:2011-03-0714:28:13【问题描述】:有没有办法移除像这样添加的事件监听器:element.addEventListener(event,function()/*doworkhere*/,false);不替换元素?【问题讨论】... 查看详情

Google Maps API v3:如何删除事件监听器?

...问题描述】:如何删除GoogleMapsAPIv3中的\'bounds_changed\'事件侦听器?google.maps.event.removeListener(_???_);【问题讨论】:我想我找到了你要找的东西。这是API文 查看详情

如何删除 Google OAuth2 gapi 事件监听器?

...28:47【问题描述】:我真的很难理解如何删除googlegapi事件侦听器。下面的粗体是有问题的完整功能。window.gapi.auth2.getAuthInstance().isSignedIn.listen(onAuthChange);我想在 查看详情

如何删除某些元素的所有事件侦听器而不使用其子元素(代码片段)

...用于容器div。在5秒setTimeout之前,单击该按钮将触发两个侦听器(因此您将看到BUTTON和DIV的控制台日志)。在计时器之后,你仍然会看到BUTTON事件。 varrem=document.getElementById('rem'); varbtn=document.getElementById('btn'); functionon... 查看详情

添加事件侦听器,在播放完声音后更改/删除类

】添加事件侦听器,在播放完声音后更改/删除类【英文标题】:Addeventlistenerthatchanges/removesclasswhensoundisdoneplaying【发布时间】:2015-09-2108:03:23【问题描述】:如何添加一个事件侦听器,该侦听器在声音文件结束时执行删除类的功... 查看详情

删除元素之前是不是需要删除事件侦听器?

】删除元素之前是不是需要删除事件侦听器?【英文标题】:DoIneedtoremoveeventlistenersbeforeremovingelements?删除元素之前是否需要删除事件侦听器?【发布时间】:2011-08-2709:21:35【问题描述】:如果我的父元素的子元素绑定了事件侦... 查看详情

删除重复的事件侦听器

】删除重复的事件侦听器【英文标题】:Removingduplicateeventlisteners【发布时间】:2018-01-2503:59:13【问题描述】:我一直在尝试找到一种方法来删除事件侦听器。我制作了一个函数,它将向按钮添加事件侦听器,但如果该函数再次... 查看详情

在 AS3 中向子影片剪辑添加/删除事件侦听器

】在AS3中向子影片剪辑添加/删除事件侦听器【英文标题】:Add/RemoveEventListenerto/fromchildMovieClipinAS3【发布时间】:2013-03-2808:01:04【问题描述】:简而言之,这是我想要完成的:点击影片剪辑,添加子项点击子影片剪辑,播放声音... 查看详情

使用 Chrome 的 webkit 检查器删除事件侦听器

】使用Chrome的webkit检查器删除事件侦听器【英文标题】:UseChrome\'swebkitinspectortoremoveaneventlistener【发布时间】:2012-06-1608:31:57【问题描述】:我知道您可以在ChromeInspector中看到事件侦听器,但我正在做一些调试工作,周围有很多... 查看详情

JS删除由库添加的事件侦听器[重复]

】JS删除由库添加的事件侦听器[重复]【英文标题】:JSRemovingEventListenerAddedbyaLibrary[duplicate]【发布时间】:2018-03-2411:11:10【问题描述】:我不确定这是否可能,但基本上,我有事件侦听器,这些事件侦听器由库(jQuery)自动添加到... 查看详情

事件上的 C++ 侦听器未使用套接字 io C++ 客户端获取事件

】事件上的C++侦听器未使用套接字ioC++客户端获取事件【英文标题】:C++listeneroneventisnotgettingeventusingsocketioC++client【发布时间】:2020-07-2617:40:58【问题描述】:我创建了示例应用程序,用于在作为socket.io服务器和C++客户端运行的n... 查看详情

如何删除 addClsOnOver 监听器 ExtJS

...,这预计会发生多次,但不幸的是,addClsOnOver创建的事件侦听器在第一次单击后 查看详情