33 lines
911 B
JavaScript
33 lines
911 B
JavaScript
/**
|
|
* Serialized channel renames/moves to avoid Discord rate limits (e.g. 2 renames / 10 min per channel).
|
|
*/
|
|
const PQueue = require('p-queue').default;
|
|
|
|
const channelQueue = new PQueue({
|
|
concurrency: 1,
|
|
intervalCap: 2,
|
|
interval: 10000
|
|
});
|
|
|
|
function enqueueRename(channel, newName) {
|
|
return channelQueue.add(async () => {
|
|
try {
|
|
await channel.setName(newName);
|
|
} catch (err) {
|
|
const msg = err?.message || String(err);
|
|
if (msg.includes('429') || msg.toLowerCase().includes('rate limit')) {
|
|
console.warn(`enqueueRename: rate limit renaming channel "${channel.name}"`);
|
|
return;
|
|
}
|
|
console.error('enqueueRename:', err);
|
|
throw err;
|
|
}
|
|
});
|
|
}
|
|
|
|
function enqueueMove(channel, categoryId) {
|
|
return channelQueue.add(() => channel.setParent(categoryId, { lockPermissions: true }));
|
|
}
|
|
|
|
module.exports = { channelQueue, enqueueRename, enqueueMove };
|