whatsapp-cloud-bot 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +561 -0
- package/dist/cjs/Dispatcher.js +153 -0
- package/dist/cjs/Dispatcher.js.map +1 -0
- package/dist/cjs/Handlers.js +206 -0
- package/dist/cjs/Handlers.js.map +1 -0
- package/dist/cjs/Markup.js +181 -0
- package/dist/cjs/Markup.js.map +1 -0
- package/dist/cjs/Message.js +204 -0
- package/dist/cjs/Message.js.map +1 -0
- package/dist/cjs/Update.js +28 -0
- package/dist/cjs/Update.js.map +1 -0
- package/dist/cjs/UserContext.js +70 -0
- package/dist/cjs/UserContext.js.map +1 -0
- package/dist/cjs/WhatsApp.js +125 -0
- package/dist/cjs/WhatsApp.js.map +1 -0
- package/dist/cjs/index.js +52 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/types/index.js +3 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/utils/helpers.js +69 -0
- package/dist/cjs/utils/helpers.js.map +1 -0
- package/dist/esm/Dispatcher.js +149 -0
- package/dist/esm/Dispatcher.js.map +1 -0
- package/dist/esm/Handlers.js +191 -0
- package/dist/esm/Handlers.js.map +1 -0
- package/dist/esm/Markup.js +171 -0
- package/dist/esm/Markup.js.map +1 -0
- package/dist/esm/Message.js +189 -0
- package/dist/esm/Message.js.map +1 -0
- package/dist/esm/Update.js +24 -0
- package/dist/esm/Update.js.map +1 -0
- package/dist/esm/UserContext.js +64 -0
- package/dist/esm/UserContext.js.map +1 -0
- package/dist/esm/WhatsApp.js +121 -0
- package/dist/esm/WhatsApp.js.map +1 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/types/index.js +2 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/utils/helpers.js +62 -0
- package/dist/esm/utils/helpers.js.map +1 -0
- package/dist/types/Dispatcher.d.ts +25 -0
- package/dist/types/Dispatcher.d.ts.map +1 -0
- package/dist/types/Handlers.d.ts +61 -0
- package/dist/types/Handlers.d.ts.map +1 -0
- package/dist/types/Markup.d.ts +50 -0
- package/dist/types/Markup.d.ts.map +1 -0
- package/dist/types/Message.d.ts +22 -0
- package/dist/types/Message.d.ts.map +1 -0
- package/dist/types/Update.d.ts +32 -0
- package/dist/types/Update.d.ts.map +1 -0
- package/dist/types/UserContext.d.ts +16 -0
- package/dist/types/UserContext.d.ts.map +1 -0
- package/dist/types/WhatsApp.d.ts +49 -0
- package/dist/types/WhatsApp.d.ts.map +1 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +194 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/utils/helpers.d.ts +6 -0
- package/dist/types/utils/helpers.d.ts.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Dispatcher = void 0;
|
|
4
|
+
const Update_1 = require("./Update");
|
|
5
|
+
const UserContext_1 = require("./UserContext");
|
|
6
|
+
const Handlers_1 = require("./Handlers");
|
|
7
|
+
const helpers_1 = require("./utils/helpers");
|
|
8
|
+
class AsyncQueue {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.queue = [];
|
|
11
|
+
this.processing = false;
|
|
12
|
+
}
|
|
13
|
+
async enqueue(item, processor) {
|
|
14
|
+
this.queue.push(item);
|
|
15
|
+
if (!this.processing) {
|
|
16
|
+
await this.processQueue(processor);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
async processQueue(processor) {
|
|
20
|
+
this.processing = true;
|
|
21
|
+
while (this.queue.length > 0) {
|
|
22
|
+
const item = this.queue.shift();
|
|
23
|
+
if (item) {
|
|
24
|
+
await processor(item);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
this.processing = false;
|
|
28
|
+
}
|
|
29
|
+
get size() {
|
|
30
|
+
return this.queue.length;
|
|
31
|
+
}
|
|
32
|
+
get isProcessing() {
|
|
33
|
+
return this.processing;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
class Dispatcher {
|
|
37
|
+
constructor(bot, markAsRead = true) {
|
|
38
|
+
this.registeredHandlers = [];
|
|
39
|
+
this.nextStepHandlers = new Map();
|
|
40
|
+
this.bot = bot;
|
|
41
|
+
this.queue = new AsyncQueue();
|
|
42
|
+
this.markAsRead = markAsRead;
|
|
43
|
+
}
|
|
44
|
+
async processUpdate(update) {
|
|
45
|
+
await this.queue.enqueue(update, this.processQueueItem.bind(this));
|
|
46
|
+
}
|
|
47
|
+
async processQueueItem(webhookPayload) {
|
|
48
|
+
if (!(0, helpers_1.keysExist)(webhookPayload, 'entry', 0, 'changes', 0, 'value')) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const value = webhookPayload.entry[0].changes[0].value;
|
|
52
|
+
if (!(0, helpers_1.keysExist)(value, 'metadata', 'phone_number_id')) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (String(value.metadata.phone_number_id) !== String(this.bot.id)) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (!(0, helpers_1.keysExist)(value, 'messages')) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const message = value.messages[0];
|
|
62
|
+
if (this.markAsRead) {
|
|
63
|
+
await this.bot.markAsRead(message).catch(() => {
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
const update = new Update_1.Update(this.bot, value);
|
|
67
|
+
const handlers = this.getHandlersForUpdate(update);
|
|
68
|
+
for (const handler of handlers) {
|
|
69
|
+
const messageText = handler.extractData(message).messageText;
|
|
70
|
+
const shouldRun = await this.checkAndRunHandler(handler, value, messageText);
|
|
71
|
+
if (shouldRun) {
|
|
72
|
+
const nextStepConfig = this.nextStepHandlers.get(update.userPhoneNumber);
|
|
73
|
+
if (nextStepConfig &&
|
|
74
|
+
(nextStepConfig.handler === handler ||
|
|
75
|
+
nextStepConfig.fallbackHandler === handler)) {
|
|
76
|
+
this.nextStepHandlers.delete(update.userPhoneNumber);
|
|
77
|
+
}
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
getHandlersForUpdate(update) {
|
|
83
|
+
const persistentHandlers = this.registeredHandlers.filter((h) => h.persistent);
|
|
84
|
+
const nextStepConfig = this.nextStepHandlers.get(update.userPhoneNumber);
|
|
85
|
+
if (nextStepConfig) {
|
|
86
|
+
const handlers = [];
|
|
87
|
+
if (nextStepConfig.fallbackHandler) {
|
|
88
|
+
handlers.push(nextStepConfig.fallbackHandler);
|
|
89
|
+
}
|
|
90
|
+
handlers.push(nextStepConfig.handler);
|
|
91
|
+
return [...persistentHandlers, ...handlers];
|
|
92
|
+
}
|
|
93
|
+
return [...persistentHandlers, ...this.registeredHandlers];
|
|
94
|
+
}
|
|
95
|
+
async checkAndRunHandler(handler, value, messageText) {
|
|
96
|
+
const message = value.messages?.[0];
|
|
97
|
+
if (!message)
|
|
98
|
+
return false;
|
|
99
|
+
if (handler.name !== message.type) {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
if (!handler.filterCheck(messageText)) {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
const update = new Update_1.Update(this.bot, value);
|
|
106
|
+
const extractedData = handler.extractData(message);
|
|
107
|
+
update.messageText = extractedData.messageText;
|
|
108
|
+
Object.assign(update, extractedData);
|
|
109
|
+
if (handler.context) {
|
|
110
|
+
const context = new UserContext_1.UserContext(update.userPhoneNumber);
|
|
111
|
+
await handler.run(update, context);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
await handler.run(update);
|
|
115
|
+
}
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
registerHandler(handler) {
|
|
119
|
+
this.registeredHandlers.push(handler);
|
|
120
|
+
return this.registeredHandlers.length - 1;
|
|
121
|
+
}
|
|
122
|
+
setNextStep(update, handler, fallbackFunction, fallbackRegex = /^(end|stop|cancel)$/i) {
|
|
123
|
+
const config = {
|
|
124
|
+
handler: handler,
|
|
125
|
+
};
|
|
126
|
+
if (fallbackFunction) {
|
|
127
|
+
const regex = typeof fallbackRegex === 'string'
|
|
128
|
+
? new RegExp(fallbackRegex)
|
|
129
|
+
: fallbackRegex;
|
|
130
|
+
config.fallbackHandler = new Handlers_1.MessageHandler(fallbackFunction, {
|
|
131
|
+
regex,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
this.nextStepHandlers.set(update.userPhoneNumber, config);
|
|
135
|
+
}
|
|
136
|
+
clearNextStep(phoneNumber) {
|
|
137
|
+
this.nextStepHandlers.delete(phoneNumber);
|
|
138
|
+
}
|
|
139
|
+
getHandlers() {
|
|
140
|
+
return [...this.registeredHandlers];
|
|
141
|
+
}
|
|
142
|
+
clearHandlers() {
|
|
143
|
+
this.registeredHandlers = [];
|
|
144
|
+
}
|
|
145
|
+
getQueueStatus() {
|
|
146
|
+
return {
|
|
147
|
+
size: this.queue.size,
|
|
148
|
+
isProcessing: this.queue.isProcessing,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
exports.Dispatcher = Dispatcher;
|
|
153
|
+
//# sourceMappingURL=Dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dispatcher.js","sourceRoot":"","sources":["../../src/Dispatcher.ts"],"names":[],"mappings":";;;AAMA,qCAAkC;AAClC,+CAA4C;AAE5C,yCAA4C;AAC5C,6CAA4C;AAK5C,MAAM,UAAU;IAAhB;QACU,UAAK,GAAQ,EAAE,CAAC;QAChB,eAAU,GAAG,KAAK,CAAC;IA6B7B,CAAC;IA3BC,KAAK,CAAC,OAAO,CAAC,IAAO,EAAE,SAAqC;QAC1D,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,SAAqC;QAErC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAChC,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;CACF;AAKD,MAAa,UAAU;IAOrB,YAAY,GAAQ,EAAE,aAAsB,IAAI;QAJxC,uBAAkB,GAAoB,EAAE,CAAC;QAEzC,qBAAgB,GAAgC,IAAI,GAAG,EAAE,CAAC;QAGhE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,EAAkB,CAAC;QAC9C,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAKD,KAAK,CAAC,aAAa,CAAC,MAAsB;QACxC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACrE,CAAC;IAKO,KAAK,CAAC,gBAAgB,CAC5B,cAA8B;QAE9B,IAAI,CAAC,IAAA,mBAAS,EAAC,cAAc,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;YAClE,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAiB,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAErE,IAAI,CAAC,IAAA,mBAAS,EAAC,KAAK,EAAE,UAAU,EAAE,iBAAiB,CAAC,EAAE,CAAC;YACrD,OAAO;QACT,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACnE,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAA,mBAAS,EAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC;YAClC,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC;QAGnC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAE9C,CAAC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAG3C,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAGnD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC;YAE7D,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAC7C,OAAO,EACP,KAAK,EACL,WAAW,CACZ,CAAC;YAEF,IAAI,SAAS,EAAE,CAAC;gBAEd,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAC9C,MAAM,CAAC,eAAe,CACvB,CAAC;gBACF,IACE,cAAc;oBACd,CAAC,cAAc,CAAC,OAAO,KAAK,OAAO;wBACjC,cAAc,CAAC,eAAe,KAAK,OAAO,CAAC,EAC7C,CAAC;oBACD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;gBACvD,CAAC;gBACD,OAAO;YACT,CAAC;QACH,CAAC;IACH,CAAC;IAKO,oBAAoB,CAAC,MAAc;QACzC,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CACvD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CACpB,CAAC;QAEF,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAEzE,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAoB,EAAE,CAAC;YACrC,IAAI,cAAc,CAAC,eAAe,EAAE,CAAC;gBACnC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;YAChD,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,kBAAkB,EAAE,GAAG,QAAQ,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,CAAC,GAAG,kBAAkB,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC7D,CAAC;IAKO,KAAK,CAAC,kBAAkB,CAC9B,OAAsB,EACtB,KAAmB,EACnB,WAAmB;QAEnB,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAG3B,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;YAClC,OAAO,KAAK,CAAC;QACf,CAAC;QAGD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;YACtC,OAAO,KAAK,CAAC;QACf,CAAC;QAGD,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3C,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAEnD,MAAM,CAAC,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAGrC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,IAAI,yBAAW,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;YACxD,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,eAAe,CAAC,OAAsB;QACpC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5C,CAAC;IAKD,WAAW,CACT,MAAc,EACd,OAAsB,EACtB,gBAA6C,EAC7C,gBAAiC,sBAAsB;QAEvD,MAAM,MAAM,GAAmB;YAC7B,OAAO,EAAE,OAAO;SACjB,CAAC;QAEF,IAAI,gBAAgB,EAAE,CAAC;YACrB,MAAM,KAAK,GACT,OAAO,aAAa,KAAK,QAAQ;gBAC/B,CAAC,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC;gBAC3B,CAAC,CAAC,aAAa,CAAC;YAEpB,MAAM,CAAC,eAAe,GAAG,IAAI,yBAAc,CAAC,gBAAuB,EAAE;gBACnE,KAAK;aACN,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC;IAKD,aAAa,CAAC,WAAmB;QAC/B,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC5C,CAAC;IAKD,WAAW;QACT,OAAO,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACtC,CAAC;IAKD,aAAa;QACX,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;IAC/B,CAAC;IAKD,cAAc;QACZ,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;YACrB,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY;SACtC,CAAC;IACJ,CAAC;CACF;AAnND,gCAmNC"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UnsupportedHandler = exports.UnknownHandler = exports.LocationHandler = exports.StickerHandler = exports.DocumentHandler = exports.VideoHandler = exports.AudioHandler = exports.ImageHandler = exports.MediaHandler = exports.InteractiveQueryHandler = exports.MessageHandler = exports.UpdateHandler = void 0;
|
|
4
|
+
class UpdateHandler {
|
|
5
|
+
constructor(name, action, options = {}) {
|
|
6
|
+
this.name = name;
|
|
7
|
+
this.action = action;
|
|
8
|
+
this.context = options.context !== false;
|
|
9
|
+
this.persistent = options.persistent || false;
|
|
10
|
+
if (options.regex) {
|
|
11
|
+
this.regex =
|
|
12
|
+
typeof options.regex === 'string'
|
|
13
|
+
? new RegExp(options.regex)
|
|
14
|
+
: options.regex;
|
|
15
|
+
}
|
|
16
|
+
if (options.filter) {
|
|
17
|
+
this.filter = options.filter;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
filterCheck(text) {
|
|
21
|
+
if (this.regex) {
|
|
22
|
+
return this.regex.test(text);
|
|
23
|
+
}
|
|
24
|
+
if (this.filter) {
|
|
25
|
+
return this.filter(text);
|
|
26
|
+
}
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
async run(update, context) {
|
|
30
|
+
if (this.context && context) {
|
|
31
|
+
await this.action(update, context);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
await this.action(update);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.UpdateHandler = UpdateHandler;
|
|
39
|
+
class MessageHandler extends UpdateHandler {
|
|
40
|
+
constructor(action, options = {}) {
|
|
41
|
+
super('text', action, options);
|
|
42
|
+
}
|
|
43
|
+
extractData(message) {
|
|
44
|
+
return {
|
|
45
|
+
messageText: message.text?.body || '',
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.MessageHandler = MessageHandler;
|
|
50
|
+
class InteractiveQueryHandler extends UpdateHandler {
|
|
51
|
+
constructor(action, options = {}) {
|
|
52
|
+
super('interactive', action, options);
|
|
53
|
+
this.handleButton = options.handleButton !== false;
|
|
54
|
+
this.handleList = options.handleList !== false;
|
|
55
|
+
}
|
|
56
|
+
extractData(message) {
|
|
57
|
+
const data = {
|
|
58
|
+
messageText: '',
|
|
59
|
+
};
|
|
60
|
+
if (!message.interactive) {
|
|
61
|
+
return data;
|
|
62
|
+
}
|
|
63
|
+
if (message.interactive.type === 'button_reply' &&
|
|
64
|
+
this.handleButton &&
|
|
65
|
+
message.interactive.button_reply) {
|
|
66
|
+
data.messageText = message.interactive.button_reply.id;
|
|
67
|
+
data.buttonReply = message.interactive.button_reply;
|
|
68
|
+
}
|
|
69
|
+
else if (message.interactive.type === 'list_reply' &&
|
|
70
|
+
this.handleList &&
|
|
71
|
+
message.interactive.list_reply) {
|
|
72
|
+
data.messageText = message.interactive.list_reply.id;
|
|
73
|
+
data.listReply = message.interactive.list_reply;
|
|
74
|
+
}
|
|
75
|
+
return data;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.InteractiveQueryHandler = InteractiveQueryHandler;
|
|
79
|
+
class MediaHandler extends UpdateHandler {
|
|
80
|
+
constructor(name, action, options = {}) {
|
|
81
|
+
super(name, action, options);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
exports.MediaHandler = MediaHandler;
|
|
85
|
+
class ImageHandler extends MediaHandler {
|
|
86
|
+
constructor(action, options = {}) {
|
|
87
|
+
super('image', action, options);
|
|
88
|
+
}
|
|
89
|
+
extractData(message) {
|
|
90
|
+
const imageData = message.image;
|
|
91
|
+
return {
|
|
92
|
+
messageText: imageData?.caption || '',
|
|
93
|
+
mediaMimeType: imageData?.mime_type,
|
|
94
|
+
mediaFileId: imageData?.id,
|
|
95
|
+
mediaHash: imageData?.sha256,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
exports.ImageHandler = ImageHandler;
|
|
100
|
+
class AudioHandler extends MediaHandler {
|
|
101
|
+
constructor(action, options = {}) {
|
|
102
|
+
super('audio', action, options);
|
|
103
|
+
}
|
|
104
|
+
extractData(message) {
|
|
105
|
+
const audioData = message.audio;
|
|
106
|
+
return {
|
|
107
|
+
messageText: '',
|
|
108
|
+
mediaMimeType: audioData?.mime_type,
|
|
109
|
+
mediaFileId: audioData?.id,
|
|
110
|
+
mediaHash: audioData?.sha256,
|
|
111
|
+
mediaVoice: audioData?.voice,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
exports.AudioHandler = AudioHandler;
|
|
116
|
+
class VideoHandler extends MediaHandler {
|
|
117
|
+
constructor(action, options = {}) {
|
|
118
|
+
super('video', action, options);
|
|
119
|
+
}
|
|
120
|
+
extractData(message) {
|
|
121
|
+
const videoData = message.video;
|
|
122
|
+
return {
|
|
123
|
+
messageText: videoData?.caption || '',
|
|
124
|
+
mediaMimeType: videoData?.mime_type,
|
|
125
|
+
mediaFileId: videoData?.id,
|
|
126
|
+
mediaHash: videoData?.sha256,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
exports.VideoHandler = VideoHandler;
|
|
131
|
+
class DocumentHandler extends MediaHandler {
|
|
132
|
+
constructor(action, options = {}) {
|
|
133
|
+
super('document', action, options);
|
|
134
|
+
}
|
|
135
|
+
extractData(message) {
|
|
136
|
+
const docData = message.document;
|
|
137
|
+
return {
|
|
138
|
+
messageText: docData?.caption || '',
|
|
139
|
+
mediaMimeType: docData?.mime_type,
|
|
140
|
+
mediaFileId: docData?.id,
|
|
141
|
+
mediaHash: docData?.sha256,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
exports.DocumentHandler = DocumentHandler;
|
|
146
|
+
class StickerHandler extends MediaHandler {
|
|
147
|
+
constructor(action, options = {}) {
|
|
148
|
+
super('sticker', action, options);
|
|
149
|
+
}
|
|
150
|
+
extractData(message) {
|
|
151
|
+
const stickerData = message.sticker;
|
|
152
|
+
return {
|
|
153
|
+
messageText: '',
|
|
154
|
+
mediaMimeType: stickerData?.mime_type,
|
|
155
|
+
mediaFileId: stickerData?.id,
|
|
156
|
+
mediaHash: stickerData?.sha256,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
exports.StickerHandler = StickerHandler;
|
|
161
|
+
class LocationHandler extends UpdateHandler {
|
|
162
|
+
constructor(action, options = {}) {
|
|
163
|
+
super('location', action, options);
|
|
164
|
+
}
|
|
165
|
+
extractData(message) {
|
|
166
|
+
const locData = message.location;
|
|
167
|
+
const locName = locData?.name || '';
|
|
168
|
+
const locAddress = locData?.address || '';
|
|
169
|
+
const latitude = locData?.latitude;
|
|
170
|
+
const longitude = locData?.longitude;
|
|
171
|
+
const messageText = locName || locAddress
|
|
172
|
+
? `${locName}\n${locAddress}`.trim()
|
|
173
|
+
: `lat: ${latitude}, long: ${longitude}`;
|
|
174
|
+
return {
|
|
175
|
+
messageText,
|
|
176
|
+
locAddress,
|
|
177
|
+
locName,
|
|
178
|
+
locLatitude: latitude,
|
|
179
|
+
locLongitude: longitude,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
exports.LocationHandler = LocationHandler;
|
|
184
|
+
class UnknownHandler extends UpdateHandler {
|
|
185
|
+
constructor(action, options = {}) {
|
|
186
|
+
super('unknown', action, options);
|
|
187
|
+
}
|
|
188
|
+
extractData(_message) {
|
|
189
|
+
return {
|
|
190
|
+
messageText: '',
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
exports.UnknownHandler = UnknownHandler;
|
|
195
|
+
class UnsupportedHandler extends UpdateHandler {
|
|
196
|
+
constructor(action, options = {}) {
|
|
197
|
+
super('unsupported', action, options);
|
|
198
|
+
}
|
|
199
|
+
extractData(_message) {
|
|
200
|
+
return {
|
|
201
|
+
messageText: '',
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
exports.UnsupportedHandler = UnsupportedHandler;
|
|
206
|
+
//# sourceMappingURL=Handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Handlers.js","sourceRoot":"","sources":["../../src/Handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InlineLocationRequest = exports.InlineList = exports.ListSection = exports.ListItem = exports.InlineKeyboard = exports.InlineButton = exports.BaseReplyMarkup = void 0;
|
|
4
|
+
class BaseReplyMarkup {
|
|
5
|
+
constructor(type, markup) {
|
|
6
|
+
this.type = type;
|
|
7
|
+
this.markup = markup;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.BaseReplyMarkup = BaseReplyMarkup;
|
|
11
|
+
class InlineButton {
|
|
12
|
+
constructor(text, buttonId) {
|
|
13
|
+
if (text.length > 20) {
|
|
14
|
+
throw new Error('Button text must be 20 characters or less');
|
|
15
|
+
}
|
|
16
|
+
this.button = {
|
|
17
|
+
type: 'reply',
|
|
18
|
+
reply: {
|
|
19
|
+
id: buttonId || text,
|
|
20
|
+
title: text,
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.InlineButton = InlineButton;
|
|
26
|
+
class InlineKeyboard extends BaseReplyMarkup {
|
|
27
|
+
constructor(buttons) {
|
|
28
|
+
const inlineButtons = InlineKeyboard.setButtons(buttons);
|
|
29
|
+
InlineKeyboard.validateButtons(inlineButtons);
|
|
30
|
+
const markup = {
|
|
31
|
+
buttons: inlineButtons.map((btn) => btn.button),
|
|
32
|
+
};
|
|
33
|
+
super('button', markup);
|
|
34
|
+
}
|
|
35
|
+
static setButtons(buttons) {
|
|
36
|
+
if (!Array.isArray(buttons)) {
|
|
37
|
+
throw new Error('Buttons must be an array');
|
|
38
|
+
}
|
|
39
|
+
return buttons.map((btn) => {
|
|
40
|
+
if (typeof btn === 'string') {
|
|
41
|
+
return new InlineButton(btn);
|
|
42
|
+
}
|
|
43
|
+
else if (btn instanceof InlineButton) {
|
|
44
|
+
return btn;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
throw new Error('Button elements must be strings or InlineButton instances');
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
static validateButtons(buttons) {
|
|
52
|
+
if (buttons.length < 1 || buttons.length > 3) {
|
|
53
|
+
throw new Error(`InlineKeyboard must have 1-3 buttons, got ${buttons.length}`);
|
|
54
|
+
}
|
|
55
|
+
const ids = new Set();
|
|
56
|
+
const titles = new Set();
|
|
57
|
+
for (const button of buttons) {
|
|
58
|
+
const id = button.button.reply.id;
|
|
59
|
+
const title = button.button.reply.title;
|
|
60
|
+
if (ids.has(id) || titles.has(title)) {
|
|
61
|
+
throw new Error('Button IDs and titles must be unique');
|
|
62
|
+
}
|
|
63
|
+
ids.add(id);
|
|
64
|
+
titles.add(title);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.InlineKeyboard = InlineKeyboard;
|
|
69
|
+
class ListItem {
|
|
70
|
+
constructor(title, id, description) {
|
|
71
|
+
if (title.length > 24) {
|
|
72
|
+
throw new Error('List item title must be 24 characters or less');
|
|
73
|
+
}
|
|
74
|
+
if (description && description.length > 72) {
|
|
75
|
+
throw new Error('List item description must be 72 characters or less');
|
|
76
|
+
}
|
|
77
|
+
this.item = {
|
|
78
|
+
id: id || title,
|
|
79
|
+
title: title,
|
|
80
|
+
};
|
|
81
|
+
if (description) {
|
|
82
|
+
this.item.description = description;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.ListItem = ListItem;
|
|
87
|
+
class ListSection {
|
|
88
|
+
constructor(title, items) {
|
|
89
|
+
if (title.length > 24) {
|
|
90
|
+
throw new Error('Section title must be 24 characters or less');
|
|
91
|
+
}
|
|
92
|
+
const listItems = ListSection.setItems(items);
|
|
93
|
+
ListSection.validateItems(listItems);
|
|
94
|
+
this.section = {
|
|
95
|
+
title: title,
|
|
96
|
+
rows: listItems.map((item) => item.item),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
static setItems(items) {
|
|
100
|
+
if (!Array.isArray(items)) {
|
|
101
|
+
throw new Error('Items must be an array');
|
|
102
|
+
}
|
|
103
|
+
return items.map((item) => {
|
|
104
|
+
if (typeof item === 'string') {
|
|
105
|
+
return new ListItem(item);
|
|
106
|
+
}
|
|
107
|
+
else if (item instanceof ListItem) {
|
|
108
|
+
return item;
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
throw new Error('Items must be strings or ListItem instances');
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
static validateItems(items) {
|
|
116
|
+
if (items.length < 1 || items.length > 10) {
|
|
117
|
+
throw new Error(`Section must have 1-10 items, got ${items.length}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
exports.ListSection = ListSection;
|
|
122
|
+
class InlineList extends BaseReplyMarkup {
|
|
123
|
+
constructor(buttonText, listItems) {
|
|
124
|
+
if (buttonText.length > 20) {
|
|
125
|
+
throw new Error('List button text must be 20 characters or less');
|
|
126
|
+
}
|
|
127
|
+
InlineList.validateList(listItems);
|
|
128
|
+
let sections;
|
|
129
|
+
if (listItems.length > 0 && listItems[0] instanceof ListSection) {
|
|
130
|
+
sections = listItems.map((section) => section.section);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
sections = [
|
|
134
|
+
{
|
|
135
|
+
rows: listItems.map((item) => item.item),
|
|
136
|
+
},
|
|
137
|
+
];
|
|
138
|
+
}
|
|
139
|
+
const markup = {
|
|
140
|
+
button: buttonText,
|
|
141
|
+
sections: sections,
|
|
142
|
+
};
|
|
143
|
+
super('list', markup);
|
|
144
|
+
}
|
|
145
|
+
static validateList(items) {
|
|
146
|
+
if (!Array.isArray(items)) {
|
|
147
|
+
throw new Error('List items must be an array');
|
|
148
|
+
}
|
|
149
|
+
if (items.length === 0) {
|
|
150
|
+
throw new Error('List must have at least one item or section');
|
|
151
|
+
}
|
|
152
|
+
const isAllListItems = items.every((item) => item instanceof ListItem);
|
|
153
|
+
const isAllSections = items.every((item) => item instanceof ListSection);
|
|
154
|
+
if (!isAllListItems && !isAllSections) {
|
|
155
|
+
throw new Error('List items must be all ListItem or all ListSection instances');
|
|
156
|
+
}
|
|
157
|
+
let totalItems = 0;
|
|
158
|
+
if (isAllSections) {
|
|
159
|
+
for (const section of items) {
|
|
160
|
+
totalItems += section.section.rows.length;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
totalItems = items.length;
|
|
165
|
+
}
|
|
166
|
+
if (totalItems > 10) {
|
|
167
|
+
throw new Error(`List can have maximum 10 items, got ${totalItems}`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
exports.InlineList = InlineList;
|
|
172
|
+
class InlineLocationRequest extends BaseReplyMarkup {
|
|
173
|
+
constructor() {
|
|
174
|
+
const markup = {
|
|
175
|
+
name: 'send_location',
|
|
176
|
+
};
|
|
177
|
+
super('location_request_message', markup);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
exports.InlineLocationRequest = InlineLocationRequest;
|
|
181
|
+
//# sourceMappingURL=Markup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Markup.js","sourceRoot":"","sources":["../../src/Markup.ts"],"names":[],"mappings":"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"}
|