From 8d34c373048a6abb89778706fd548247096a8e77 Mon Sep 17 00:00:00 2001 From: Lamp Date: Fri, 16 Aug 2019 23:03:07 +0000 Subject: [PATCH] Update color roles to (attempt to) comply with new rate limit Just add roles to whoever goes online and leave their roles until guild runs out of roles, then prune roles from offline members and orphan roles. --- src/colorroles.js | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/colorroles.js b/src/colorroles.js index 64e3e98..5f76fb2 100755 --- a/src/colorroles.js +++ b/src/colorroles.js @@ -95,20 +95,31 @@ colorRoles.pruneOrphanRoles = async function() { // delete all color roles that // event listeners -dClient.on('local_presenceUpdate', async (oldPresence, newPresence) => { // update color role on presence update // emitted also on member join (iirc) - if (oldPresence && (oldPresence.status == newPresence.status)) return; - await colorRoles.update(newPresence.member); +dClient.on('local_presenceUpdate', async (oldPresence, newPresence) => { + //if (oldPresence && (oldPresence.status == newPresence.status)) return; // don't constantly add/remove roles anymore + // add role when person goes online + if (newPresence.status != "offline") + await colorRoles.update(newPresence.member); + // and do not remove until we run out of roles }); dClient.on('local_guildMemberRemove', async member => { // update (delete) color role on member leave await colorRoles.update(member); }); -dClient.on('error', async (error) => { - if (error.message == "Maximum number of guild roles reached (250)") { - await colorRoles.pruneOrphanRoles(); - } -}); +{ + let lastRoleMaintenance; + dClient.on('error', async (error) => { + if (Date.now() - lastRoleMaintenance < 600000) return; // in case errors are spammed, don't try running maintenance if it was already done within 10 mins ago + lastRoleMaintenance = Date.now(); + if (error.message == "Maximum number of guild roles reached (250)") { + console.log("Ran out of roles; running maintenance"); + await colorRoles.updateAll(); // remove roles from offline users when we run out of roles + await colorRoles.pruneOrphanRoles(); // remove any roles whose member doesn't exist anymore + } + }); +} +