javascript - Discord.js client.on guildMemberAdd 多次触发
问题描述
正如标题所解释的,我在 discord.js (v12) bot 上有一个功能,它负责欢迎用户,并对他们施加特定的角色,这个:
client.on("guildMemberAdd", member => {
member.roles.add('604250195001081859');
member.guild.channels.cache.get("707323130523418686").send(`Hi ${member.user} blabla`);
console.log(member.user.id + ' is in da house');
});
现在,我有一个问题:每次有人加入服务器时,就像这个事件被一遍又一遍地触发多次,淹没了频道。
显然,如果我设置“client.once”,则不会发生这种情况,但在这种情况下,该消息仅在用户第一次访问时给出,第二个不再收到它。
我一直在到处寻找答案,但我似乎是唯一遇到这个问题的人,我希望有人能帮助我。
ps 我想澄清一下,该机器人没有其他活动实例,并且它托管在一个小型 vultr 的 vps 上。
解决方案
好吧,过了一会儿我发现了问题......如果你在整个项目中遇到这个检查以找到这个方法调用:
client.login(<token>)
如果在 keepalive 函数中调用它,或者在任何情况下在服务器启动之后/之外多次调用的函数中调用它,它会创建一个新的 bot 实例,并且每个实例都会响应事件,从而有效地创建大量消息(在聊天消息的情况,但函数内部的任何操作都会根据创建的实例数重复)。
简而言之,login() 方法只需调用一次即可避免创建新实例。
是的,你现在可以把所有你想要的烂番茄都扔给我。
推荐阅读
- angular - 离子 - API 状态 404
- android - React Native CLI 无法确定 Android 项目配置
- java - 基于指定类类型返回值的 Java 通用双函数
- javascript - !()在javascript中是什么意思
- adal - 使用 msal 对“management.azure.com”进行身份验证
- jquery - 需要双击才能在 Bootstrap 表单上进行编辑。jQuery?
- sql - 子查询,不必重用代码
- r - 在列表上应用函数然后迭代第二个变量,在 r
- excel - 尝试更新 excel 链接但看到一个没有意义的弹出框
- select - MySQL 5.6 SELECT UNION 查询