Я не тестировал его, но есть метод bindNodeCallback
, который обертывает функцию узла и возвращает другую функцию, возвращающую Observables. Затем concatMap
не будет обрабатывать новый элемент до тех пор, пока не будет завершен текущий внутренний Observable.
Итак, в вашем случае использования вы можете использовать, например, следующее:
const obsWrite = bindNodeCallback(client.write);
source
.pipe(
map((x: any) => x.join('')),
concatMap((x: string) => obsWrite(x))
)
.subscribe();
Я бы проверил, является ли автор последнего сообщения вашим ботом:
let lastTwo = await message.channel.fetchMessages({limit: 2}), // Get the last 2 messages
last = lastTwo.last(); // The last in the collection will be the last message
if (last.author.id == client.user.id) await message.channel.bulkDelete(lastTwo);
else await last.delete();
message.channel.send("```Open```");