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,149 @@
|
|
|
1
|
+
import { Update } from './Update';
|
|
2
|
+
import { UserContext } from './UserContext';
|
|
3
|
+
import { MessageHandler } from './Handlers';
|
|
4
|
+
import { keysExist } from './utils/helpers';
|
|
5
|
+
class AsyncQueue {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.queue = [];
|
|
8
|
+
this.processing = false;
|
|
9
|
+
}
|
|
10
|
+
async enqueue(item, processor) {
|
|
11
|
+
this.queue.push(item);
|
|
12
|
+
if (!this.processing) {
|
|
13
|
+
await this.processQueue(processor);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
async processQueue(processor) {
|
|
17
|
+
this.processing = true;
|
|
18
|
+
while (this.queue.length > 0) {
|
|
19
|
+
const item = this.queue.shift();
|
|
20
|
+
if (item) {
|
|
21
|
+
await processor(item);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
this.processing = false;
|
|
25
|
+
}
|
|
26
|
+
get size() {
|
|
27
|
+
return this.queue.length;
|
|
28
|
+
}
|
|
29
|
+
get isProcessing() {
|
|
30
|
+
return this.processing;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export class Dispatcher {
|
|
34
|
+
constructor(bot, markAsRead = true) {
|
|
35
|
+
this.registeredHandlers = [];
|
|
36
|
+
this.nextStepHandlers = new Map();
|
|
37
|
+
this.bot = bot;
|
|
38
|
+
this.queue = new AsyncQueue();
|
|
39
|
+
this.markAsRead = markAsRead;
|
|
40
|
+
}
|
|
41
|
+
async processUpdate(update) {
|
|
42
|
+
await this.queue.enqueue(update, this.processQueueItem.bind(this));
|
|
43
|
+
}
|
|
44
|
+
async processQueueItem(webhookPayload) {
|
|
45
|
+
if (!keysExist(webhookPayload, 'entry', 0, 'changes', 0, 'value')) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const value = webhookPayload.entry[0].changes[0].value;
|
|
49
|
+
if (!keysExist(value, 'metadata', 'phone_number_id')) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (String(value.metadata.phone_number_id) !== String(this.bot.id)) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (!keysExist(value, 'messages')) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const message = value.messages[0];
|
|
59
|
+
if (this.markAsRead) {
|
|
60
|
+
await this.bot.markAsRead(message).catch(() => {
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
const update = new Update(this.bot, value);
|
|
64
|
+
const handlers = this.getHandlersForUpdate(update);
|
|
65
|
+
for (const handler of handlers) {
|
|
66
|
+
const messageText = handler.extractData(message).messageText;
|
|
67
|
+
const shouldRun = await this.checkAndRunHandler(handler, value, messageText);
|
|
68
|
+
if (shouldRun) {
|
|
69
|
+
const nextStepConfig = this.nextStepHandlers.get(update.userPhoneNumber);
|
|
70
|
+
if (nextStepConfig &&
|
|
71
|
+
(nextStepConfig.handler === handler ||
|
|
72
|
+
nextStepConfig.fallbackHandler === handler)) {
|
|
73
|
+
this.nextStepHandlers.delete(update.userPhoneNumber);
|
|
74
|
+
}
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
getHandlersForUpdate(update) {
|
|
80
|
+
const persistentHandlers = this.registeredHandlers.filter((h) => h.persistent);
|
|
81
|
+
const nextStepConfig = this.nextStepHandlers.get(update.userPhoneNumber);
|
|
82
|
+
if (nextStepConfig) {
|
|
83
|
+
const handlers = [];
|
|
84
|
+
if (nextStepConfig.fallbackHandler) {
|
|
85
|
+
handlers.push(nextStepConfig.fallbackHandler);
|
|
86
|
+
}
|
|
87
|
+
handlers.push(nextStepConfig.handler);
|
|
88
|
+
return [...persistentHandlers, ...handlers];
|
|
89
|
+
}
|
|
90
|
+
return [...persistentHandlers, ...this.registeredHandlers];
|
|
91
|
+
}
|
|
92
|
+
async checkAndRunHandler(handler, value, messageText) {
|
|
93
|
+
const message = value.messages?.[0];
|
|
94
|
+
if (!message)
|
|
95
|
+
return false;
|
|
96
|
+
if (handler.name !== message.type) {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
if (!handler.filterCheck(messageText)) {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
const update = new Update(this.bot, value);
|
|
103
|
+
const extractedData = handler.extractData(message);
|
|
104
|
+
update.messageText = extractedData.messageText;
|
|
105
|
+
Object.assign(update, extractedData);
|
|
106
|
+
if (handler.context) {
|
|
107
|
+
const context = new UserContext(update.userPhoneNumber);
|
|
108
|
+
await handler.run(update, context);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
await handler.run(update);
|
|
112
|
+
}
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
registerHandler(handler) {
|
|
116
|
+
this.registeredHandlers.push(handler);
|
|
117
|
+
return this.registeredHandlers.length - 1;
|
|
118
|
+
}
|
|
119
|
+
setNextStep(update, handler, fallbackFunction, fallbackRegex = /^(end|stop|cancel)$/i) {
|
|
120
|
+
const config = {
|
|
121
|
+
handler: handler,
|
|
122
|
+
};
|
|
123
|
+
if (fallbackFunction) {
|
|
124
|
+
const regex = typeof fallbackRegex === 'string'
|
|
125
|
+
? new RegExp(fallbackRegex)
|
|
126
|
+
: fallbackRegex;
|
|
127
|
+
config.fallbackHandler = new MessageHandler(fallbackFunction, {
|
|
128
|
+
regex,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
this.nextStepHandlers.set(update.userPhoneNumber, config);
|
|
132
|
+
}
|
|
133
|
+
clearNextStep(phoneNumber) {
|
|
134
|
+
this.nextStepHandlers.delete(phoneNumber);
|
|
135
|
+
}
|
|
136
|
+
getHandlers() {
|
|
137
|
+
return [...this.registeredHandlers];
|
|
138
|
+
}
|
|
139
|
+
clearHandlers() {
|
|
140
|
+
this.registeredHandlers = [];
|
|
141
|
+
}
|
|
142
|
+
getQueueStatus() {
|
|
143
|
+
return {
|
|
144
|
+
size: this.queue.size,
|
|
145
|
+
isProcessing: this.queue.isProcessing,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=Dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dispatcher.js","sourceRoot":"","sources":["../../src/Dispatcher.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;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,MAAM,OAAO,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,SAAS,CAAC,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,SAAS,CAAC,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,SAAS,CAAC,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,MAAM,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,MAAM,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,WAAW,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,cAAc,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"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
export class UpdateHandler {
|
|
2
|
+
constructor(name, action, options = {}) {
|
|
3
|
+
this.name = name;
|
|
4
|
+
this.action = action;
|
|
5
|
+
this.context = options.context !== false;
|
|
6
|
+
this.persistent = options.persistent || false;
|
|
7
|
+
if (options.regex) {
|
|
8
|
+
this.regex =
|
|
9
|
+
typeof options.regex === 'string'
|
|
10
|
+
? new RegExp(options.regex)
|
|
11
|
+
: options.regex;
|
|
12
|
+
}
|
|
13
|
+
if (options.filter) {
|
|
14
|
+
this.filter = options.filter;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
filterCheck(text) {
|
|
18
|
+
if (this.regex) {
|
|
19
|
+
return this.regex.test(text);
|
|
20
|
+
}
|
|
21
|
+
if (this.filter) {
|
|
22
|
+
return this.filter(text);
|
|
23
|
+
}
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
async run(update, context) {
|
|
27
|
+
if (this.context && context) {
|
|
28
|
+
await this.action(update, context);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
await this.action(update);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export class MessageHandler extends UpdateHandler {
|
|
36
|
+
constructor(action, options = {}) {
|
|
37
|
+
super('text', action, options);
|
|
38
|
+
}
|
|
39
|
+
extractData(message) {
|
|
40
|
+
return {
|
|
41
|
+
messageText: message.text?.body || '',
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export class InteractiveQueryHandler extends UpdateHandler {
|
|
46
|
+
constructor(action, options = {}) {
|
|
47
|
+
super('interactive', action, options);
|
|
48
|
+
this.handleButton = options.handleButton !== false;
|
|
49
|
+
this.handleList = options.handleList !== false;
|
|
50
|
+
}
|
|
51
|
+
extractData(message) {
|
|
52
|
+
const data = {
|
|
53
|
+
messageText: '',
|
|
54
|
+
};
|
|
55
|
+
if (!message.interactive) {
|
|
56
|
+
return data;
|
|
57
|
+
}
|
|
58
|
+
if (message.interactive.type === 'button_reply' &&
|
|
59
|
+
this.handleButton &&
|
|
60
|
+
message.interactive.button_reply) {
|
|
61
|
+
data.messageText = message.interactive.button_reply.id;
|
|
62
|
+
data.buttonReply = message.interactive.button_reply;
|
|
63
|
+
}
|
|
64
|
+
else if (message.interactive.type === 'list_reply' &&
|
|
65
|
+
this.handleList &&
|
|
66
|
+
message.interactive.list_reply) {
|
|
67
|
+
data.messageText = message.interactive.list_reply.id;
|
|
68
|
+
data.listReply = message.interactive.list_reply;
|
|
69
|
+
}
|
|
70
|
+
return data;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
export class MediaHandler extends UpdateHandler {
|
|
74
|
+
constructor(name, action, options = {}) {
|
|
75
|
+
super(name, action, options);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
export class ImageHandler extends MediaHandler {
|
|
79
|
+
constructor(action, options = {}) {
|
|
80
|
+
super('image', action, options);
|
|
81
|
+
}
|
|
82
|
+
extractData(message) {
|
|
83
|
+
const imageData = message.image;
|
|
84
|
+
return {
|
|
85
|
+
messageText: imageData?.caption || '',
|
|
86
|
+
mediaMimeType: imageData?.mime_type,
|
|
87
|
+
mediaFileId: imageData?.id,
|
|
88
|
+
mediaHash: imageData?.sha256,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
export class AudioHandler extends MediaHandler {
|
|
93
|
+
constructor(action, options = {}) {
|
|
94
|
+
super('audio', action, options);
|
|
95
|
+
}
|
|
96
|
+
extractData(message) {
|
|
97
|
+
const audioData = message.audio;
|
|
98
|
+
return {
|
|
99
|
+
messageText: '',
|
|
100
|
+
mediaMimeType: audioData?.mime_type,
|
|
101
|
+
mediaFileId: audioData?.id,
|
|
102
|
+
mediaHash: audioData?.sha256,
|
|
103
|
+
mediaVoice: audioData?.voice,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
export class VideoHandler extends MediaHandler {
|
|
108
|
+
constructor(action, options = {}) {
|
|
109
|
+
super('video', action, options);
|
|
110
|
+
}
|
|
111
|
+
extractData(message) {
|
|
112
|
+
const videoData = message.video;
|
|
113
|
+
return {
|
|
114
|
+
messageText: videoData?.caption || '',
|
|
115
|
+
mediaMimeType: videoData?.mime_type,
|
|
116
|
+
mediaFileId: videoData?.id,
|
|
117
|
+
mediaHash: videoData?.sha256,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
export class DocumentHandler extends MediaHandler {
|
|
122
|
+
constructor(action, options = {}) {
|
|
123
|
+
super('document', action, options);
|
|
124
|
+
}
|
|
125
|
+
extractData(message) {
|
|
126
|
+
const docData = message.document;
|
|
127
|
+
return {
|
|
128
|
+
messageText: docData?.caption || '',
|
|
129
|
+
mediaMimeType: docData?.mime_type,
|
|
130
|
+
mediaFileId: docData?.id,
|
|
131
|
+
mediaHash: docData?.sha256,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
export class StickerHandler extends MediaHandler {
|
|
136
|
+
constructor(action, options = {}) {
|
|
137
|
+
super('sticker', action, options);
|
|
138
|
+
}
|
|
139
|
+
extractData(message) {
|
|
140
|
+
const stickerData = message.sticker;
|
|
141
|
+
return {
|
|
142
|
+
messageText: '',
|
|
143
|
+
mediaMimeType: stickerData?.mime_type,
|
|
144
|
+
mediaFileId: stickerData?.id,
|
|
145
|
+
mediaHash: stickerData?.sha256,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
export class LocationHandler extends UpdateHandler {
|
|
150
|
+
constructor(action, options = {}) {
|
|
151
|
+
super('location', action, options);
|
|
152
|
+
}
|
|
153
|
+
extractData(message) {
|
|
154
|
+
const locData = message.location;
|
|
155
|
+
const locName = locData?.name || '';
|
|
156
|
+
const locAddress = locData?.address || '';
|
|
157
|
+
const latitude = locData?.latitude;
|
|
158
|
+
const longitude = locData?.longitude;
|
|
159
|
+
const messageText = locName || locAddress
|
|
160
|
+
? `${locName}\n${locAddress}`.trim()
|
|
161
|
+
: `lat: ${latitude}, long: ${longitude}`;
|
|
162
|
+
return {
|
|
163
|
+
messageText,
|
|
164
|
+
locAddress,
|
|
165
|
+
locName,
|
|
166
|
+
locLatitude: latitude,
|
|
167
|
+
locLongitude: longitude,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
export class UnknownHandler extends UpdateHandler {
|
|
172
|
+
constructor(action, options = {}) {
|
|
173
|
+
super('unknown', action, options);
|
|
174
|
+
}
|
|
175
|
+
extractData(_message) {
|
|
176
|
+
return {
|
|
177
|
+
messageText: '',
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
export class UnsupportedHandler extends UpdateHandler {
|
|
182
|
+
constructor(action, options = {}) {
|
|
183
|
+
super('unsupported', action, options);
|
|
184
|
+
}
|
|
185
|
+
extractData(_message) {
|
|
186
|
+
return {
|
|
187
|
+
messageText: '',
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
//# 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,171 @@
|
|
|
1
|
+
export class BaseReplyMarkup {
|
|
2
|
+
constructor(type, markup) {
|
|
3
|
+
this.type = type;
|
|
4
|
+
this.markup = markup;
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export class InlineButton {
|
|
8
|
+
constructor(text, buttonId) {
|
|
9
|
+
if (text.length > 20) {
|
|
10
|
+
throw new Error('Button text must be 20 characters or less');
|
|
11
|
+
}
|
|
12
|
+
this.button = {
|
|
13
|
+
type: 'reply',
|
|
14
|
+
reply: {
|
|
15
|
+
id: buttonId || text,
|
|
16
|
+
title: text,
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export class InlineKeyboard extends BaseReplyMarkup {
|
|
22
|
+
constructor(buttons) {
|
|
23
|
+
const inlineButtons = InlineKeyboard.setButtons(buttons);
|
|
24
|
+
InlineKeyboard.validateButtons(inlineButtons);
|
|
25
|
+
const markup = {
|
|
26
|
+
buttons: inlineButtons.map((btn) => btn.button),
|
|
27
|
+
};
|
|
28
|
+
super('button', markup);
|
|
29
|
+
}
|
|
30
|
+
static setButtons(buttons) {
|
|
31
|
+
if (!Array.isArray(buttons)) {
|
|
32
|
+
throw new Error('Buttons must be an array');
|
|
33
|
+
}
|
|
34
|
+
return buttons.map((btn) => {
|
|
35
|
+
if (typeof btn === 'string') {
|
|
36
|
+
return new InlineButton(btn);
|
|
37
|
+
}
|
|
38
|
+
else if (btn instanceof InlineButton) {
|
|
39
|
+
return btn;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
throw new Error('Button elements must be strings or InlineButton instances');
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
static validateButtons(buttons) {
|
|
47
|
+
if (buttons.length < 1 || buttons.length > 3) {
|
|
48
|
+
throw new Error(`InlineKeyboard must have 1-3 buttons, got ${buttons.length}`);
|
|
49
|
+
}
|
|
50
|
+
const ids = new Set();
|
|
51
|
+
const titles = new Set();
|
|
52
|
+
for (const button of buttons) {
|
|
53
|
+
const id = button.button.reply.id;
|
|
54
|
+
const title = button.button.reply.title;
|
|
55
|
+
if (ids.has(id) || titles.has(title)) {
|
|
56
|
+
throw new Error('Button IDs and titles must be unique');
|
|
57
|
+
}
|
|
58
|
+
ids.add(id);
|
|
59
|
+
titles.add(title);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
export class ListItem {
|
|
64
|
+
constructor(title, id, description) {
|
|
65
|
+
if (title.length > 24) {
|
|
66
|
+
throw new Error('List item title must be 24 characters or less');
|
|
67
|
+
}
|
|
68
|
+
if (description && description.length > 72) {
|
|
69
|
+
throw new Error('List item description must be 72 characters or less');
|
|
70
|
+
}
|
|
71
|
+
this.item = {
|
|
72
|
+
id: id || title,
|
|
73
|
+
title: title,
|
|
74
|
+
};
|
|
75
|
+
if (description) {
|
|
76
|
+
this.item.description = description;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
export class ListSection {
|
|
81
|
+
constructor(title, items) {
|
|
82
|
+
if (title.length > 24) {
|
|
83
|
+
throw new Error('Section title must be 24 characters or less');
|
|
84
|
+
}
|
|
85
|
+
const listItems = ListSection.setItems(items);
|
|
86
|
+
ListSection.validateItems(listItems);
|
|
87
|
+
this.section = {
|
|
88
|
+
title: title,
|
|
89
|
+
rows: listItems.map((item) => item.item),
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
static setItems(items) {
|
|
93
|
+
if (!Array.isArray(items)) {
|
|
94
|
+
throw new Error('Items must be an array');
|
|
95
|
+
}
|
|
96
|
+
return items.map((item) => {
|
|
97
|
+
if (typeof item === 'string') {
|
|
98
|
+
return new ListItem(item);
|
|
99
|
+
}
|
|
100
|
+
else if (item instanceof ListItem) {
|
|
101
|
+
return item;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
throw new Error('Items must be strings or ListItem instances');
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
static validateItems(items) {
|
|
109
|
+
if (items.length < 1 || items.length > 10) {
|
|
110
|
+
throw new Error(`Section must have 1-10 items, got ${items.length}`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
export class InlineList extends BaseReplyMarkup {
|
|
115
|
+
constructor(buttonText, listItems) {
|
|
116
|
+
if (buttonText.length > 20) {
|
|
117
|
+
throw new Error('List button text must be 20 characters or less');
|
|
118
|
+
}
|
|
119
|
+
InlineList.validateList(listItems);
|
|
120
|
+
let sections;
|
|
121
|
+
if (listItems.length > 0 && listItems[0] instanceof ListSection) {
|
|
122
|
+
sections = listItems.map((section) => section.section);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
sections = [
|
|
126
|
+
{
|
|
127
|
+
rows: listItems.map((item) => item.item),
|
|
128
|
+
},
|
|
129
|
+
];
|
|
130
|
+
}
|
|
131
|
+
const markup = {
|
|
132
|
+
button: buttonText,
|
|
133
|
+
sections: sections,
|
|
134
|
+
};
|
|
135
|
+
super('list', markup);
|
|
136
|
+
}
|
|
137
|
+
static validateList(items) {
|
|
138
|
+
if (!Array.isArray(items)) {
|
|
139
|
+
throw new Error('List items must be an array');
|
|
140
|
+
}
|
|
141
|
+
if (items.length === 0) {
|
|
142
|
+
throw new Error('List must have at least one item or section');
|
|
143
|
+
}
|
|
144
|
+
const isAllListItems = items.every((item) => item instanceof ListItem);
|
|
145
|
+
const isAllSections = items.every((item) => item instanceof ListSection);
|
|
146
|
+
if (!isAllListItems && !isAllSections) {
|
|
147
|
+
throw new Error('List items must be all ListItem or all ListSection instances');
|
|
148
|
+
}
|
|
149
|
+
let totalItems = 0;
|
|
150
|
+
if (isAllSections) {
|
|
151
|
+
for (const section of items) {
|
|
152
|
+
totalItems += section.section.rows.length;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
totalItems = items.length;
|
|
157
|
+
}
|
|
158
|
+
if (totalItems > 10) {
|
|
159
|
+
throw new Error(`List can have maximum 10 items, got ${totalItems}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
export class InlineLocationRequest extends BaseReplyMarkup {
|
|
164
|
+
constructor() {
|
|
165
|
+
const markup = {
|
|
166
|
+
name: 'send_location',
|
|
167
|
+
};
|
|
168
|
+
super('location_request_message', markup);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=Markup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Markup.js","sourceRoot":"","sources":["../../src/Markup.ts"],"names":[],"mappings":"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"}
|