|
@@ -60,10 +60,10 @@ export default class {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
- private enqueue = (type: 'private' | 'group', id: string, resolver: () => Promise<void>) => {
|
|
|
+ private enqueue = (type: 'private' | 'group', id: string, resolver: () => Promise<void>, delay: number) => {
|
|
|
let wasEmpty = false;
|
|
|
const queue = this.messageQueues[`${type}:${id}`] ||= (() => { wasEmpty = true; return []; })();
|
|
|
- queue.push(() => sleep(200).then(resolver));
|
|
|
+ queue.push(() => sleep(wasEmpty ? Math.random() * 3000 + 600 : delay).then(resolver));
|
|
|
logger.debug(`no. of message currently queued for ${type}:${id}: ${queue.length}`);
|
|
|
if (wasEmpty) this.next(type, id);
|
|
|
};
|
|
@@ -97,25 +97,29 @@ export default class {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
- private sendToGroup = (groupID: string, message: string) => new Promise<string>((resolve, reject) => {
|
|
|
- this.enqueue('group', groupID, () => this.bot.sendMessage(groupID, message).then(resolve).catch(reject));
|
|
|
+ private sendToGroup = (groupID: string, message: string, delay = 0) => new Promise<string>((resolve, reject) => {
|
|
|
+ this.enqueue('group', groupID, () => this.bot.sendMessage(groupID, message).then(resolve).catch(reject), delay);
|
|
|
});
|
|
|
|
|
|
- private sendToUser = (userID: string, message: string) => new Promise<string>((resolve, reject) => {
|
|
|
- this.enqueue('private', userID, () => this.bot.sendPrivateMessage(userID, message).then(resolve).catch(reject));
|
|
|
+ private sendToUser = (userID: string, message: string, delay = 0) => new Promise<string>((resolve, reject) => {
|
|
|
+ this.enqueue('private', userID, () => this.bot.sendPrivateMessage(userID, message).then(resolve).catch(reject), delay);
|
|
|
});
|
|
|
|
|
|
public sendTo = (subscriber: IChat, messageChain: string, noErrors = false) => Promise.all(
|
|
|
(splitted => [splitted.message, ...splitted.attachments])(
|
|
|
Message.separateAttachment(messageChain)
|
|
|
- ).map(msg => {
|
|
|
+ ).map((msg, index) => {
|
|
|
+ const delay =
|
|
|
+ (/\[CQ:/.exec(msg) ? Math.random() * 25600 : 0) +
|
|
|
+ (index === 0 ? Math.random() * 16000 : 0) +
|
|
|
+ Math.random() * 3000 + 600;
|
|
|
switch (subscriber.chatType) {
|
|
|
case 'group':
|
|
|
- return this.sendToGroup(subscriber.chatID.toString(), msg);
|
|
|
+ return this.sendToGroup(subscriber.chatID.toString(), msg, delay);
|
|
|
case 'private':
|
|
|
- return this.sendToUser(subscriber.chatID.toString(), msg);
|
|
|
+ return this.sendToUser(subscriber.chatID.toString(), msg, delay);
|
|
|
case 'temp': // currently unable to open session, awaiting OneBot v12
|
|
|
- return this.sendToUser(subscriber.chatID.qq.toString(), msg);
|
|
|
+ return this.sendToUser(subscriber.chatID.qq.toString(), msg, delay);
|
|
|
}
|
|
|
}))
|
|
|
.then(response => {
|