Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
MR414N-ID
GitHub Repository: MR414N-ID/botku2
Path: blob/master/node_modules/@adiwajshing/baileys/lib/Utils/baileys-event-stream.js
1129 views
1
"use strict";
2
var __importDefault = (this && this.__importDefault) || function (mod) {
3
return (mod && mod.__esModule) ? mod : { "default": mod };
4
};
5
Object.defineProperty(exports, "__esModule", { value: true });
6
exports.readAndEmitEventStream = exports.captureEventStream = void 0;
7
const events_1 = __importDefault(require("events"));
8
const fs_1 = require("fs");
9
const promises_1 = require("fs/promises");
10
const readline_1 = require("readline");
11
const generics_1 = require("./generics");
12
const make_mutex_1 = require("./make-mutex");
13
/**
14
* Captures events from a baileys event emitter & stores them in a file
15
* @param ev The event emitter to read events from
16
* @param filename File to save to
17
*/
18
const captureEventStream = (ev, filename) => {
19
const oldEmit = ev.emit;
20
// write mutex so data is appended in order
21
const writeMutex = (0, make_mutex_1.makeMutex)();
22
// monkey patch eventemitter to capture all events
23
ev.emit = function (...args) {
24
const content = JSON.stringify({ timestamp: Date.now(), event: args[0], data: args[1] }) + '\n';
25
const result = oldEmit.apply(ev, args);
26
writeMutex.mutex(async () => {
27
await (0, promises_1.writeFile)(filename, content, { flag: 'a' });
28
});
29
return result;
30
};
31
};
32
exports.captureEventStream = captureEventStream;
33
/**
34
* Read event file and emit events from there
35
* @param filename filename containing event data
36
* @param delayIntervalMs delay between each event emit
37
*/
38
const readAndEmitEventStream = (filename, delayIntervalMs = 0) => {
39
const ev = new events_1.default();
40
const fireEvents = async () => {
41
// from: https://stackoverflow.com/questions/6156501/read-a-file-one-line-at-a-time-in-node-js
42
const fileStream = (0, fs_1.createReadStream)(filename);
43
const rl = (0, readline_1.createInterface)({
44
input: fileStream,
45
crlfDelay: Infinity
46
});
47
// Note: we use the crlfDelay option to recognize all instances of CR LF
48
// ('\r\n') in input.txt as a single line break.
49
for await (const line of rl) {
50
if (line) {
51
const { event, data } = JSON.parse(line);
52
ev.emit(event, data);
53
delayIntervalMs && await (0, generics_1.delay)(delayIntervalMs);
54
}
55
}
56
fileStream.close();
57
};
58
return {
59
ev,
60
task: fireEvents()
61
};
62
};
63
exports.readAndEmitEventStream = readAndEmitEventStream;
64
65