我有一个discord机器人,可以更新我们discord的排行榜频道。每次在数据库中记录游戏时,机器人都会获得排行榜数据,然后对于遇到的每个memberId,它会移除所有技能徽章(技能越高,徽章越有声望),然后根据当前技能添加正确的徽章。出于某种原因,连续添加大量成员角色会导致bot只能通过前100名中的大约15名成员。我对js很陌生,但我认为每个addRole命令都会触发GuildMemberUpdate事件,这太难处理了。这是我收到的警告信息。接下来是大量添加角色超时错误(我将包括一个)。
(node:612) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 guildMemberUpdate listeners added. Use emitter.setMaxListeners() to increase limit
at _addListener (events.js:280:19)
at Client.addListener (events.js:297:10)
at Promise (/home/ubuntu/bots/node_modules/discord.js/src/client/rest/RESTMethods.js:511:19)
at new Promise (<anonymous>)
at RESTMethods.addMemberRole (/home/ubuntu/bots/node_modules/discord.js/src/client/rest/RESTMethods.js:501:12)
at GuildMember.addRole (/home/ubuntu/bots/node_modules/discord.js/src/structures/GuildMember.js:453:37)
at C6Leaderboard.applyTags (/home/ubuntu/bots/modules/leaderboard.js:139:17)
at C6Leaderboard.createLeaderboard (/home/ubuntu/bots/modules/leaderboard.js:110:18)
at C6Leaderboard.publishLeaderboard (/home/ubuntu/bots/modules/leaderboard.js:67:29)
at <anonymous>
Error: Adding the role timed out.
at timeout.client.setTimeout (/home/ubuntu/bots/node_modules/discord.js/src/client/rest/RESTMethods.js:514:16)
at Timeout.setTimeout [as _onTimeout] (/home/ubuntu/bots/node_modules/discord.js/src/client/Client.js:433:7)
at ontimeout (timers.js:475:11)
at tryOnTimeout (timers.js:310:5)
at Timer.listOnTimeout (timers.js:270:5)
以下是我的模块代码的要点:
class C6Leaderboard
{
constructor() {
util.client.on('ready', () =>
{
guild = util.client.guilds.get("291751672106188800");
this.generate(); //generate an up to date leaderboard
});
}
async generate()
{
try
{
// Grab data
this.leaderboard = await util.makeRGRequest('leaderboard.php', {});
// Publish new Leaderboard
this.publishLeaderboard();
}
catch(err)
{
console.log('[leaderboard_err]' + err);
}
}
async publishLeaderboard()
{
const channel = util.getChannel(483346000233365526);
const msg = await channel.fetchMessage(channel.lastMessageID());
const content_new = this.createLeaderboard();
if( msg.content != content_new) msg.edit( content_new );
}
createLeaderboard(i, max_top)
{
//loop through leaderboard data
//print line of leaderboard message
this.applyTags(this.leaderboard[i].id, this.leaderboard[i].skill);
}
async applytags(id, skill)
{
if (!guild)
return;
let mem = guild.members.get(id);
if (!mem)
return;
mem.removeRoles(difficulties);
if (skill < 1500)
mem.addRole(settler).catch(console.error);
else if (skill >= 1500 && skill < 1600)
mem.addRole(chieftain).catch(console.error);
else if (skill >= 1600 && skill < 1700)
mem.addRole(warlord).catch(console.error);
else if (skill >= 1700 && skill < 1800)
mem.addRole(prince).catch(console.error);
else if (skill >= 1800 && skill < 1900)
mem.addRole(king).catch(console.error);
else if (skill >= 1900 && skill < 2000)
mem.addRole(emperor).catch(console.error);
else if (skill >= 2000 && skill < 2100)
mem.addRole(immortal).catch(console.error);
else if (skill >= 2100)
mem.addRole(deity).catch(console.error);
}
}
返回promise的方法需要使用wait调用,不能嵌套。
async function applytags(id, skill)
{
if (!guild)
return;
let mem = await guild.members.get(id);
if (!mem)
return;
await mem.removeRoles(difficulties);
if (skill < 1500)
await mem.addRole(settler).catch(console.error);
else if (skill >= 1500 && skill < 1600)
await mem.addRole(chieftain).catch(console.error);
else if (skill >= 1600 && skill < 1700)
await mem.addRole(warlord).catch(console.error);
else if (skill >= 1700 && skill < 1800)
await mem.addRole(prince).catch(console.error);
else if (skill >= 1800 && skill < 1900)
await mem.addRole(king).catch(console.error);
else if (skill >= 1900 && skill < 2000)
await mem.addRole(emperor).catch(console.error);
else if (skill >= 2000 && skill < 2100)
await mem.addRole(immortal).catch(console.error);
else if (skill >= 2100)
await mem.addRole(deity).catch(console.error);
}
我的代码使用jQuery。我有一个密码输入框,我想要得到输入的密码任何时候。 下面是我的代码: 我确信这是一个正确的代码,因为当我在浏览器的控制台中输入它时,它可以工作,但当我重新加载页面时,它就不工作了 我能做什么?
我可以在下面的代码中为添加事件侦听器,但不能添加到。 是不是因为twitter做了一些事情不让我这么做?有办法绕过它吗?
将事件侦听器添加到可以使用事件委派的元素。 使用 EventTarget.addEventListener() 将一个事件监听器添加到一个元素。 如果提供了 选项对象(opts) 的 target 属性,确保事件目标匹配指定的目标元素,然后通过提供正确的 this 上下文来调用回调。 返回一个对自定义委派函数的引用,以便与 off 一起使用。 忽略 opts ,则默认为非委派行为,并且事件冒泡。
我正在创建一个TicTacToe游戏。我把所有带有ActionListeners的后端放在按钮上,将按钮添加到面板,设置框架等等。 然而,当我运行程序时,我的JPanel似乎没有添加到JFrame中。我试过使用不同的布局,仔细检查是否确实放置了。为所有内容添加行,之前的所有帖子似乎都指向了我认为已经涵盖的内容。 如果这真的很直接,我提前道歉。 谢谢你的帮助。
问题内容: 我有一个ArrayList,它向其中动态添加了一些对象,并且有一个JButton。运行我的程序时ArrayList为空,并且JButton设置为setEnabled(false)。我想在ArrayList中有2个或更多元素时启用我的按钮,如果ArrayList有一项或为空则再次禁用它。我该如何实现? 问题答案: 没有任何种类的通知机制。 我建议您编写自己的实现,该实现将委托给私有的实现
是否有办法将AWT侦听器添加到SWT组件? 我以前制作了一个主要在AWT和Swing组件中运行的应用程序。现在,我有热键功能,它依赖于一个定制的库,该库监听全局键事件并返回相应的AWT键代码。 当我改变整个应用程序并使用SWT组件时,我的问题就出现了。正如我们所知,一些键现在返回一个不同的键代码,这扰乱了整个热键功能。 我想到的最初解决方案是: A.使用javax。摆动jtextfield作为my