@mtcute/dispatcher 0.16.7 → 0.16.13
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/{cjs/callback-data-builder.d.ts → callback-data-builder.d.ts} +2 -2
- package/callback-data-builder.test.d.ts +1 -0
- package/{esm/context → context}/base.d.ts +2 -2
- package/{esm/context → context}/business-message.d.ts +5 -6
- package/{esm/context → context}/callback-query.d.ts +6 -7
- package/{cjs/context → context}/chat-join-request.d.ts +3 -3
- package/{esm/context → context}/chosen-inline-result.d.ts +3 -3
- package/{esm/context → context}/inline-query.d.ts +4 -5
- package/{cjs/context → context}/message.d.ts +11 -6
- package/{cjs/context → context}/parse.d.ts +3 -3
- package/{esm/context → context}/pre-checkout-query.d.ts +3 -3
- package/{esm/context → context}/scene-transition.d.ts +1 -1
- package/{cjs/dispatcher.d.ts → dispatcher.d.ts} +9 -10
- package/{cjs/filters → filters}/bots.d.ts +4 -4
- package/filters/bots.test.d.ts +1 -0
- package/{cjs/filters → filters}/chat.d.ts +3 -3
- package/{esm/filters → filters}/group.d.ts +4 -4
- package/{cjs/filters → filters}/logic.d.ts +1 -1
- package/filters/logic.test.d.ts +1 -0
- package/{esm/filters → filters}/message.d.ts +9 -5
- package/{cjs/filters → filters}/state.d.ts +2 -2
- package/{esm/filters → filters}/text.d.ts +3 -3
- package/{cjs/filters → filters}/types.d.ts +2 -2
- package/{cjs/filters → filters}/updates.d.ts +2 -2
- package/{cjs/filters → filters}/user.d.ts +3 -4
- package/{cjs/handler.d.ts → handler.d.ts} +5 -5
- package/index.cjs +2534 -0
- package/index.d.ts +8 -1
- package/index.js +2529 -1
- package/package.json +28 -24
- package/{cjs/state → state}/key.d.ts +3 -3
- package/state/provider.d.ts +5 -0
- package/{cjs/state → state}/providers/memory.d.ts +3 -4
- package/{esm/state → state}/providers/sqlite.d.ts +3 -3
- package/{cjs/state → state}/repository.d.ts +1 -1
- package/{esm/state → state}/service.d.ts +2 -2
- package/{cjs/state → state}/update-state.d.ts +2 -2
- package/{esm/wizard.d.ts → wizard.d.ts} +5 -6
- package/cjs/callback-data-builder.js +0 -141
- package/cjs/callback-data-builder.js.map +0 -1
- package/cjs/context/base.d.ts +0 -9
- package/cjs/context/base.js +0 -3
- package/cjs/context/base.js.map +0 -1
- package/cjs/context/business-message.d.ts +0 -61
- package/cjs/context/business-message.js +0 -146
- package/cjs/context/business-message.js.map +0 -1
- package/cjs/context/callback-query.d.ts +0 -63
- package/cjs/context/callback-query.js +0 -109
- package/cjs/context/callback-query.js.map +0 -1
- package/cjs/context/chat-join-request.js +0 -35
- package/cjs/context/chat-join-request.js.map +0 -1
- package/cjs/context/chosen-inline-result.d.ts +0 -22
- package/cjs/context/chosen-inline-result.js +0 -36
- package/cjs/context/chosen-inline-result.js.map +0 -1
- package/cjs/context/index.js +0 -25
- package/cjs/context/index.js.map +0 -1
- package/cjs/context/inline-query.d.ts +0 -16
- package/cjs/context/inline-query.js +0 -23
- package/cjs/context/inline-query.js.map +0 -1
- package/cjs/context/message.js +0 -171
- package/cjs/context/message.js.map +0 -1
- package/cjs/context/parse.js +0 -42
- package/cjs/context/parse.js.map +0 -1
- package/cjs/context/pre-checkout-query.d.ts +0 -17
- package/cjs/context/pre-checkout-query.js +0 -27
- package/cjs/context/pre-checkout-query.js.map +0 -1
- package/cjs/context/scene-transition.d.ts +0 -24
- package/cjs/context/scene-transition.js +0 -52
- package/cjs/context/scene-transition.js.map +0 -1
- package/cjs/dispatcher.js +0 -908
- package/cjs/dispatcher.js.map +0 -1
- package/cjs/filters/bots.js +0 -135
- package/cjs/filters/bots.js.map +0 -1
- package/cjs/filters/bundle.js +0 -27
- package/cjs/filters/bundle.js.map +0 -1
- package/cjs/filters/chat.js +0 -56
- package/cjs/filters/chat.js.map +0 -1
- package/cjs/filters/group.d.ts +0 -26
- package/cjs/filters/group.js +0 -69
- package/cjs/filters/group.js.map +0 -1
- package/cjs/filters/index.js +0 -29
- package/cjs/filters/index.js.map +0 -1
- package/cjs/filters/logic.js +0 -112
- package/cjs/filters/logic.js.map +0 -1
- package/cjs/filters/message.d.ts +0 -215
- package/cjs/filters/message.js +0 -191
- package/cjs/filters/message.js.map +0 -1
- package/cjs/filters/state.js +0 -33
- package/cjs/filters/state.js.map +0 -1
- package/cjs/filters/text.d.ts +0 -64
- package/cjs/filters/text.js +0 -136
- package/cjs/filters/text.js.map +0 -1
- package/cjs/filters/types.js +0 -3
- package/cjs/filters/types.js.map +0 -1
- package/cjs/filters/updates.js +0 -40
- package/cjs/filters/updates.js.map +0 -1
- package/cjs/filters/user.js +0 -77
- package/cjs/filters/user.js.map +0 -1
- package/cjs/handler.js +0 -4
- package/cjs/handler.js.map +0 -1
- package/cjs/index.js +0 -31
- package/cjs/index.js.map +0 -1
- package/cjs/package.json +0 -3
- package/cjs/propagation.js +0 -27
- package/cjs/propagation.js.map +0 -1
- package/cjs/state/index.js +0 -22
- package/cjs/state/index.js.map +0 -1
- package/cjs/state/key.js +0 -43
- package/cjs/state/key.js.map +0 -1
- package/cjs/state/provider.d.ts +0 -5
- package/cjs/state/provider.js +0 -3
- package/cjs/state/provider.js.map +0 -1
- package/cjs/state/providers/index.js +0 -19
- package/cjs/state/providers/index.js.map +0 -1
- package/cjs/state/providers/memory.js +0 -81
- package/cjs/state/providers/memory.js.map +0 -1
- package/cjs/state/providers/sqlite.d.ts +0 -28
- package/cjs/state/providers/sqlite.js +0 -100
- package/cjs/state/providers/sqlite.js.map +0 -1
- package/cjs/state/repository.js +0 -3
- package/cjs/state/repository.js.map +0 -1
- package/cjs/state/service.d.ts +0 -20
- package/cjs/state/service.js +0 -70
- package/cjs/state/service.js.map +0 -1
- package/cjs/state/update-state.js +0 -219
- package/cjs/state/update-state.js.map +0 -1
- package/cjs/wizard.d.ts +0 -65
- package/cjs/wizard.js +0 -105
- package/cjs/wizard.js.map +0 -1
- package/esm/callback-data-builder.d.ts +0 -49
- package/esm/callback-data-builder.js +0 -137
- package/esm/callback-data-builder.js.map +0 -1
- package/esm/context/base.js +0 -2
- package/esm/context/base.js.map +0 -1
- package/esm/context/business-message.js +0 -142
- package/esm/context/business-message.js.map +0 -1
- package/esm/context/callback-query.js +0 -103
- package/esm/context/callback-query.js.map +0 -1
- package/esm/context/chat-join-request.d.ts +0 -17
- package/esm/context/chat-join-request.js +0 -31
- package/esm/context/chat-join-request.js.map +0 -1
- package/esm/context/chosen-inline-result.js +0 -32
- package/esm/context/chosen-inline-result.js.map +0 -1
- package/esm/context/index.d.ts +0 -9
- package/esm/context/index.js +0 -9
- package/esm/context/index.js.map +0 -1
- package/esm/context/inline-query.js +0 -19
- package/esm/context/inline-query.js.map +0 -1
- package/esm/context/message.d.ts +0 -77
- package/esm/context/message.js +0 -167
- package/esm/context/message.js.map +0 -1
- package/esm/context/parse.d.ts +0 -13
- package/esm/context/parse.js +0 -39
- package/esm/context/parse.js.map +0 -1
- package/esm/context/pre-checkout-query.js +0 -23
- package/esm/context/pre-checkout-query.js.map +0 -1
- package/esm/context/scene-transition.js +0 -48
- package/esm/context/scene-transition.js.map +0 -1
- package/esm/dispatcher.d.ts +0 -881
- package/esm/dispatcher.js +0 -904
- package/esm/dispatcher.js.map +0 -1
- package/esm/filters/bots.d.ts +0 -64
- package/esm/filters/bots.js +0 -131
- package/esm/filters/bots.js.map +0 -1
- package/esm/filters/bundle.d.ts +0 -10
- package/esm/filters/bundle.js +0 -11
- package/esm/filters/bundle.js.map +0 -1
- package/esm/filters/chat.d.ts +0 -27
- package/esm/filters/chat.js +0 -51
- package/esm/filters/chat.js.map +0 -1
- package/esm/filters/group.js +0 -65
- package/esm/filters/group.js.map +0 -1
- package/esm/filters/index.d.ts +0 -4
- package/esm/filters/index.js +0 -3
- package/esm/filters/index.js.map +0 -1
- package/esm/filters/logic.d.ts +0 -29
- package/esm/filters/logic.js +0 -105
- package/esm/filters/logic.js.map +0 -1
- package/esm/filters/message.js +0 -168
- package/esm/filters/message.js.map +0 -1
- package/esm/filters/state.d.ts +0 -15
- package/esm/filters/state.js +0 -28
- package/esm/filters/state.js.map +0 -1
- package/esm/filters/text.js +0 -129
- package/esm/filters/text.js.map +0 -1
- package/esm/filters/types.d.ts +0 -91
- package/esm/filters/types.js +0 -2
- package/esm/filters/types.js.map +0 -1
- package/esm/filters/updates.d.ts +0 -39
- package/esm/filters/updates.js +0 -34
- package/esm/filters/updates.js.map +0 -1
- package/esm/filters/user.d.ts +0 -25
- package/esm/filters/user.js +0 -71
- package/esm/filters/user.js.map +0 -1
- package/esm/handler.d.ts +0 -41
- package/esm/handler.js +0 -3
- package/esm/handler.js.map +0 -1
- package/esm/index.d.ts +0 -8
- package/esm/index.js +0 -9
- package/esm/index.js.map +0 -1
- package/esm/propagation.d.ts +0 -22
- package/esm/propagation.js +0 -24
- package/esm/propagation.js.map +0 -1
- package/esm/state/index.d.ts +0 -5
- package/esm/state/index.js +0 -6
- package/esm/state/index.js.map +0 -1
- package/esm/state/key.d.ts +0 -24
- package/esm/state/key.js +0 -39
- package/esm/state/key.js.map +0 -1
- package/esm/state/provider.d.ts +0 -5
- package/esm/state/provider.js +0 -2
- package/esm/state/provider.js.map +0 -1
- package/esm/state/providers/index.d.ts +0 -2
- package/esm/state/providers/index.js +0 -3
- package/esm/state/providers/index.js.map +0 -1
- package/esm/state/providers/memory.d.ts +0 -30
- package/esm/state/providers/memory.js +0 -77
- package/esm/state/providers/memory.js.map +0 -1
- package/esm/state/providers/sqlite.js +0 -96
- package/esm/state/providers/sqlite.js.map +0 -1
- package/esm/state/repository.d.ts +0 -62
- package/esm/state/repository.js +0 -2
- package/esm/state/repository.js.map +0 -1
- package/esm/state/service.js +0 -66
- package/esm/state/service.js.map +0 -1
- package/esm/state/update-state.d.ts +0 -151
- package/esm/state/update-state.js +0 -214
- package/esm/state/update-state.js.map +0 -1
- package/esm/wizard.js +0 -101
- package/esm/wizard.js.map +0 -1
- /package/{cjs/context → context}/index.d.ts +0 -0
- /package/{cjs/filters → filters}/bundle.d.ts +0 -0
- /package/{cjs/filters → filters}/index.d.ts +0 -0
- /package/{cjs/index.d.ts → index.d.cts} +0 -0
- /package/{cjs/propagation.d.ts → propagation.d.ts} +0 -0
- /package/{cjs/state → state}/index.d.ts +0 -0
- /package/{cjs/state → state}/providers/index.d.ts +0 -0
package/cjs/filters/index.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.filters = void 0;
|
|
27
|
-
const filters = __importStar(require("./bundle.js"));
|
|
28
|
-
exports.filters = filters;
|
|
29
|
-
//# sourceMappingURL=index.js.map
|
package/cjs/filters/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/filters/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qDAAsC;AAI7B,0BAAO","sourcesContent":["import * as filters from './bundle.js'\n\nimport UpdateFilter = filters.UpdateFilter\n\nexport { filters }\nexport type { UpdateFilter }\n"]}
|
package/cjs/filters/logic.js
DELETED
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.any = void 0;
|
|
4
|
-
exports.not = not;
|
|
5
|
-
exports.and = and;
|
|
6
|
-
exports.or = or;
|
|
7
|
-
/**
|
|
8
|
-
* Filter that matches any update
|
|
9
|
-
*/
|
|
10
|
-
const any = () => true;
|
|
11
|
-
exports.any = any;
|
|
12
|
-
/**
|
|
13
|
-
* Invert a filter by applying a NOT logical operation:
|
|
14
|
-
* `not(fn) = NOT fn`
|
|
15
|
-
*
|
|
16
|
-
* > **Note**: This also inverts type modification, i.e.
|
|
17
|
-
* > if the base is `{ field: string | number | null }`
|
|
18
|
-
* > and the modification is `{ field: string }`,
|
|
19
|
-
* > then the negated filter will have
|
|
20
|
-
* > inverted modification `{ field: number | null }`
|
|
21
|
-
*
|
|
22
|
-
* @param fn Filter to negate
|
|
23
|
-
*/
|
|
24
|
-
function not(fn) {
|
|
25
|
-
return (upd, state) => {
|
|
26
|
-
const res = fn(upd, state);
|
|
27
|
-
if (typeof res === 'boolean')
|
|
28
|
-
return !res;
|
|
29
|
-
return res.then(r => !r);
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Combine multiple filters by applying an AND logical
|
|
34
|
-
* operation between every one of them:
|
|
35
|
-
* `and(fn1, fn2, ..., fnN) = fn1 AND fn2 AND ... AND fnN`
|
|
36
|
-
*
|
|
37
|
-
* > **Note**: This also combines type modifications, i.e.
|
|
38
|
-
* > if the 1st has modification `{ field1: string }`
|
|
39
|
-
* > and the 2nd has modification `{ field2: number }`,
|
|
40
|
-
* > then the combined filter will have
|
|
41
|
-
* > combined modification `{ field1: string, field2: number }`
|
|
42
|
-
*
|
|
43
|
-
* > **Note**: Due to TypeScript limitations (or more likely my lack of brain cells),
|
|
44
|
-
* > state type is only correctly inferred for up to 6 filters.
|
|
45
|
-
* > If you need more, either provide type explicitly (e.g. `filters.state<SomeState>(...)`),
|
|
46
|
-
* > or combine multiple `and` calls.
|
|
47
|
-
*
|
|
48
|
-
* @param fns Filters to combine
|
|
49
|
-
*/
|
|
50
|
-
function and(...fns) {
|
|
51
|
-
return (upd, state) => {
|
|
52
|
-
let i = 0;
|
|
53
|
-
const max = fns.length;
|
|
54
|
-
const next = () => {
|
|
55
|
-
if (i === max)
|
|
56
|
-
return true;
|
|
57
|
-
const res = fns[i++](upd, state);
|
|
58
|
-
if (typeof res === 'boolean') {
|
|
59
|
-
if (!res)
|
|
60
|
-
return false;
|
|
61
|
-
return next();
|
|
62
|
-
}
|
|
63
|
-
return res.then((r) => {
|
|
64
|
-
if (!r)
|
|
65
|
-
return false;
|
|
66
|
-
return next();
|
|
67
|
-
});
|
|
68
|
-
};
|
|
69
|
-
return next();
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Combine multiple filters by applying an OR logical
|
|
74
|
-
* operation between every one of them:
|
|
75
|
-
* `or(fn1, fn2, ..., fnN) = fn1 OR fn2 OR ... OR fnN`
|
|
76
|
-
*
|
|
77
|
-
* > **Note**: This also combines type modifications in a union, i.e.
|
|
78
|
-
* > if the 1st has modification `{ field1: string }`
|
|
79
|
-
* > and the 2nd has modification `{ field2: number }`,
|
|
80
|
-
* > then the combined filter will have
|
|
81
|
-
* > modification `{ field1: string } | { field2: number }`.
|
|
82
|
-
*
|
|
83
|
-
* > **Note**: Due to TypeScript limitations (or more likely my lack of brain cells),
|
|
84
|
-
* > state type is only correctly inferred for up to 6 filters.
|
|
85
|
-
* > If you need more, either provide type explicitly (e.g. `filters.state<SomeState>(...)`),
|
|
86
|
-
* > or combine multiple `and` calls.
|
|
87
|
-
*
|
|
88
|
-
* @param fns Filters to combine
|
|
89
|
-
*/
|
|
90
|
-
function or(...fns) {
|
|
91
|
-
return (upd, state) => {
|
|
92
|
-
let i = 0;
|
|
93
|
-
const max = fns.length;
|
|
94
|
-
const next = () => {
|
|
95
|
-
if (i === max)
|
|
96
|
-
return false;
|
|
97
|
-
const res = fns[i++](upd, state);
|
|
98
|
-
if (typeof res === 'boolean') {
|
|
99
|
-
if (res)
|
|
100
|
-
return true;
|
|
101
|
-
return next();
|
|
102
|
-
}
|
|
103
|
-
return res.then((r) => {
|
|
104
|
-
if (r)
|
|
105
|
-
return true;
|
|
106
|
-
return next();
|
|
107
|
-
});
|
|
108
|
-
};
|
|
109
|
-
return next();
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
//# sourceMappingURL=logic.js.map
|
package/cjs/filters/logic.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logic.js","sourceRoot":"","sources":["../../../src/filters/logic.ts"],"names":[],"mappings":";;;AAqBA,kBAUC;AA2HD,kBAyBC;AAyHD,gBAyBC;AAjUD;;GAEG;AACI,MAAM,GAAG,GAAsB,GAAG,EAAE,CAAC,IAAI,CAAA;AAAnC,QAAA,GAAG,OAAgC;AAEhD;;;;;;;;;;;GAWG;AACH,SAAgB,GAAG,CACf,EAAkC;IAElC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAClB,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAE1B,IAAI,OAAO,GAAG,KAAK,SAAS;YAAE,OAAO,CAAC,GAAG,CAAA;QAEzC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5B,CAAC,CAAA;AACL,CAAC;AAyGD;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAgB,GAAG,CAAC,GAAG,GAAkC;IACrD,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAClB,IAAI,CAAC,GAAG,CAAC,CAAA;QACT,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAA;QAEtB,MAAM,IAAI,GAAG,GAA0B,EAAE;YACrC,IAAI,CAAC,KAAK,GAAG;gBAAE,OAAO,IAAI,CAAA;YAE1B,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YAEhC,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE,CAAC;gBAC3B,IAAI,CAAC,GAAG;oBAAE,OAAO,KAAK,CAAA;gBAEtB,OAAO,IAAI,EAAE,CAAA;YACjB,CAAC;YAED,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAU,EAAE,EAAE;gBAC3B,IAAI,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAA;gBAEpB,OAAO,IAAI,EAAE,CAAA;YACjB,CAAC,CAAC,CAAA;QACN,CAAC,CAAA;QAED,OAAO,IAAI,EAAE,CAAA;IACjB,CAAC,CAAA;AACL,CAAC;AAuGD;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAgB,EAAE,CAAC,GAAG,GAAkC;IACpD,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAClB,IAAI,CAAC,GAAG,CAAC,CAAA;QACT,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAA;QAEtB,MAAM,IAAI,GAAG,GAA0B,EAAE;YACrC,IAAI,CAAC,KAAK,GAAG;gBAAE,OAAO,KAAK,CAAA;YAE3B,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YAEhC,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE,CAAC;gBAC3B,IAAI,GAAG;oBAAE,OAAO,IAAI,CAAA;gBAEpB,OAAO,IAAI,EAAE,CAAA;YACjB,CAAC;YAED,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAU,EAAE,EAAE;gBAC3B,IAAI,CAAC;oBAAE,OAAO,IAAI,CAAA;gBAElB,OAAO,IAAI,EAAE,CAAA;YACjB,CAAC,CAAC,CAAA;QACN,CAAC,CAAA;QAED,OAAO,IAAI,EAAE,CAAA;IACjB,CAAC,CAAA;AACL,CAAC","sourcesContent":["import type { MaybePromise } from '@mtcute/core'\n\nimport type { ExtractBaseMany, ExtractMod, Invert, UnionToIntersection, UpdateFilter } from './types.js'\n\n/**\n * Filter that matches any update\n */\nexport const any: UpdateFilter<any> = () => true\n\n/**\n * Invert a filter by applying a NOT logical operation:\n * `not(fn) = NOT fn`\n *\n * > **Note**: This also inverts type modification, i.e.\n * > if the base is `{ field: string | number | null }`\n * > and the modification is `{ field: string }`,\n * > then the negated filter will have\n * > inverted modification `{ field: number | null }`\n *\n * @param fn Filter to negate\n */\nexport function not<Base, Mod, State extends object>(\n fn: UpdateFilter<Base, Mod, State>,\n): UpdateFilter<Base, Invert<Base, Mod>, State> {\n return (upd, state) => {\n const res = fn(upd, state)\n\n if (typeof res === 'boolean') return !res\n\n return res.then(r => !r)\n }\n}\n\n// i couldn't come up with proper types for these 😭\n// if you know how to do this better - PRs are welcome!\n\nexport function and<Base1, Mod1, State1 extends object, Base2, Mod2, State2 extends object>(\n fn1: UpdateFilter<Base1, Mod1, State1>,\n fn2: UpdateFilter<Base2, Mod2, State2>,\n): UpdateFilter<Base1 & Base2, Mod1 & Mod2, State1 | State2>\nexport function and<\n Base1,\n Mod1,\n State1 extends object,\n Base2,\n Mod2,\n State2 extends object,\n Base3,\n Mod3,\n State3 extends object,\n>(\n fn1: UpdateFilter<Base1, Mod1, State1>,\n fn2: UpdateFilter<Base2, Mod2, State2>,\n fn3: UpdateFilter<Base3, Mod3, State3>,\n): UpdateFilter<Base1 & Base2 & Base3, Mod1 & Mod2 & Mod3, State1 | State2 | State3>\nexport function and<\n Base1,\n Mod1,\n State1 extends object,\n Base2,\n Mod2,\n State2 extends object,\n Base3,\n Mod3,\n State3 extends object,\n Base4,\n Mod4,\n State4 extends object,\n>(\n fn1: UpdateFilter<Base1, Mod1, State1>,\n fn2: UpdateFilter<Base2, Mod2, State2>,\n fn3: UpdateFilter<Base3, Mod3, State3>,\n fn4: UpdateFilter<Base4, Mod4, State4>,\n): UpdateFilter<Base1 & Base2 & Base3 & Base4, Mod1 & Mod2 & Mod3 & Mod4, State1 | State2 | State3 | State4>\nexport function and<\n Base1,\n Mod1,\n State1 extends object,\n Base2,\n Mod2,\n State2 extends object,\n Base3,\n Mod3,\n State3 extends object,\n Base4,\n Mod4,\n State4 extends object,\n Base5,\n Mod5,\n State5 extends object,\n>(\n fn1: UpdateFilter<Base1, Mod1, State1>,\n fn2: UpdateFilter<Base2, Mod2, State2>,\n fn3: UpdateFilter<Base3, Mod3, State3>,\n fn4: UpdateFilter<Base4, Mod4, State4>,\n fn5: UpdateFilter<Base5, Mod5, State5>,\n): UpdateFilter<\n Base1 & Base2 & Base3 & Base4 & Base5,\n Mod1 & Mod2 & Mod3 & Mod4 & Mod5,\n State1 | State2 | State3 | State4 | State5\n>\nexport function and<\n Base1,\n Mod1,\n State1 extends object,\n Base2,\n Mod2,\n State2 extends object,\n Base3,\n Mod3,\n State3 extends object,\n Base4,\n Mod4,\n State4 extends object,\n Base5,\n Mod5,\n State5 extends object,\n Base6,\n Mod6,\n State6 extends object,\n>(\n fn1: UpdateFilter<Base1, Mod1, State1>,\n fn2: UpdateFilter<Base2, Mod2, State2>,\n fn3: UpdateFilter<Base3, Mod3, State3>,\n fn4: UpdateFilter<Base4, Mod4, State4>,\n fn5: UpdateFilter<Base5, Mod5, State5>,\n fn6: UpdateFilter<Base6, Mod6, State6>,\n): UpdateFilter<\n Base1 & Base2 & Base3 & Base4 & Base5 & Base6,\n Mod1 & Mod2 & Mod3 & Mod4 & Mod5 & Mod6,\n State1 | State2 | State3 | State4 | State5 | State6\n>\nexport function and<Filters extends UpdateFilter<any, any>[]>(\n ...fns: Filters\n): UpdateFilter<ExtractBaseMany<Filters>, UnionToIntersection<ExtractMod<Filters[number]>>>\n\n/**\n * Combine multiple filters by applying an AND logical\n * operation between every one of them:\n * `and(fn1, fn2, ..., fnN) = fn1 AND fn2 AND ... AND fnN`\n *\n * > **Note**: This also combines type modifications, i.e.\n * > if the 1st has modification `{ field1: string }`\n * > and the 2nd has modification `{ field2: number }`,\n * > then the combined filter will have\n * > combined modification `{ field1: string, field2: number }`\n *\n * > **Note**: Due to TypeScript limitations (or more likely my lack of brain cells),\n * > state type is only correctly inferred for up to 6 filters.\n * > If you need more, either provide type explicitly (e.g. `filters.state<SomeState>(...)`),\n * > or combine multiple `and` calls.\n *\n * @param fns Filters to combine\n */\nexport function and(...fns: UpdateFilter<any, any, any>[]): UpdateFilter<any, any, any> {\n return (upd, state) => {\n let i = 0\n const max = fns.length\n\n const next = (): MaybePromise<boolean> => {\n if (i === max) return true\n\n const res = fns[i++](upd, state)\n\n if (typeof res === 'boolean') {\n if (!res) return false\n\n return next()\n }\n\n return res.then((r: boolean) => {\n if (!r) return false\n\n return next()\n })\n }\n\n return next()\n }\n}\n\nexport function or<Base1, Mod1, State1 extends object, Base2, Mod2, State2 extends object>(\n fn1: UpdateFilter<Base1, Mod1, State1>,\n fn2: UpdateFilter<Base2, Mod2, State2>,\n): UpdateFilter<Base1 & Base2, Mod1 | Mod2, State1 | State2>\n\nexport function or<\n Base1,\n Mod1,\n State1 extends object,\n Base2,\n Mod2,\n State2 extends object,\n Base3,\n Mod3,\n State3 extends object,\n>(\n fn1: UpdateFilter<Base1, Mod1, State1>,\n fn2: UpdateFilter<Base2, Mod2, State2>,\n fn3: UpdateFilter<Base3, Mod3, State3>,\n): UpdateFilter<Base1 & Base2 & Base3, Mod1 | Mod2 | Mod3, State1 | State2 | State3>\n\nexport function or<\n Base1,\n Mod1,\n State1 extends object,\n Base2,\n Mod2,\n State2 extends object,\n Base3,\n Mod3,\n State3 extends object,\n Base4,\n Mod4,\n State4 extends object,\n>(\n fn1: UpdateFilter<Base1, Mod1, State1>,\n fn2: UpdateFilter<Base2, Mod2, State2>,\n fn3: UpdateFilter<Base3, Mod3, State3>,\n fn4: UpdateFilter<Base4, Mod4, State4>,\n): UpdateFilter<Base1 & Base2 & Base3 & Base4, Mod1 | Mod2 | Mod3 | Mod4, State1 | State2 | State3 | State4>\n\nexport function or<\n Base1,\n Mod1,\n State1 extends object,\n Base2,\n Mod2,\n State2 extends object,\n Base3,\n Mod3,\n State3 extends object,\n Base4,\n Mod4,\n State4 extends object,\n Base5,\n Mod5,\n State5 extends object,\n>(\n fn1: UpdateFilter<Base1, Mod1, State1>,\n fn2: UpdateFilter<Base2, Mod2, State2>,\n fn3: UpdateFilter<Base3, Mod3, State3>,\n fn4: UpdateFilter<Base4, Mod4, State4>,\n fn5: UpdateFilter<Base5, Mod5, State5>,\n): UpdateFilter<\n Base1 & Base2 & Base3 & Base4 & Base5,\n Mod1 | Mod2 | Mod3 | Mod4 | Mod5,\n State1 | State2 | State3 | State4 | State5\n>\n\nexport function or<\n Base1,\n Mod1,\n State1 extends object,\n Base2,\n Mod2,\n State2 extends object,\n Base3,\n Mod3,\n State3 extends object,\n Base4,\n Mod4,\n State4 extends object,\n Base5,\n Mod5,\n State5 extends object,\n Base6,\n Mod6,\n State6 extends object,\n>(\n fn1: UpdateFilter<Base1, Mod1, State1>,\n fn2: UpdateFilter<Base2, Mod2, State2>,\n fn3: UpdateFilter<Base3, Mod3, State3>,\n fn4: UpdateFilter<Base4, Mod4, State4>,\n fn5: UpdateFilter<Base5, Mod5, State5>,\n fn6: UpdateFilter<Base6, Mod6, State6>,\n): UpdateFilter<\n Base1 & Base2 & Base3 & Base4 & Base5 & Base6,\n Mod1 | Mod2 | Mod3 | Mod4 | Mod5 | Mod6,\n State1 | State2 | State3 | State4 | State5 | State6\n>\n\n/**\n * Combine multiple filters by applying an OR logical\n * operation between every one of them:\n * `or(fn1, fn2, ..., fnN) = fn1 OR fn2 OR ... OR fnN`\n *\n * > **Note**: This also combines type modifications in a union, i.e.\n * > if the 1st has modification `{ field1: string }`\n * > and the 2nd has modification `{ field2: number }`,\n * > then the combined filter will have\n * > modification `{ field1: string } | { field2: number }`.\n *\n * > **Note**: Due to TypeScript limitations (or more likely my lack of brain cells),\n * > state type is only correctly inferred for up to 6 filters.\n * > If you need more, either provide type explicitly (e.g. `filters.state<SomeState>(...)`),\n * > or combine multiple `and` calls.\n *\n * @param fns Filters to combine\n */\nexport function or(...fns: UpdateFilter<any, any, any>[]): UpdateFilter<any, any, any> {\n return (upd, state) => {\n let i = 0\n const max = fns.length\n\n const next = (): MaybePromise<boolean> => {\n if (i === max) return false\n\n const res = fns[i++](upd, state)\n\n if (typeof res === 'boolean') {\n if (res) return true\n\n return next()\n }\n\n return res.then((r: boolean) => {\n if (r) return true\n\n return next()\n })\n }\n\n return next()\n }\n}\n"]}
|
package/cjs/filters/message.d.ts
DELETED
|
@@ -1,215 +0,0 @@
|
|
|
1
|
-
import type { Audio, Contact, Dice, Document, Game, Invoice, LiveLocation, Location, MaybeArray, Message, MessageAction, MessageMediaType, Peer, Photo, Poll, RepliedMessageInfo, RepliedMessageOrigin, Sticker, StickerSourceType, StickerType, User, Venue, Video, Voice, WebPage, _RepliedMessageAssertionsByOrigin } from '@mtcute/core';
|
|
2
|
-
import { RawDocument } from '@mtcute/core';
|
|
3
|
-
import type { BusinessMessageContext } from '../context/business-message.js';
|
|
4
|
-
import type { MessageContext } from '../index.js';
|
|
5
|
-
import type { Modify, UpdateFilter } from './types.js';
|
|
6
|
-
/**
|
|
7
|
-
* Filter incoming messages.
|
|
8
|
-
*
|
|
9
|
-
* Messages sent to yourself (i.e. Saved Messages) are also "incoming"
|
|
10
|
-
*/
|
|
11
|
-
export declare const incoming: UpdateFilter<Message, {
|
|
12
|
-
isOutgoing: false;
|
|
13
|
-
}>;
|
|
14
|
-
/**
|
|
15
|
-
* Filter outgoing messages.
|
|
16
|
-
*
|
|
17
|
-
* Messages sent to yourself (i.e. Saved Messages) are **not** "outgoing"
|
|
18
|
-
*/
|
|
19
|
-
export declare const outgoing: UpdateFilter<Message, {
|
|
20
|
-
isOutgoing: true;
|
|
21
|
-
}>;
|
|
22
|
-
/**
|
|
23
|
-
* Filter for scheduled messages
|
|
24
|
-
*/
|
|
25
|
-
export declare const scheduled: UpdateFilter<Message, {
|
|
26
|
-
isScheduled: true;
|
|
27
|
-
}>;
|
|
28
|
-
/**
|
|
29
|
-
* Filter messages that are replies to some other message
|
|
30
|
-
*/
|
|
31
|
-
export declare const reply: UpdateFilter<Message, {
|
|
32
|
-
replyToMessage: RepliedMessageInfo;
|
|
33
|
-
}>;
|
|
34
|
-
/**
|
|
35
|
-
* Filter messages that are replies with the given origin type
|
|
36
|
-
*/
|
|
37
|
-
export declare function replyOrigin<T extends RepliedMessageOrigin>(origin: T): UpdateFilter<Message, {
|
|
38
|
-
replyToMessage: Modify<RepliedMessageInfo, _RepliedMessageAssertionsByOrigin[T] & {
|
|
39
|
-
origin: T;
|
|
40
|
-
}>;
|
|
41
|
-
}>;
|
|
42
|
-
/**
|
|
43
|
-
* Filter messages containing some media
|
|
44
|
-
*/
|
|
45
|
-
export declare const media: UpdateFilter<Message, {
|
|
46
|
-
media: Exclude<Message['media'], null>;
|
|
47
|
-
}>;
|
|
48
|
-
/**
|
|
49
|
-
* Filter messages containing media of given type
|
|
50
|
-
*/
|
|
51
|
-
export declare function mediaOf<T extends MessageMediaType>(type: T): UpdateFilter<Message, {
|
|
52
|
-
media: Extract<Message['media'], {
|
|
53
|
-
type: T;
|
|
54
|
-
}>;
|
|
55
|
-
}>;
|
|
56
|
-
/** Filter messages containing a photo */
|
|
57
|
-
export declare const photo: UpdateFilter<Message, {
|
|
58
|
-
media: Photo;
|
|
59
|
-
}>;
|
|
60
|
-
/** Filter messages containing a dice */
|
|
61
|
-
export declare const dice: UpdateFilter<Message, {
|
|
62
|
-
media: Dice;
|
|
63
|
-
}>;
|
|
64
|
-
/** Filter messages containing a contact */
|
|
65
|
-
export declare const contact: UpdateFilter<Message, {
|
|
66
|
-
media: Contact;
|
|
67
|
-
}>;
|
|
68
|
-
/** Filter messages containing an audio file */
|
|
69
|
-
export declare const audio: UpdateFilter<Message, {
|
|
70
|
-
media: Audio;
|
|
71
|
-
}>;
|
|
72
|
-
/** Filter messages containing a voice message (audio-only) */
|
|
73
|
-
export declare const voice: UpdateFilter<Message, {
|
|
74
|
-
media: Voice;
|
|
75
|
-
}>;
|
|
76
|
-
/** Filter messages containing a sticker */
|
|
77
|
-
export declare const sticker: UpdateFilter<Message, {
|
|
78
|
-
media: Sticker;
|
|
79
|
-
}>;
|
|
80
|
-
/** Filter messages containing a document (a file) */
|
|
81
|
-
export declare const document: UpdateFilter<Message, {
|
|
82
|
-
media: Document;
|
|
83
|
-
}>;
|
|
84
|
-
/** Filter messages containing any video (videos, round messages and animations) */
|
|
85
|
-
export declare const anyVideo: UpdateFilter<Message, {
|
|
86
|
-
media: Video;
|
|
87
|
-
}>;
|
|
88
|
-
/** Filter messages containing a static location */
|
|
89
|
-
export declare const location: UpdateFilter<Message, {
|
|
90
|
-
media: Location;
|
|
91
|
-
}>;
|
|
92
|
-
/** Filter messages containing a live location */
|
|
93
|
-
export declare const liveLocation: UpdateFilter<Message, {
|
|
94
|
-
media: LiveLocation;
|
|
95
|
-
}>;
|
|
96
|
-
/** Filter messages containing a game */
|
|
97
|
-
export declare const game: UpdateFilter<Message, {
|
|
98
|
-
media: Game;
|
|
99
|
-
}>;
|
|
100
|
-
/** Filter messages containing a web page */
|
|
101
|
-
export declare const webpage: UpdateFilter<Message, {
|
|
102
|
-
media: WebPage;
|
|
103
|
-
}>;
|
|
104
|
-
/** Filter messages containing a venue */
|
|
105
|
-
export declare const venue: UpdateFilter<Message, {
|
|
106
|
-
media: Venue;
|
|
107
|
-
}>;
|
|
108
|
-
/** Filter messages containing a poll */
|
|
109
|
-
export declare const poll: UpdateFilter<Message, {
|
|
110
|
-
media: Poll;
|
|
111
|
-
}>;
|
|
112
|
-
/** Filter messages containing an invoice */
|
|
113
|
-
export declare const invoice: UpdateFilter<Message, {
|
|
114
|
-
media: Invoice;
|
|
115
|
-
}>;
|
|
116
|
-
/**
|
|
117
|
-
* Filter messages containing any location (live or static).
|
|
118
|
-
*/
|
|
119
|
-
export declare const anyLocation: UpdateFilter<Message, {
|
|
120
|
-
media: Location;
|
|
121
|
-
}>;
|
|
122
|
-
/**
|
|
123
|
-
* Filter messages containing a document
|
|
124
|
-
*
|
|
125
|
-
* This will also match media like audio, video, voice
|
|
126
|
-
* that also use Documents
|
|
127
|
-
*/
|
|
128
|
-
export declare const anyDocument: UpdateFilter<Message, {
|
|
129
|
-
media: RawDocument;
|
|
130
|
-
}>;
|
|
131
|
-
/**
|
|
132
|
-
* Filter messages containing a simple video.
|
|
133
|
-
*
|
|
134
|
-
* This does not include round messages and animations
|
|
135
|
-
*/
|
|
136
|
-
export declare const video: UpdateFilter<Message, {
|
|
137
|
-
media: Modify<Video, {
|
|
138
|
-
isRound: false;
|
|
139
|
-
isAnimation: false;
|
|
140
|
-
}>;
|
|
141
|
-
}>;
|
|
142
|
-
/**
|
|
143
|
-
* Filter messages containing an animation.
|
|
144
|
-
*
|
|
145
|
-
* > **Note**: Legacy GIFs (i.e. documents with `image/gif` MIME)
|
|
146
|
-
* > are also considered animations.
|
|
147
|
-
*/
|
|
148
|
-
export declare const animation: UpdateFilter<Message, {
|
|
149
|
-
media: Modify<Video, {
|
|
150
|
-
isRound: false;
|
|
151
|
-
isAnimation: true;
|
|
152
|
-
}>;
|
|
153
|
-
}>;
|
|
154
|
-
/**
|
|
155
|
-
* Filter messages containing a round message (aka video note).
|
|
156
|
-
*/
|
|
157
|
-
export declare const roundMessage: UpdateFilter<Message, {
|
|
158
|
-
media: Modify<Video, {
|
|
159
|
-
isRound: true;
|
|
160
|
-
isAnimation: false;
|
|
161
|
-
}>;
|
|
162
|
-
}>;
|
|
163
|
-
/**
|
|
164
|
-
* Filter messages containing a sticker by its type
|
|
165
|
-
*/
|
|
166
|
-
export declare function stickerByType(type: StickerType): UpdateFilter<Message, {
|
|
167
|
-
media: Sticker;
|
|
168
|
-
}>;
|
|
169
|
-
/**
|
|
170
|
-
* Filter messages containing a sticker by its source file type
|
|
171
|
-
*/
|
|
172
|
-
export declare function stickerBySourceType(type: StickerSourceType): UpdateFilter<Message, {
|
|
173
|
-
media: Sticker;
|
|
174
|
-
}>;
|
|
175
|
-
/**
|
|
176
|
-
* Filter text-only messages non-service messages
|
|
177
|
-
*/
|
|
178
|
-
export declare const text: UpdateFilter<Message, {
|
|
179
|
-
media: null;
|
|
180
|
-
isService: false;
|
|
181
|
-
}>;
|
|
182
|
-
/**
|
|
183
|
-
* Filter service messages
|
|
184
|
-
*/
|
|
185
|
-
export declare const service: UpdateFilter<Message, {
|
|
186
|
-
isService: true;
|
|
187
|
-
}>;
|
|
188
|
-
/**
|
|
189
|
-
* Filter service messages by action type
|
|
190
|
-
*/
|
|
191
|
-
export declare function action<T extends Exclude<MessageAction, null>['type']>(type: MaybeArray<T>): UpdateFilter<Message, {
|
|
192
|
-
action: Extract<MessageAction, {
|
|
193
|
-
type: T;
|
|
194
|
-
}>;
|
|
195
|
-
sender: T extends 'user_joined_link' | 'user_removed' | 'history_cleared' | 'contact_joined' | 'bot_allowed' ? User : Peer;
|
|
196
|
-
}>;
|
|
197
|
-
export declare function sender<T extends Message['sender']['type']>(type: T): UpdateFilter<Message, {
|
|
198
|
-
sender: Extract<Message['sender'], {
|
|
199
|
-
type: T;
|
|
200
|
-
}>;
|
|
201
|
-
}>;
|
|
202
|
-
/**
|
|
203
|
-
* Filter that matches messages that are replies to some other message that can be fetched
|
|
204
|
-
* (i.e. not `private` origin, and has not been deleted)
|
|
205
|
-
*
|
|
206
|
-
* Optionally, you can pass a filter that will be applied to the replied message.
|
|
207
|
-
*/
|
|
208
|
-
export declare function replyTo<Mod, State extends object>(filter?: UpdateFilter<Message, Mod, State>): UpdateFilter<MessageContext | BusinessMessageContext, {
|
|
209
|
-
getReplyTo: () => Promise<Message & Mod>;
|
|
210
|
-
}, State>;
|
|
211
|
-
/**
|
|
212
|
-
* Middleware-like filter that will fetch the sender of the message
|
|
213
|
-
* and make it available to further filters, as well as the handler itself.
|
|
214
|
-
*/
|
|
215
|
-
export declare function withCompleteSender<Mod, State extends object>(filter?: UpdateFilter<MessageContext, Mod, State>): UpdateFilter<MessageContext, Mod, State>;
|
package/cjs/filters/message.js
DELETED
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.service = exports.text = exports.roundMessage = exports.animation = exports.video = exports.anyDocument = exports.anyLocation = exports.invoice = exports.poll = exports.venue = exports.webpage = exports.game = exports.liveLocation = exports.location = exports.anyVideo = exports.document = exports.sticker = exports.voice = exports.audio = exports.contact = exports.dice = exports.photo = exports.media = exports.reply = exports.scheduled = exports.outgoing = exports.incoming = void 0;
|
|
4
|
-
exports.replyOrigin = replyOrigin;
|
|
5
|
-
exports.mediaOf = mediaOf;
|
|
6
|
-
exports.stickerByType = stickerByType;
|
|
7
|
-
exports.stickerBySourceType = stickerBySourceType;
|
|
8
|
-
exports.action = action;
|
|
9
|
-
exports.sender = sender;
|
|
10
|
-
exports.replyTo = replyTo;
|
|
11
|
-
exports.withCompleteSender = withCompleteSender;
|
|
12
|
-
const core_1 = require("@mtcute/core");
|
|
13
|
-
/**
|
|
14
|
-
* Filter incoming messages.
|
|
15
|
-
*
|
|
16
|
-
* Messages sent to yourself (i.e. Saved Messages) are also "incoming"
|
|
17
|
-
*/
|
|
18
|
-
const incoming = msg => !msg.isOutgoing;
|
|
19
|
-
exports.incoming = incoming;
|
|
20
|
-
/**
|
|
21
|
-
* Filter outgoing messages.
|
|
22
|
-
*
|
|
23
|
-
* Messages sent to yourself (i.e. Saved Messages) are **not** "outgoing"
|
|
24
|
-
*/
|
|
25
|
-
const outgoing = msg => msg.isOutgoing;
|
|
26
|
-
exports.outgoing = outgoing;
|
|
27
|
-
/**
|
|
28
|
-
* Filter for scheduled messages
|
|
29
|
-
*/
|
|
30
|
-
const scheduled = msg => msg.isScheduled;
|
|
31
|
-
exports.scheduled = scheduled;
|
|
32
|
-
/**
|
|
33
|
-
* Filter messages that are replies to some other message
|
|
34
|
-
*/
|
|
35
|
-
const reply = msg => msg.replyToMessage !== null;
|
|
36
|
-
exports.reply = reply;
|
|
37
|
-
/**
|
|
38
|
-
* Filter messages that are replies with the given origin type
|
|
39
|
-
*/
|
|
40
|
-
function replyOrigin(origin) {
|
|
41
|
-
return msg => msg.replyToMessage?.originIs(origin) ?? false;
|
|
42
|
-
} // originIs does additional checks
|
|
43
|
-
/**
|
|
44
|
-
* Filter messages containing some media
|
|
45
|
-
*/
|
|
46
|
-
const media = msg => msg.media !== null;
|
|
47
|
-
exports.media = media;
|
|
48
|
-
/**
|
|
49
|
-
* Filter messages containing media of given type
|
|
50
|
-
*/
|
|
51
|
-
function mediaOf(type) {
|
|
52
|
-
return msg => msg.media?.type === type;
|
|
53
|
-
}
|
|
54
|
-
/** Filter messages containing a photo */
|
|
55
|
-
exports.photo = mediaOf('photo');
|
|
56
|
-
/** Filter messages containing a dice */
|
|
57
|
-
exports.dice = mediaOf('dice');
|
|
58
|
-
/** Filter messages containing a contact */
|
|
59
|
-
exports.contact = mediaOf('contact');
|
|
60
|
-
/** Filter messages containing an audio file */
|
|
61
|
-
exports.audio = mediaOf('audio');
|
|
62
|
-
/** Filter messages containing a voice message (audio-only) */
|
|
63
|
-
exports.voice = mediaOf('voice');
|
|
64
|
-
/** Filter messages containing a sticker */
|
|
65
|
-
exports.sticker = mediaOf('sticker');
|
|
66
|
-
/** Filter messages containing a document (a file) */
|
|
67
|
-
exports.document = mediaOf('document');
|
|
68
|
-
/** Filter messages containing any video (videos, round messages and animations) */
|
|
69
|
-
exports.anyVideo = mediaOf('video');
|
|
70
|
-
/** Filter messages containing a static location */
|
|
71
|
-
exports.location = mediaOf('location');
|
|
72
|
-
/** Filter messages containing a live location */
|
|
73
|
-
exports.liveLocation = mediaOf('live_location');
|
|
74
|
-
/** Filter messages containing a game */
|
|
75
|
-
exports.game = mediaOf('game');
|
|
76
|
-
/** Filter messages containing a web page */
|
|
77
|
-
exports.webpage = mediaOf('webpage');
|
|
78
|
-
/** Filter messages containing a venue */
|
|
79
|
-
exports.venue = mediaOf('venue');
|
|
80
|
-
/** Filter messages containing a poll */
|
|
81
|
-
exports.poll = mediaOf('poll');
|
|
82
|
-
/** Filter messages containing an invoice */
|
|
83
|
-
exports.invoice = mediaOf('invoice');
|
|
84
|
-
/**
|
|
85
|
-
* Filter messages containing any location (live or static).
|
|
86
|
-
*/
|
|
87
|
-
const anyLocation = msg => msg.media instanceof core_1.RawLocation;
|
|
88
|
-
exports.anyLocation = anyLocation;
|
|
89
|
-
/**
|
|
90
|
-
* Filter messages containing a document
|
|
91
|
-
*
|
|
92
|
-
* This will also match media like audio, video, voice
|
|
93
|
-
* that also use Documents
|
|
94
|
-
*/
|
|
95
|
-
const anyDocument = msg => msg.media instanceof core_1.RawDocument;
|
|
96
|
-
exports.anyDocument = anyDocument;
|
|
97
|
-
/**
|
|
98
|
-
* Filter messages containing a simple video.
|
|
99
|
-
*
|
|
100
|
-
* This does not include round messages and animations
|
|
101
|
-
*/
|
|
102
|
-
const video = msg => msg.media?.type === 'video' && !msg.media.isAnimation && !msg.media.isRound;
|
|
103
|
-
exports.video = video;
|
|
104
|
-
/**
|
|
105
|
-
* Filter messages containing an animation.
|
|
106
|
-
*
|
|
107
|
-
* > **Note**: Legacy GIFs (i.e. documents with `image/gif` MIME)
|
|
108
|
-
* > are also considered animations.
|
|
109
|
-
*/
|
|
110
|
-
const animation = msg => msg.media?.type === 'video' && msg.media.isAnimation && !msg.media.isRound;
|
|
111
|
-
exports.animation = animation;
|
|
112
|
-
/**
|
|
113
|
-
* Filter messages containing a round message (aka video note).
|
|
114
|
-
*/
|
|
115
|
-
const roundMessage = msg => msg.media?.type === 'video' && !msg.media.isAnimation && msg.media.isRound;
|
|
116
|
-
exports.roundMessage = roundMessage;
|
|
117
|
-
/**
|
|
118
|
-
* Filter messages containing a sticker by its type
|
|
119
|
-
*/
|
|
120
|
-
function stickerByType(type) {
|
|
121
|
-
return msg => msg.media?.type === 'sticker' && msg.media.stickerType === type;
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Filter messages containing a sticker by its source file type
|
|
125
|
-
*/
|
|
126
|
-
function stickerBySourceType(type) {
|
|
127
|
-
return msg => msg.media?.type === 'sticker' && msg.media.sourceType === type;
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Filter text-only messages non-service messages
|
|
131
|
-
*/
|
|
132
|
-
const text = msg => msg.media === null && !msg.isService;
|
|
133
|
-
exports.text = text;
|
|
134
|
-
/**
|
|
135
|
-
* Filter service messages
|
|
136
|
-
*/
|
|
137
|
-
const service = msg => msg.isService;
|
|
138
|
-
exports.service = service;
|
|
139
|
-
/**
|
|
140
|
-
* Filter service messages by action type
|
|
141
|
-
*/
|
|
142
|
-
function action(type) {
|
|
143
|
-
if (Array.isArray(type)) {
|
|
144
|
-
const index = {};
|
|
145
|
-
type.forEach(it => (index[it] = true));
|
|
146
|
-
return msg => msg.action?.type in index;
|
|
147
|
-
}
|
|
148
|
-
return msg => msg.action?.type === type;
|
|
149
|
-
}
|
|
150
|
-
function sender(type) {
|
|
151
|
-
return msg => msg.sender.type === type;
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Filter that matches messages that are replies to some other message that can be fetched
|
|
155
|
-
* (i.e. not `private` origin, and has not been deleted)
|
|
156
|
-
*
|
|
157
|
-
* Optionally, you can pass a filter that will be applied to the replied message.
|
|
158
|
-
*/
|
|
159
|
-
function replyTo(filter) {
|
|
160
|
-
return async (msg, state) => {
|
|
161
|
-
if (!msg.replyToMessage?.id)
|
|
162
|
-
return false;
|
|
163
|
-
const reply = msg._name === 'new_message' ? await msg.getReplyTo() : msg.replyTo;
|
|
164
|
-
if (!reply)
|
|
165
|
-
return false;
|
|
166
|
-
if (msg._name === 'new_message') {
|
|
167
|
-
msg.getReplyTo = () => Promise.resolve(reply);
|
|
168
|
-
}
|
|
169
|
-
if (!filter)
|
|
170
|
-
return true;
|
|
171
|
-
return filter(reply, state);
|
|
172
|
-
};
|
|
173
|
-
}
|
|
174
|
-
/**
|
|
175
|
-
* Middleware-like filter that will fetch the sender of the message
|
|
176
|
-
* and make it available to further filters, as well as the handler itself.
|
|
177
|
-
*/
|
|
178
|
-
function withCompleteSender(filter) {
|
|
179
|
-
return async (msg, state) => {
|
|
180
|
-
try {
|
|
181
|
-
await msg.getCompleteSender();
|
|
182
|
-
}
|
|
183
|
-
catch {
|
|
184
|
-
return false;
|
|
185
|
-
}
|
|
186
|
-
if (!filter)
|
|
187
|
-
return true;
|
|
188
|
-
return filter(msg, state);
|
|
189
|
-
};
|
|
190
|
-
}
|
|
191
|
-
//# sourceMappingURL=message.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"message.js","sourceRoot":"","sources":["../../../src/filters/message.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n Audio,\n Contact,\n Dice,\n Document,\n Game,\n Invoice,\n LiveLocation,\n Location,\n MaybeArray,\n Message,\n MessageAction,\n MessageMediaType,\n Peer,\n Photo,\n Poll,\n RepliedMessageInfo,\n RepliedMessageOrigin,\n Sticker,\n StickerSourceType,\n StickerType,\n User,\n Venue,\n Video,\n Voice,\n WebPage,\n _RepliedMessageAssertionsByOrigin,\n} from '@mtcute/core'\nimport {\n RawDocument,\n RawLocation,\n} from '@mtcute/core'\n\nimport type { BusinessMessageContext } from '../context/business-message.js'\nimport type { MessageContext } from '../index.js'\n\nimport type { Modify, UpdateFilter } from './types.js'\n\n/**\n * Filter incoming messages.\n *\n * Messages sent to yourself (i.e. Saved Messages) are also \"incoming\"\n */\nexport const incoming: UpdateFilter<Message, { isOutgoing: false }> = msg => !msg.isOutgoing\n\n/**\n * Filter outgoing messages.\n *\n * Messages sent to yourself (i.e. Saved Messages) are **not** \"outgoing\"\n */\nexport const outgoing: UpdateFilter<Message, { isOutgoing: true }> = msg => msg.isOutgoing\n\n/**\n * Filter for scheduled messages\n */\nexport const scheduled: UpdateFilter<Message, { isScheduled: true }> = msg => msg.isScheduled\n\n/**\n * Filter messages that are replies to some other message\n */\nexport const reply: UpdateFilter<Message, { replyToMessage: RepliedMessageInfo }> = msg => msg.replyToMessage !== null\n\n/**\n * Filter messages that are replies with the given origin type\n */\nexport function replyOrigin<T extends RepliedMessageOrigin>(origin: T): UpdateFilter<\n Message,\n {\n replyToMessage: Modify<RepliedMessageInfo, _RepliedMessageAssertionsByOrigin[T] & { origin: T }>\n }\n> {\n return msg =>\n msg.replyToMessage?.originIs(origin) ?? false\n} // originIs does additional checks\n\n/**\n * Filter messages containing some media\n */\nexport const media: UpdateFilter<Message, { media: Exclude<Message['media'], null> }> = msg => msg.media !== null\n\n/**\n * Filter messages containing media of given type\n */\nexport function mediaOf<T extends MessageMediaType>(type: T): UpdateFilter<\n Message,\n { media: Extract<Message['media'], { type: T }> }\n> {\n return msg =>\n msg.media?.type === type\n}\n\n/** Filter messages containing a photo */\nexport const photo: UpdateFilter<Message, { media: Photo }> = mediaOf('photo')\n/** Filter messages containing a dice */\nexport const dice: UpdateFilter<Message, { media: Dice }> = mediaOf('dice')\n/** Filter messages containing a contact */\nexport const contact: UpdateFilter<Message, { media: Contact }> = mediaOf('contact')\n/** Filter messages containing an audio file */\nexport const audio: UpdateFilter<Message, { media: Audio }> = mediaOf('audio')\n/** Filter messages containing a voice message (audio-only) */\nexport const voice: UpdateFilter<Message, { media: Voice }> = mediaOf('voice')\n/** Filter messages containing a sticker */\nexport const sticker: UpdateFilter<Message, { media: Sticker }> = mediaOf('sticker')\n/** Filter messages containing a document (a file) */\nexport const document: UpdateFilter<Message, { media: Document }> = mediaOf('document')\n/** Filter messages containing any video (videos, round messages and animations) */\nexport const anyVideo: UpdateFilter<Message, { media: Video }> = mediaOf('video')\n/** Filter messages containing a static location */\nexport const location: UpdateFilter<Message, { media: Location }> = mediaOf('location')\n/** Filter messages containing a live location */\nexport const liveLocation: UpdateFilter<Message, { media: LiveLocation }> = mediaOf('live_location')\n/** Filter messages containing a game */\nexport const game: UpdateFilter<Message, { media: Game }> = mediaOf('game')\n/** Filter messages containing a web page */\nexport const webpage: UpdateFilter<Message, { media: WebPage }> = mediaOf('webpage')\n/** Filter messages containing a venue */\nexport const venue: UpdateFilter<Message, { media: Venue }> = mediaOf('venue')\n/** Filter messages containing a poll */\nexport const poll: UpdateFilter<Message, { media: Poll }> = mediaOf('poll')\n/** Filter messages containing an invoice */\nexport const invoice: UpdateFilter<Message, { media: Invoice }> = mediaOf('invoice')\n\n/**\n * Filter messages containing any location (live or static).\n */\nexport const anyLocation: UpdateFilter<Message, { media: Location }> = msg => msg.media instanceof RawLocation\n\n/**\n * Filter messages containing a document\n *\n * This will also match media like audio, video, voice\n * that also use Documents\n */\nexport const anyDocument: UpdateFilter<Message, { media: RawDocument }> = msg => msg.media instanceof RawDocument\n\n/**\n * Filter messages containing a simple video.\n *\n * This does not include round messages and animations\n */\nexport const video: UpdateFilter<\n Message,\n {\n media: Modify<\n Video,\n {\n isRound: false\n isAnimation: false\n }\n >\n }\n> = msg => msg.media?.type === 'video' && !msg.media.isAnimation && !msg.media.isRound\n\n/**\n * Filter messages containing an animation.\n *\n * > **Note**: Legacy GIFs (i.e. documents with `image/gif` MIME)\n * > are also considered animations.\n */\nexport const animation: UpdateFilter<\n Message,\n {\n media: Modify<\n Video,\n {\n isRound: false\n isAnimation: true\n }\n >\n }\n> = msg => msg.media?.type === 'video' && msg.media.isAnimation && !msg.media.isRound\n\n/**\n * Filter messages containing a round message (aka video note).\n */\nexport const roundMessage: UpdateFilter<\n Message,\n {\n media: Modify<\n Video,\n {\n isRound: true\n isAnimation: false\n }\n >\n }\n> = msg => msg.media?.type === 'video' && !msg.media.isAnimation && msg.media.isRound\n\n/**\n * Filter messages containing a sticker by its type\n */\nexport function stickerByType(type: StickerType): UpdateFilter<Message, { media: Sticker }> {\n return msg =>\n msg.media?.type === 'sticker' && msg.media.stickerType === type\n}\n\n/**\n * Filter messages containing a sticker by its source file type\n */\nexport function stickerBySourceType(type: StickerSourceType): UpdateFilter<Message, { media: Sticker }> {\n return msg =>\n msg.media?.type === 'sticker' && msg.media.sourceType === type\n}\n\n/**\n * Filter text-only messages non-service messages\n */\nexport const text: UpdateFilter<\n Message,\n {\n media: null\n isService: false\n }\n> = msg => msg.media === null && !msg.isService\n\n/**\n * Filter service messages\n */\nexport const service: UpdateFilter<Message, { isService: true }> = msg => msg.isService\n\n/**\n * Filter service messages by action type\n */\nexport function action<T extends Exclude<MessageAction, null>['type']>(type: MaybeArray<T>): UpdateFilter<\n Message,\n {\n action: Extract<MessageAction, { type: T }>\n sender: T extends 'user_joined_link' | 'user_removed' | 'history_cleared' | 'contact_joined' | 'bot_allowed'\n ? User\n : Peer\n }\n> {\n if (Array.isArray(type)) {\n const index: Partial<Record<T, true>> = {}\n type.forEach(it => (index[it] = true))\n\n return msg => (msg.action?.type as any) in index\n }\n\n return msg => msg.action?.type === type\n}\n\nexport function sender<T extends Message['sender']['type']>(type: T): UpdateFilter<\n Message,\n { sender: Extract<Message['sender'], { type: T }> }\n> {\n return msg =>\n msg.sender.type === type\n}\n\n/**\n * Filter that matches messages that are replies to some other message that can be fetched\n * (i.e. not `private` origin, and has not been deleted)\n *\n * Optionally, you can pass a filter that will be applied to the replied message.\n */\nexport function replyTo<Mod, State extends object>(\n filter?: UpdateFilter<Message, Mod, State>,\n): UpdateFilter<\n MessageContext | BusinessMessageContext,\n { getReplyTo: () => Promise<Message & Mod> },\n State\n > {\n return async (msg, state) => {\n if (!msg.replyToMessage?.id) return false\n\n const reply = msg._name === 'new_message' ? await msg.getReplyTo() : msg.replyTo\n if (!reply) return false\n\n if (msg._name === 'new_message') {\n msg.getReplyTo = () => Promise.resolve(reply)\n }\n\n if (!filter) return true\n\n return filter(reply, state)\n }\n}\n\n/**\n * Middleware-like filter that will fetch the sender of the message\n * and make it available to further filters, as well as the handler itself.\n */\nexport function withCompleteSender<Mod, State extends object>(\n filter?: UpdateFilter<MessageContext, Mod, State>,\n): UpdateFilter<MessageContext, Mod, State> {\n return async (msg, state) => {\n try {\n await msg.getCompleteSender()\n } catch {\n return false\n }\n\n if (!filter) return true\n\n return filter(msg, state)\n }\n}\n"]}
|
package/cjs/filters/state.js
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.stateEmpty = void 0;
|
|
4
|
-
exports.state = state;
|
|
5
|
-
/**
|
|
6
|
-
* Create a filter for the cases when the state is empty
|
|
7
|
-
*/
|
|
8
|
-
const stateEmpty = async (upd, state) => {
|
|
9
|
-
if (!state)
|
|
10
|
-
return false;
|
|
11
|
-
return !(await state.get());
|
|
12
|
-
};
|
|
13
|
-
exports.stateEmpty = stateEmpty;
|
|
14
|
-
/**
|
|
15
|
-
* Create a filter based on state predicate
|
|
16
|
-
*
|
|
17
|
-
* If state exists and matches `predicate`, update passes
|
|
18
|
-
* this filter, otherwise it doesn't
|
|
19
|
-
*
|
|
20
|
-
* @param predicate State predicate
|
|
21
|
-
*/
|
|
22
|
-
// eslint-disable-next-line ts/no-empty-object-type
|
|
23
|
-
function state(predicate) {
|
|
24
|
-
return async (upd, state) => {
|
|
25
|
-
if (!state)
|
|
26
|
-
return false;
|
|
27
|
-
const data = await state.get();
|
|
28
|
-
if (!data)
|
|
29
|
-
return false;
|
|
30
|
-
return predicate(data);
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=state.js.map
|
package/cjs/filters/state.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/filters/state.ts"],"names":[],"mappings":";;;AAsBA,sBAQC;AA1BD;;GAEG;AACI,MAAM,UAAU,GAAsB,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;IAC9D,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAA;IAExB,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;AAC/B,CAAC,CAAA;AAJY,QAAA,UAAU,cAItB;AAED;;;;;;;GAOG;AACH,mDAAmD;AACnD,SAAgB,KAAK,CAAmB,SAA8C;IAClF,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACxB,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAA;QACxB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,CAAA;QAC9B,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAA;QAEvB,OAAO,SAAS,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC,CAAA;AACL,CAAC","sourcesContent":["import type { MaybePromise } from '@mtcute/core'\n\nimport type { UpdateFilter } from './types.js'\n\n/**\n * Create a filter for the cases when the state is empty\n */\nexport const stateEmpty: UpdateFilter<any> = async (upd, state) => {\n if (!state) return false\n\n return !(await state.get())\n}\n\n/**\n * Create a filter based on state predicate\n *\n * If state exists and matches `predicate`, update passes\n * this filter, otherwise it doesn't\n *\n * @param predicate State predicate\n */\n// eslint-disable-next-line ts/no-empty-object-type\nexport function state<T extends object>(predicate: (state: T) => MaybePromise<boolean>): UpdateFilter<any, {}, T> {\n return async (upd, state) => {\n if (!state) return false\n const data = await state.get()\n if (!data) return false\n\n return predicate(data)\n }\n}\n"]}
|