javascript - 结束client.on函数
问题描述
我正在尝试制作一个锁定机器人,并且我已经完成了大部分工作,除了 end 命令。我试图以 client.on() 函数结束。任何帮助将不胜感激。这是我到目前为止的代码:
if (command == "lockdown") {
if (!args[0]) return message.channel.send("Please type start or end.");
if (args[0] === "start") {
client.on('guildMemberAdd', (member) => {
member.kick();
console.log('kicked');
})
}
if (args[0] === "end") {
//i don't know what to put here.
}
}
解决方案
尽管 BigPouley 的方法可行,但还有一种更有效的方法。如果您EventEmitter#removeListener
在锁定结束后拨打电话,它将完全停止收听Client#guildMemberAdd
.
如果您考虑一下您认为服务器将处于锁定与否的时间,将会有很多公会成员经历了该事件,然后因为当前没有锁定而被拒绝。
这也等于浪费了很多内存,这显然是您不想要的。它可以像这样工作:
// before your `client.on('message')` event,
// you should declare the function to trigger
// when someone joins during lockdown
const lockdown = (member) => {
member.kick();
console.log('kicked');
};
// this is because to unsubscribe to an event,
// you need the origin function it was listening to
client.on('message', (message) => {
// bla bla bla command handling...
if (command == 'lockdown') {
if (!args[0]) return message.channel.send('Please type start or end.');
if (args[0] === 'start') {
// you don't want to subscribe to an event twice,
// so make sure there isn't a lockdown already in progress
if (client.eventNames.includes('guildMemberAdd')) {
// this server is already locked down!
}
// use the function you made
client.on('guildMemberAdd', lockdown);
}
if (args[0] === 'end') {
// now do the reverse and check if there
// *isn't* a lockdown in progress
if (!client.eventNames.includes('guildMemberAdd')) {
// this server isn't locked down!
}
// now enter the *same* function to unsubscribe
client.removeListener('guildMemberAdd', lockdown);
}
}
});
推荐阅读
- python - 如何在python中将23位浮点数从字符串转换为浮点数并返回?
- angular - 检测AngularFire2存储上传完成的时间
- c++ - 数字序列的最佳数据结构 [0:9]
- java - 如何针对 Avro 架构验证 JSON
- python - Python替换文本
- c++ - 可以在 C++ QObject::connect() 中连接 QML 对象现有信号吗?
- java - [JAVA]递归删除扫雷中的空单元格
- javascript - material-ui-next 的组件 Modal 没有被 Babel 转换为 ES5
- listview - 如何更改 TListGroups 中的组顺序?
- java - 使用 UWC java regex 将 Mediawiki 迁移到 Confluence 无法与在线 |thumb 匹配