This commit is contained in:
2026-04-20 18:05:36 +00:00
parent d73422555d
commit 33b1f276c6
26 changed files with 598 additions and 183 deletions

View File

@@ -129,4 +129,32 @@ function enqueueSend(channel, ...args) {
return next;
}
module.exports = { enqueueRename, enqueueMove, enqueueSend };
// Delete a channel only after every in-flight send/rename/move on it has drained.
// Chains on both renameChains and sendChains so "pending send in-flight, delete
// racing it" can no longer hit Discord's unknown-channel 10003.
function enqueueDelete(channel) {
if (!channel || typeof channel.delete !== 'function') {
return Promise.reject(new Error('enqueueDelete: invalid channel'));
}
const renameEntry = renameChains.get(channel.id);
const prevRename = renameEntry ? renameEntry.chain : Promise.resolve();
const prevSend = sendChains.get(channel.id) || Promise.resolve();
const next = Promise.all([
prevRename.catch(() => {}),
prevSend.catch(() => {})
]).then(() => channel.delete().catch(() => {}));
if (renameEntry) renameEntry.chain = next;
sendChains.set(channel.id, next);
next.finally(() => {
if (renameEntry && renameChains.get(channel.id) === renameEntry && renameEntry.chain === next) {
renameChains.delete(channel.id);
}
if (sendChains.get(channel.id) === next) sendChains.delete(channel.id);
});
return next;
}
module.exports = { enqueueRename, enqueueMove, enqueueSend, enqueueDelete };