/** * 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 };