@adriangalilea/utils 2.17.0 → 2.19.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.
|
@@ -19,6 +19,38 @@
|
|
|
19
19
|
* Both can coexist: BotFather's native flag is a hard pre-filter, this
|
|
20
20
|
* plugin is the dynamic UX on top of whoever gets through.
|
|
21
21
|
*
|
|
22
|
+
* **Group adds are a second gate** (`gateGroups: true`, off by default —
|
|
23
|
+
* DMs are the plugin's core; rooms are opt-in). Two different questions,
|
|
24
|
+
* gated separately: the DM gate asks "may this USER talk to the bot", the
|
|
25
|
+
* group gate asks "may the bot serve this ROOM". With it on:
|
|
26
|
+
*
|
|
27
|
+
* bot added to a group / supergroup / channel
|
|
28
|
+
* │
|
|
29
|
+
* added by an admin or a default id?
|
|
30
|
+
* yes → approved on the spot, silently
|
|
31
|
+
* no → PENDING: the bot stays but serves nothing,
|
|
32
|
+
* admin gets a DM with `[✅ Approve][🚪 Leave]`
|
|
33
|
+
* │
|
|
34
|
+
* approve → the room works — for EVERY member
|
|
35
|
+
* (`ctx.access.source === 'group'`: approving the
|
|
36
|
+
* room admits the room; the per-user DM gate does
|
|
37
|
+
* not apply inside it)
|
|
38
|
+
* leave → the bot leaves AND remembers: re-added while
|
|
39
|
+
* denied, it leaves again on sight (throttled DM)
|
|
40
|
+
*
|
|
41
|
+
* A group the bot already sits in when the gate turns on has no record;
|
|
42
|
+
* its first activity seeds a pending request (throttled DM) — existing
|
|
43
|
+
* rooms surface for review instead of going silently mute forever. The
|
|
44
|
+
* `/access` menu grows a `👥 Groups` view (approve / leave / re-allow).
|
|
45
|
+
* And because the gates are independent, `gateDms: false` runs the room
|
|
46
|
+
* gate WITHOUT the DM gate: unknown DM users pass (`source: 'open'`),
|
|
47
|
+
* while an explicit `/access` deny still holds — a ban list for an
|
|
48
|
+
* otherwise-open bot.
|
|
49
|
+
* Removal from a group clears its record (a fresh add re-asks) UNLESS it
|
|
50
|
+
* was denied — deny memory survives, that's the anti-re-add-spam. Cost:
|
|
51
|
+
* one storage read per gated group update. Known edge: a group→supergroup
|
|
52
|
+
* migration changes the chat id, so the room re-asks under its new id.
|
|
53
|
+
*
|
|
22
54
|
* stranger DMs your bot
|
|
23
55
|
* │
|
|
24
56
|
* ▼
|
|
@@ -130,7 +162,29 @@ export type AccessIndex = {
|
|
|
130
162
|
approved: number[];
|
|
131
163
|
denied: number[];
|
|
132
164
|
};
|
|
133
|
-
export type
|
|
165
|
+
export type GroupAccessStatus = "pending" | "approved" | "denied";
|
|
166
|
+
/**
|
|
167
|
+
* What the group gate persists per room, under the chat id's storage row
|
|
168
|
+
* (`groupAccess` field — chat ids are negative, so rooms and users share
|
|
169
|
+
* the `bot-<id>:<n>` keyspace without collision).
|
|
170
|
+
*/
|
|
171
|
+
export type GroupAccessRecord = {
|
|
172
|
+
status: GroupAccessStatus;
|
|
173
|
+
chat: {
|
|
174
|
+
id: number;
|
|
175
|
+
title?: string;
|
|
176
|
+
type: string;
|
|
177
|
+
};
|
|
178
|
+
/** Who added the bot (or whose message surfaced an ungated room). */
|
|
179
|
+
addedBy?: AccessUser;
|
|
180
|
+
requestedAt?: number;
|
|
181
|
+
approvedAt?: number;
|
|
182
|
+
approvedBy?: number;
|
|
183
|
+
deniedAt?: number;
|
|
184
|
+
deniedBy?: number;
|
|
185
|
+
lastNotifiedAt?: number;
|
|
186
|
+
};
|
|
187
|
+
export type AccessSource = "admin" | "default" | "store" | "group" | "open";
|
|
134
188
|
/**
|
|
135
189
|
* What handlers downstream see on `ctx.access`. A discriminated union —
|
|
136
190
|
* use the `allowed` field to narrow.
|
|
@@ -181,6 +235,19 @@ export type AccessControlOptions = {
|
|
|
181
235
|
silentDeny?: boolean;
|
|
182
236
|
/** Min ms between repeat admin notifications for the same user. Default 6h. */
|
|
183
237
|
notifyThrottleMs?: number;
|
|
238
|
+
/**
|
|
239
|
+
* Gate group / supergroup / channel adds too (see the header). Off by
|
|
240
|
+
* default: DM gating is the plugin's core, rooms are opt-in.
|
|
241
|
+
*/
|
|
242
|
+
gateGroups?: boolean;
|
|
243
|
+
/**
|
|
244
|
+
* Pass `false` to run WITHOUT the DM gate: unknown DM users pass
|
|
245
|
+
* (`ctx.access.source === 'open'`) instead of landing in pending.
|
|
246
|
+
* The two gates are independent questions — this is how a bot gates
|
|
247
|
+
* rooms only. Admin/defaults/store sources still resolve normally,
|
|
248
|
+
* and the `/access` menu keeps working for whatever records exist.
|
|
249
|
+
*/
|
|
250
|
+
gateDms?: boolean;
|
|
184
251
|
/** Callbacks for your own logging / metrics. */
|
|
185
252
|
onAccessRequest?: (info: {
|
|
186
253
|
user: AccessUser;
|
|
@@ -194,6 +261,19 @@ export type AccessControlOptions = {
|
|
|
194
261
|
userId: number;
|
|
195
262
|
deniedBy: number;
|
|
196
263
|
}) => void;
|
|
264
|
+
/** Group-gate callbacks — e.g. send your welcome card on approve, not on add. */
|
|
265
|
+
onGroupRequest?: (info: {
|
|
266
|
+
chat: GroupAccessRecord["chat"];
|
|
267
|
+
addedBy?: AccessUser;
|
|
268
|
+
}) => void;
|
|
269
|
+
onGroupApprove?: (info: {
|
|
270
|
+
chatId: number;
|
|
271
|
+
approvedBy: number;
|
|
272
|
+
}) => void;
|
|
273
|
+
onGroupDeny?: (info: {
|
|
274
|
+
chatId: number;
|
|
275
|
+
deniedBy: number;
|
|
276
|
+
}) => void;
|
|
197
277
|
};
|
|
198
278
|
type AdminDerives = {
|
|
199
279
|
adminId: number;
|
|
@@ -377,6 +457,13 @@ export declare const accessControl: (opts: AccessControlOptions) => Plugin<Recor
|
|
|
377
457
|
reason?: undefined;
|
|
378
458
|
record?: undefined;
|
|
379
459
|
};
|
|
460
|
+
} | {
|
|
461
|
+
access: {
|
|
462
|
+
allowed: true;
|
|
463
|
+
source: "group";
|
|
464
|
+
reason?: undefined;
|
|
465
|
+
record?: undefined;
|
|
466
|
+
};
|
|
380
467
|
} | {
|
|
381
468
|
access: {
|
|
382
469
|
allowed: true;
|
|
@@ -384,6 +471,13 @@ export declare const accessControl: (opts: AccessControlOptions) => Plugin<Recor
|
|
|
384
471
|
record: AccessRecord;
|
|
385
472
|
reason?: undefined;
|
|
386
473
|
};
|
|
474
|
+
} | {
|
|
475
|
+
access: {
|
|
476
|
+
allowed: true;
|
|
477
|
+
source: "open";
|
|
478
|
+
reason?: undefined;
|
|
479
|
+
record?: undefined;
|
|
480
|
+
};
|
|
387
481
|
} | {
|
|
388
482
|
access: {
|
|
389
483
|
allowed: false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access-control.d.ts","sourceRoot":"","sources":["../../src/bot/access-control.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"access-control.d.ts","sourceRoot":"","sources":["../../src/bot/access-control.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4HG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EACN,KAAK,MAAM,EAEX,KAAK,iBAAiB,EAEtB,MAAM,EACN,MAAM,QAAQ,CAAC;AAkBhB,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEzE,MAAM,MAAM,UAAU,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG;IAC1B,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;AAElE;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC/B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,qEAAqE;IACrE,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AAE5E;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,UAAU,GACnB;IACA,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,YAAY,CAAC;IACrB,oDAAoD;IACpD,MAAM,CAAC,EAAE,YAAY,CAAC;CACrB,GACD;IACA,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;CACtD,CAAC;AAEL;;;GAGG;AACH,KAAK,WAAW,GAAG;IAAE,MAAM,CAAC,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhE,wEAAwE;AACxE,KAAK,kBAAkB,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;AAE7E,MAAM,MAAM,oBAAoB,GAAG;IAClC;;;;OAIG;IACH,OAAO,EAAE,kBAAkB,CAAC;IAC5B;;;;OAIG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACjC,uEAAuE;IACvE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gDAAgD;IAChD,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC9E,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACnE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC9D,iFAAiF;IACjF,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE;QACvB,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAChC,OAAO,CAAC,EAAE,UAAU,CAAC;KACrB,KAAK,IAAI,CAAC;IACX,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACxE,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACnE,CAAC;AAIF,KAAK,YAAY,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAC1D,KAAK,aAAa,GAAG;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,CAAC;AAM5C,KAAK,cAAc,GAAG;IACrB,OAAO,EAAE,WAAW,GAAG;QAAE,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;CACvD,CAAC;AAqXF,eAAO,MAAM,aAAa,GAAI,MAAM,oBAAoB;YAlX/C,YAAY,GAAG,aAAa,GAAG,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA2iCrD,CAAC;AAuQF;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,GACjC,KAAK,MAAM,EACX,SAAS,OAAO,EAChB,SAAS,MAAM,EACf,UAAU,UAAU,EACpB,UAAU,MAAM,KACd,OAAO,CAAC,IAAI,CAyBd,CAAC"}
|
|
@@ -19,6 +19,38 @@
|
|
|
19
19
|
* Both can coexist: BotFather's native flag is a hard pre-filter, this
|
|
20
20
|
* plugin is the dynamic UX on top of whoever gets through.
|
|
21
21
|
*
|
|
22
|
+
* **Group adds are a second gate** (`gateGroups: true`, off by default —
|
|
23
|
+
* DMs are the plugin's core; rooms are opt-in). Two different questions,
|
|
24
|
+
* gated separately: the DM gate asks "may this USER talk to the bot", the
|
|
25
|
+
* group gate asks "may the bot serve this ROOM". With it on:
|
|
26
|
+
*
|
|
27
|
+
* bot added to a group / supergroup / channel
|
|
28
|
+
* │
|
|
29
|
+
* added by an admin or a default id?
|
|
30
|
+
* yes → approved on the spot, silently
|
|
31
|
+
* no → PENDING: the bot stays but serves nothing,
|
|
32
|
+
* admin gets a DM with `[✅ Approve][🚪 Leave]`
|
|
33
|
+
* │
|
|
34
|
+
* approve → the room works — for EVERY member
|
|
35
|
+
* (`ctx.access.source === 'group'`: approving the
|
|
36
|
+
* room admits the room; the per-user DM gate does
|
|
37
|
+
* not apply inside it)
|
|
38
|
+
* leave → the bot leaves AND remembers: re-added while
|
|
39
|
+
* denied, it leaves again on sight (throttled DM)
|
|
40
|
+
*
|
|
41
|
+
* A group the bot already sits in when the gate turns on has no record;
|
|
42
|
+
* its first activity seeds a pending request (throttled DM) — existing
|
|
43
|
+
* rooms surface for review instead of going silently mute forever. The
|
|
44
|
+
* `/access` menu grows a `👥 Groups` view (approve / leave / re-allow).
|
|
45
|
+
* And because the gates are independent, `gateDms: false` runs the room
|
|
46
|
+
* gate WITHOUT the DM gate: unknown DM users pass (`source: 'open'`),
|
|
47
|
+
* while an explicit `/access` deny still holds — a ban list for an
|
|
48
|
+
* otherwise-open bot.
|
|
49
|
+
* Removal from a group clears its record (a fresh add re-asks) UNLESS it
|
|
50
|
+
* was denied — deny memory survives, that's the anti-re-add-spam. Cost:
|
|
51
|
+
* one storage read per gated group update. Known edge: a group→supergroup
|
|
52
|
+
* migration changes the chat id, so the room re-asks under its new id.
|
|
53
|
+
*
|
|
22
54
|
* stranger DMs your bot
|
|
23
55
|
* │
|
|
24
56
|
* ▼
|
|
@@ -110,8 +142,16 @@ const acDeny = new CallbackData("acD")
|
|
|
110
142
|
.number("uid")
|
|
111
143
|
.string("v", { optional: true });
|
|
112
144
|
const acRevoke = new CallbackData("acR").number("uid");
|
|
113
|
-
const acView = new CallbackData("acV").string("v"); // main | approved | pending | denied
|
|
145
|
+
const acView = new CallbackData("acV").string("v"); // main | approved | pending | denied | groups
|
|
114
146
|
const acClose = new CallbackData("acC");
|
|
147
|
+
// Group gate: `v` marks a tap from the groups list view (refresh it after);
|
|
148
|
+
// absent = the original add notification (edit it inline).
|
|
149
|
+
const acGroupApprove = new CallbackData("acGA")
|
|
150
|
+
.number("gid")
|
|
151
|
+
.string("v", { optional: true });
|
|
152
|
+
const acGroupLeave = new CallbackData("acGL")
|
|
153
|
+
.number("gid")
|
|
154
|
+
.string("v", { optional: true });
|
|
115
155
|
// ─── small helpers ─────────────────────────────────────────────────
|
|
116
156
|
const formatUser = (u, fallbackId) => {
|
|
117
157
|
if (!u)
|
|
@@ -153,24 +193,28 @@ const requestKeyboard = (uid, lang) => new InlineKeyboard()
|
|
|
153
193
|
.text(say({ en: "✅ Approve", es: "✅ Aprobar" }, lang), acApprove.pack({ uid }), { style: "success" })
|
|
154
194
|
.text(say({ en: "❌ Deny", es: "❌ Denegar" }, lang), acDeny.pack({ uid }), { style: "danger" });
|
|
155
195
|
// ─── index helpers ─────────────────────────────────────────────────
|
|
196
|
+
//
|
|
197
|
+
// The same {pending, approved, denied} index shape serves both gates,
|
|
198
|
+
// under two keys: 'ac:index' holds user ids, 'ac:groups' holds chat ids.
|
|
156
199
|
const indexKey = (ctx) => botSubKey(ctx, "ac:index");
|
|
157
|
-
const
|
|
158
|
-
|
|
200
|
+
const groupIndexKey = (ctx) => botSubKey(ctx, "ac:groups");
|
|
201
|
+
const loadIndex = async (storage, key) => {
|
|
202
|
+
const raw = (await storage.get(key));
|
|
159
203
|
return {
|
|
160
204
|
pending: raw?.pending ?? [],
|
|
161
205
|
approved: raw?.approved ?? [],
|
|
162
206
|
denied: raw?.denied ?? [],
|
|
163
207
|
};
|
|
164
208
|
};
|
|
165
|
-
const saveIndex = (storage,
|
|
166
|
-
const indexAdd = async (storage,
|
|
167
|
-
const idx = await loadIndex(storage,
|
|
209
|
+
const saveIndex = (storage, key, idx) => storage.set(key, idx);
|
|
210
|
+
const indexAdd = async (storage, key, bucket, uid) => {
|
|
211
|
+
const idx = await loadIndex(storage, key);
|
|
168
212
|
if (!idx[bucket].includes(uid))
|
|
169
213
|
idx[bucket].push(uid);
|
|
170
|
-
await saveIndex(storage,
|
|
214
|
+
await saveIndex(storage, key, idx);
|
|
171
215
|
};
|
|
172
|
-
const indexMove = async (storage,
|
|
173
|
-
const idx = await loadIndex(storage,
|
|
216
|
+
const indexMove = async (storage, key, uid, from, to) => {
|
|
217
|
+
const idx = await loadIndex(storage, key);
|
|
174
218
|
const remove = (list) => {
|
|
175
219
|
const i = list.indexOf(uid);
|
|
176
220
|
if (i >= 0)
|
|
@@ -186,7 +230,16 @@ const indexMove = async (storage, ctx, uid, from, to) => {
|
|
|
186
230
|
}
|
|
187
231
|
if (!idx[to].includes(uid))
|
|
188
232
|
idx[to].push(uid);
|
|
189
|
-
await saveIndex(storage,
|
|
233
|
+
await saveIndex(storage, key, idx);
|
|
234
|
+
};
|
|
235
|
+
const indexRemove = async (storage, key, uid) => {
|
|
236
|
+
const idx = await loadIndex(storage, key);
|
|
237
|
+
for (const list of [idx.pending, idx.approved, idx.denied]) {
|
|
238
|
+
const i = list.indexOf(uid);
|
|
239
|
+
if (i >= 0)
|
|
240
|
+
list.splice(i, 1);
|
|
241
|
+
}
|
|
242
|
+
await saveIndex(storage, key, idx);
|
|
190
243
|
};
|
|
191
244
|
const loadFullRecord = async (storage, ctx, userId) => (await storage.get(botStorageKey(ctx, userId))) ?? {};
|
|
192
245
|
const saveAccess = async (storage, ctx, userId, rec) => {
|
|
@@ -232,13 +285,98 @@ const loadOrNotFound = async (storage, ctx, aLang) => {
|
|
|
232
285
|
}
|
|
233
286
|
return rec;
|
|
234
287
|
};
|
|
288
|
+
const loadGroup = async (storage, ctx, chatId) => (await storage.get(botStorageKey(ctx, chatId)))
|
|
289
|
+
?.groupAccess;
|
|
290
|
+
const saveGroup = async (storage, ctx, chatId, rec) => {
|
|
291
|
+
const full = (await storage.get(botStorageKey(ctx, chatId))) ??
|
|
292
|
+
{};
|
|
293
|
+
full.groupAccess = rec;
|
|
294
|
+
await storage.set(botStorageKey(ctx, chatId), full);
|
|
295
|
+
};
|
|
296
|
+
const dropGroup = async (storage, ctx, chatId) => {
|
|
297
|
+
const full = (await storage.get(botStorageKey(ctx, chatId)));
|
|
298
|
+
if (!full)
|
|
299
|
+
return;
|
|
300
|
+
delete full.groupAccess;
|
|
301
|
+
if (Object.keys(full).length === 0) {
|
|
302
|
+
await storage.delete(botStorageKey(ctx, chatId));
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
await storage.set(botStorageKey(ctx, chatId), full);
|
|
306
|
+
}
|
|
307
|
+
};
|
|
308
|
+
/** A room's display line: title when known, always the id. */
|
|
309
|
+
const formatGroup = (rec, id) => rec?.chat.title ? `“${rec.chat.title}” (${id})` : `chat ${id}`;
|
|
310
|
+
const groupRequestText = (rec, lang) => {
|
|
311
|
+
const parts = [
|
|
312
|
+
say({ en: "👥 Group access requested", es: "👥 Acceso de grupo solicitado" }, lang),
|
|
313
|
+
"",
|
|
314
|
+
`💬 ${formatGroup(rec, rec.chat.id)}`,
|
|
315
|
+
];
|
|
316
|
+
if (rec.addedBy)
|
|
317
|
+
parts.push(`👤 ${formatUser(rec.addedBy, rec.addedBy.id)}`);
|
|
318
|
+
parts.push(`⏰ ${say({ en: "ago", es: "hace" }, lang)} ${fmtAge(Date.now() - (rec.requestedAt ?? Date.now()))}`);
|
|
319
|
+
return parts.join("\n");
|
|
320
|
+
};
|
|
321
|
+
const groupRequestKeyboard = (chatId, lang) => new InlineKeyboard()
|
|
322
|
+
.text(say({ en: "✅ Approve", es: "✅ Aprobar" }, lang), acGroupApprove.pack({ gid: chatId }), { style: "success" })
|
|
323
|
+
.text(say({ en: "🚪 Leave", es: "🚪 Salir" }, lang), acGroupLeave.pack({ gid: chatId }), { style: "danger" });
|
|
324
|
+
/** The chat shape the gate reads off a ctx — group/supergroup/channel only. */
|
|
325
|
+
const gatedChatOf = (ctx) => {
|
|
326
|
+
const chat = ctx.chat;
|
|
327
|
+
if (chat?.id === undefined ||
|
|
328
|
+
chat.type === undefined ||
|
|
329
|
+
chat.type === "private")
|
|
330
|
+
return null;
|
|
331
|
+
return { id: chat.id, type: chat.type, title: chat.title };
|
|
332
|
+
};
|
|
333
|
+
/** The two api verbs the group gate uses, read structurally off any ctx
|
|
334
|
+
* (`BotLike` omits the concrete api surface; at runtime ctx.bot IS the Bot). */
|
|
335
|
+
const botApi = (ctx) => ctx.bot.api;
|
|
235
336
|
// ─── plugin ────────────────────────────────────────────────────────
|
|
236
337
|
export const accessControl = (opts) => {
|
|
237
338
|
const { session: sessionPlugin, storage } = opts;
|
|
238
339
|
const defaults = new Set(opts.defaults ?? []);
|
|
239
340
|
const silentDeny = opts.silentDeny === true;
|
|
240
341
|
const throttleMs = opts.notifyThrottleMs ?? DEFAULT_THROTTLE_MS;
|
|
241
|
-
|
|
342
|
+
const gateGroups = opts.gateGroups === true;
|
|
343
|
+
const gateDms = opts.gateDms !== false;
|
|
344
|
+
// Seed (or re-notify) a room's pending request and DM the primary admin,
|
|
345
|
+
// throttled per record. Called from the add event AND from an unknown
|
|
346
|
+
// room's first activity (the gate-turned-on-later migration path).
|
|
347
|
+
const requestGroupAccess = async (ctx, chat, addedBy) => {
|
|
348
|
+
const existing = await loadGroup(storage, ctx, chat.id);
|
|
349
|
+
// Approved never re-asks; denied drops silently here — the add event
|
|
350
|
+
// owns the leave-on-sight response for denied rooms.
|
|
351
|
+
if (existing?.status === "approved" || existing?.status === "denied")
|
|
352
|
+
return;
|
|
353
|
+
const now = Date.now();
|
|
354
|
+
const isFirst = existing === undefined;
|
|
355
|
+
// Refresh the title on every touch (rooms get renamed).
|
|
356
|
+
const rec = existing
|
|
357
|
+
? { ...existing, chat }
|
|
358
|
+
: { status: "pending", chat, addedBy, requestedAt: now };
|
|
359
|
+
if (isFirst)
|
|
360
|
+
await indexAdd(storage, groupIndexKey(ctx), "pending", chat.id);
|
|
361
|
+
if (isFirst || now - (rec.lastNotifiedAt ?? 0) > throttleMs) {
|
|
362
|
+
rec.lastNotifiedAt = now;
|
|
363
|
+
try {
|
|
364
|
+
const adminLang = await langOfUser(storage, ctx, ctx.adminId);
|
|
365
|
+
await botApi(ctx).sendMessage({
|
|
366
|
+
chat_id: ctx.adminId,
|
|
367
|
+
text: groupRequestText(rec, adminLang),
|
|
368
|
+
reply_markup: groupRequestKeyboard(chat.id, adminLang),
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
catch (e) {
|
|
372
|
+
console.error("[access-control] failed to notify admin of a group request", e);
|
|
373
|
+
}
|
|
374
|
+
if (isFirst)
|
|
375
|
+
opts.onGroupRequest?.({ chat, addedBy });
|
|
376
|
+
}
|
|
377
|
+
await saveGroup(storage, ctx, chat.id, rec);
|
|
378
|
+
};
|
|
379
|
+
const plugin =
|
|
242
380
|
// Generic declares dependency on adminContext's derives so
|
|
243
381
|
// ctx.adminId / ctx.isAdmin are typed inside our handlers.
|
|
244
382
|
// Session-side types flow through `.extend(opts.session)` below
|
|
@@ -250,9 +388,11 @@ export const accessControl = (opts) => {
|
|
|
250
388
|
// dedups against the bot's top-level extension; types flow.
|
|
251
389
|
.extend(sessionPlugin)
|
|
252
390
|
// Compute the gate decision so handlers can read `ctx.access` ergonomically.
|
|
253
|
-
.derive((ctx) => {
|
|
254
|
-
|
|
255
|
-
|
|
391
|
+
.derive(async (ctx) => {
|
|
392
|
+
const isUserEvent = ctx.is("message") || ctx.is("callback_query");
|
|
393
|
+
// channel_post joins the gated set only under the group gate — a
|
|
394
|
+
// channel has no sender to user-gate, but its ROOM is gateable.
|
|
395
|
+
if (!isUserEvent && !(gateGroups && ctx.is("channel_post"))) {
|
|
256
396
|
return {
|
|
257
397
|
access: {
|
|
258
398
|
allowed: false,
|
|
@@ -260,20 +400,50 @@ export const accessControl = (opts) => {
|
|
|
260
400
|
},
|
|
261
401
|
};
|
|
262
402
|
}
|
|
263
|
-
const senderId = ctx.from.id;
|
|
264
403
|
// ANY admin passes (ctx.isAdmin is the multi-admin gate; ctx.adminId is only the
|
|
265
404
|
// primary approve/deny target). A secondary admin must not fall through to the
|
|
266
|
-
// pending-request path just because they aren't the primary
|
|
405
|
+
// pending-request path just because they aren't the primary — and an admin is
|
|
406
|
+
// never muted, not even inside a pending room.
|
|
267
407
|
if (ctx.isAdmin) {
|
|
268
408
|
return {
|
|
269
409
|
access: { allowed: true, source: "admin" },
|
|
270
410
|
};
|
|
271
411
|
}
|
|
272
|
-
|
|
412
|
+
// Defaults "bypass the entire flow" — the room gate included.
|
|
413
|
+
if (isUserEvent && defaults.has(ctx.from.id)) {
|
|
273
414
|
return {
|
|
274
415
|
access: { allowed: true, source: "default" },
|
|
275
416
|
};
|
|
276
417
|
}
|
|
418
|
+
// Group gate: in a gated bot, the ROOM's approval decides for group
|
|
419
|
+
// chats — approving the room admits the room, every member of it.
|
|
420
|
+
if (gateGroups) {
|
|
421
|
+
const chat = gatedChatOf(ctx);
|
|
422
|
+
if (chat) {
|
|
423
|
+
const rec = await loadGroup(storage, ctx, chat.id);
|
|
424
|
+
if (rec?.status === "approved") {
|
|
425
|
+
return {
|
|
426
|
+
access: { allowed: true, source: "group" },
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
return {
|
|
430
|
+
access: {
|
|
431
|
+
allowed: false,
|
|
432
|
+
reason: rec?.status === "pending" ? "pending" : "unknown",
|
|
433
|
+
},
|
|
434
|
+
};
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
if (!isUserEvent) {
|
|
438
|
+
// channel_post outside an approved room (unreachable when the
|
|
439
|
+
// room was approved above).
|
|
440
|
+
return {
|
|
441
|
+
access: {
|
|
442
|
+
allowed: false,
|
|
443
|
+
reason: "no-sender",
|
|
444
|
+
},
|
|
445
|
+
};
|
|
446
|
+
}
|
|
277
447
|
// ctx.session.access may be undefined for first-ever interaction
|
|
278
448
|
// (session.initial() returns {} so .access isn't set yet).
|
|
279
449
|
const rec = ctx.session.access ?? { status: "unknown" };
|
|
@@ -286,6 +456,14 @@ export const accessControl = (opts) => {
|
|
|
286
456
|
},
|
|
287
457
|
};
|
|
288
458
|
}
|
|
459
|
+
// No DM gate: whoever isn't otherwise classified simply passes —
|
|
460
|
+
// EXCEPT an explicit deny, which holds in open mode too (that's
|
|
461
|
+
// what makes /access deny a ban list for an otherwise-open bot).
|
|
462
|
+
if (!gateDms && rec.status !== "denied") {
|
|
463
|
+
return {
|
|
464
|
+
access: { allowed: true, source: "open" },
|
|
465
|
+
};
|
|
466
|
+
}
|
|
289
467
|
return {
|
|
290
468
|
access: { allowed: false, reason: rec.status },
|
|
291
469
|
};
|
|
@@ -303,7 +481,8 @@ export const accessControl = (opts) => {
|
|
|
303
481
|
// with no visible error on our side and a generic "An error
|
|
304
482
|
// occurred" on Telegram's side after their 10 s timeout.
|
|
305
483
|
.use(async (ctx, next) => {
|
|
306
|
-
|
|
484
|
+
const gatedPost = gateGroups && ctx.is("channel_post");
|
|
485
|
+
if (!ctx.is("message") && !ctx.is("callback_query") && !gatedPost) {
|
|
307
486
|
return next();
|
|
308
487
|
}
|
|
309
488
|
if (ctx.access.allowed) {
|
|
@@ -329,13 +508,27 @@ export const accessControl = (opts) => {
|
|
|
329
508
|
return;
|
|
330
509
|
}
|
|
331
510
|
// Only message-shaped events have .text/.chat for our notification.
|
|
332
|
-
if (!ctx.is("message"))
|
|
511
|
+
if (!ctx.is("message") && !gatedPost)
|
|
512
|
+
return;
|
|
513
|
+
if (ctx.chat?.type !== "private") {
|
|
514
|
+
// Under the group gate an unknown room's first activity seeds a
|
|
515
|
+
// pending request (throttled DM) — this is how rooms the bot
|
|
516
|
+
// already sat in when the gate turned on surface for review
|
|
517
|
+
// (my_chat_member never fires for them).
|
|
518
|
+
if (gateGroups) {
|
|
519
|
+
const chat = gatedChatOf(ctx);
|
|
520
|
+
if (chat) {
|
|
521
|
+
await requestGroupAccess(ctx, chat, undefined);
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
// Without it, access stays a private-DM concern: group messages
|
|
525
|
+
// from unapproved users drop silently — seeding a request per
|
|
526
|
+
// posting member would spam the admin.
|
|
333
527
|
return;
|
|
334
|
-
|
|
335
|
-
//
|
|
336
|
-
//
|
|
337
|
-
|
|
338
|
-
if (ctx.chat?.type !== "private")
|
|
528
|
+
}
|
|
529
|
+
// Only real messages remain (channel posts always took the branch
|
|
530
|
+
// above — a channel is never private); narrow for TS and for safety.
|
|
531
|
+
if (!ctx.is("message"))
|
|
339
532
|
return;
|
|
340
533
|
const userId = ctx.from.id;
|
|
341
534
|
const existing = ctx.session.access;
|
|
@@ -362,7 +555,7 @@ export const accessControl = (opts) => {
|
|
|
362
555
|
rejectedAttempts: 0,
|
|
363
556
|
};
|
|
364
557
|
if (isFirstRequest) {
|
|
365
|
-
await indexAdd(storage, ctx, "pending", userId);
|
|
558
|
+
await indexAdd(storage, indexKey(ctx), "pending", userId);
|
|
366
559
|
}
|
|
367
560
|
else {
|
|
368
561
|
rec.rejectedAttempts = (rec.rejectedAttempts ?? 0) + 1;
|
|
@@ -418,7 +611,7 @@ export const accessControl = (opts) => {
|
|
|
418
611
|
rec.deniedAt = undefined;
|
|
419
612
|
rec.deniedBy = undefined;
|
|
420
613
|
await saveAccess(storage, ctx, uid, rec);
|
|
421
|
-
await indexMove(storage, ctx, uid, wasPending ? "pending" : wasDenied ? "denied" : "any", "approved");
|
|
614
|
+
await indexMove(storage, indexKey(ctx), uid, wasPending ? "pending" : wasDenied ? "denied" : "any", "approved");
|
|
422
615
|
if (rec.chatId !== undefined) {
|
|
423
616
|
try {
|
|
424
617
|
const sLang = await langOfUser(storage, ctx, uid);
|
|
@@ -443,7 +636,7 @@ export const accessControl = (opts) => {
|
|
|
443
636
|
text: say({ en: "✅ Approved", es: "✅ Aprobado" }, aLang),
|
|
444
637
|
});
|
|
445
638
|
if (ctx.queryData.v) {
|
|
446
|
-
await renderView(ctx, storage, defaults, ctx.queryData.v, aLang);
|
|
639
|
+
await renderView(ctx, storage, defaults, ctx.queryData.v, aLang, gateGroups);
|
|
447
640
|
}
|
|
448
641
|
else {
|
|
449
642
|
try {
|
|
@@ -468,7 +661,7 @@ export const accessControl = (opts) => {
|
|
|
468
661
|
rec.deniedAt = Date.now();
|
|
469
662
|
rec.deniedBy = ctx.adminId;
|
|
470
663
|
await saveAccess(storage, ctx, uid, rec);
|
|
471
|
-
await indexMove(storage, ctx, uid, wasPending ? "pending" : "any", "denied");
|
|
664
|
+
await indexMove(storage, indexKey(ctx), uid, wasPending ? "pending" : "any", "denied");
|
|
472
665
|
if (rec.chatId !== undefined) {
|
|
473
666
|
try {
|
|
474
667
|
const sLang = await langOfUser(storage, ctx, uid);
|
|
@@ -485,7 +678,7 @@ export const accessControl = (opts) => {
|
|
|
485
678
|
text: say({ en: "❌ Denied", es: "❌ Denegado" }, aLang),
|
|
486
679
|
});
|
|
487
680
|
if (ctx.queryData.v) {
|
|
488
|
-
await renderView(ctx, storage, defaults, ctx.queryData.v, aLang);
|
|
681
|
+
await renderView(ctx, storage, defaults, ctx.queryData.v, aLang, gateGroups);
|
|
489
682
|
}
|
|
490
683
|
else {
|
|
491
684
|
try {
|
|
@@ -509,7 +702,7 @@ export const accessControl = (opts) => {
|
|
|
509
702
|
rec.deniedAt = Date.now();
|
|
510
703
|
rec.deniedBy = ctx.adminId;
|
|
511
704
|
await saveAccess(storage, ctx, uid, rec);
|
|
512
|
-
await indexMove(storage, ctx, uid, "approved", "denied");
|
|
705
|
+
await indexMove(storage, indexKey(ctx), uid, "approved", "denied");
|
|
513
706
|
if (rec.chatId !== undefined) {
|
|
514
707
|
try {
|
|
515
708
|
const sLang = await langOfUser(storage, ctx, uid);
|
|
@@ -528,14 +721,14 @@ export const accessControl = (opts) => {
|
|
|
528
721
|
await ctx.answer({
|
|
529
722
|
text: say({ en: "↩️ Revoked", es: "↩️ Revocado" }, aLang),
|
|
530
723
|
});
|
|
531
|
-
await renderView(ctx, storage, defaults, "approved", aLang);
|
|
724
|
+
await renderView(ctx, storage, defaults, "approved", aLang, gateGroups);
|
|
532
725
|
})
|
|
533
726
|
.callbackQuery(acView, async (ctx) => {
|
|
534
727
|
const aLang = await adminGuard(ctx);
|
|
535
728
|
if (aLang === null)
|
|
536
729
|
return;
|
|
537
730
|
await ctx.answer({});
|
|
538
|
-
await renderView(ctx, storage, defaults, ctx.queryData.v, aLang);
|
|
731
|
+
await renderView(ctx, storage, defaults, ctx.queryData.v, aLang, gateGroups);
|
|
539
732
|
})
|
|
540
733
|
.callbackQuery(acClose, async (ctx) => {
|
|
541
734
|
const aLang = await adminGuard(ctx);
|
|
@@ -562,8 +755,165 @@ export const accessControl = (opts) => {
|
|
|
562
755
|
if (!ctx.isAdmin)
|
|
563
756
|
return;
|
|
564
757
|
const aLang = ctxLang(ctx);
|
|
565
|
-
const v = mainView(await loadIndex(storage, ctx), defaults, aLang);
|
|
758
|
+
const v = mainView(await loadIndex(storage, indexKey(ctx)), defaults, aLang, gateGroups ? await loadIndex(storage, groupIndexKey(ctx)) : null);
|
|
566
759
|
await ctx.send(v.text, { reply_markup: v.keyboard });
|
|
760
|
+
});
|
|
761
|
+
// The group gate's handlers register ONLY when it's on, so a DM-only bot
|
|
762
|
+
// never adds my_chat_member to its allowed_updates.
|
|
763
|
+
if (!gateGroups)
|
|
764
|
+
return plugin;
|
|
765
|
+
return (plugin
|
|
766
|
+
// The add event: approve on the spot when an admin/default did the
|
|
767
|
+
// adding; leave on sight when the room was denied; else go pending
|
|
768
|
+
// and ask. Removal clears the record — deny memory survives.
|
|
769
|
+
.on("my_chat_member", async (ctx) => {
|
|
770
|
+
const c = ctx;
|
|
771
|
+
const chat = gatedChatOf(c);
|
|
772
|
+
if (!chat)
|
|
773
|
+
return;
|
|
774
|
+
const inRoom = (s) => s === "member" || s === "administrator" || s === "restricted";
|
|
775
|
+
const wasIn = inRoom(c.oldChatMember?.status);
|
|
776
|
+
const nowIn = inRoom(c.newChatMember?.status);
|
|
777
|
+
const nowOut = c.newChatMember?.status === "left" ||
|
|
778
|
+
c.newChatMember?.status === "kicked";
|
|
779
|
+
const rec = await loadGroup(storage, ctx, chat.id);
|
|
780
|
+
if (nowOut) {
|
|
781
|
+
// A fresh add re-asks — but a denied room stays denied.
|
|
782
|
+
if (rec && rec.status !== "denied") {
|
|
783
|
+
await dropGroup(storage, ctx, chat.id);
|
|
784
|
+
await indexRemove(storage, groupIndexKey(ctx), chat.id);
|
|
785
|
+
}
|
|
786
|
+
return;
|
|
787
|
+
}
|
|
788
|
+
if (!nowIn || wasIn)
|
|
789
|
+
return; // a rights change, not an add
|
|
790
|
+
if (rec?.status === "denied") {
|
|
791
|
+
// Re-added while denied: leave on sight, tell the admin (throttled).
|
|
792
|
+
await botApi(ctx)
|
|
793
|
+
.leaveChat({ chat_id: chat.id })
|
|
794
|
+
.catch(() => { });
|
|
795
|
+
const now = Date.now();
|
|
796
|
+
if (now - (rec.lastNotifiedAt ?? 0) > throttleMs) {
|
|
797
|
+
await saveGroup(storage, ctx, chat.id, {
|
|
798
|
+
...rec,
|
|
799
|
+
chat,
|
|
800
|
+
lastNotifiedAt: now,
|
|
801
|
+
});
|
|
802
|
+
const adminLang = await langOfUser(storage, ctx, c.adminId);
|
|
803
|
+
await botApi(ctx)
|
|
804
|
+
.sendMessage({
|
|
805
|
+
chat_id: c.adminId,
|
|
806
|
+
text: `${say({
|
|
807
|
+
en: "🚪 Re-added to a denied room — left again.",
|
|
808
|
+
es: "🚪 Re-añadido a una sala denegada — salí de nuevo.",
|
|
809
|
+
}, adminLang)}\n\n💬 ${formatGroup(rec, chat.id)}`,
|
|
810
|
+
reply_markup: new InlineKeyboard().text(say({ en: "✅ Allow", es: "✅ Permitir" }, adminLang), acGroupApprove.pack({ gid: chat.id }), { style: "success" }),
|
|
811
|
+
})
|
|
812
|
+
.catch(() => { });
|
|
813
|
+
}
|
|
814
|
+
return;
|
|
815
|
+
}
|
|
816
|
+
if (rec?.status === "approved")
|
|
817
|
+
return;
|
|
818
|
+
const addedBy = c.from?.id !== undefined
|
|
819
|
+
? {
|
|
820
|
+
id: c.from.id,
|
|
821
|
+
firstName: c.from.firstName,
|
|
822
|
+
lastName: c.from.lastName,
|
|
823
|
+
username: c.from.username,
|
|
824
|
+
}
|
|
825
|
+
: undefined;
|
|
826
|
+
if (c.isAdmin || (addedBy && defaults.has(addedBy.id))) {
|
|
827
|
+
const now = Date.now();
|
|
828
|
+
await saveGroup(storage, ctx, chat.id, {
|
|
829
|
+
status: "approved",
|
|
830
|
+
chat,
|
|
831
|
+
addedBy,
|
|
832
|
+
requestedAt: now,
|
|
833
|
+
approvedAt: now,
|
|
834
|
+
approvedBy: addedBy?.id,
|
|
835
|
+
});
|
|
836
|
+
await indexMove(storage, groupIndexKey(ctx), chat.id, "any", "approved");
|
|
837
|
+
opts.onGroupApprove?.({
|
|
838
|
+
chatId: chat.id,
|
|
839
|
+
approvedBy: addedBy?.id ?? 0,
|
|
840
|
+
});
|
|
841
|
+
return;
|
|
842
|
+
}
|
|
843
|
+
await requestGroupAccess(ctx, chat, addedBy);
|
|
844
|
+
})
|
|
845
|
+
.callbackQuery(acGroupApprove, async (ctx) => {
|
|
846
|
+
const aLang = await adminGuard(ctx);
|
|
847
|
+
if (aLang === null)
|
|
848
|
+
return;
|
|
849
|
+
const gid = ctx.queryData.gid;
|
|
850
|
+
const rec = await loadGroup(storage, ctx, gid);
|
|
851
|
+
if (!rec) {
|
|
852
|
+
await ctx.answer({
|
|
853
|
+
text: say({ en: "Not found.", es: "No encontrado." }, aLang),
|
|
854
|
+
});
|
|
855
|
+
return;
|
|
856
|
+
}
|
|
857
|
+
rec.status = "approved";
|
|
858
|
+
rec.approvedAt = Date.now();
|
|
859
|
+
rec.approvedBy = ctx.adminId;
|
|
860
|
+
rec.deniedAt = undefined;
|
|
861
|
+
rec.deniedBy = undefined;
|
|
862
|
+
await saveGroup(storage, ctx, gid, rec);
|
|
863
|
+
await indexMove(storage, groupIndexKey(ctx), gid, "any", "approved");
|
|
864
|
+
await ctx.answer({
|
|
865
|
+
text: say({ en: "✅ Approved", es: "✅ Aprobado" }, aLang),
|
|
866
|
+
});
|
|
867
|
+
if (ctx.queryData.v) {
|
|
868
|
+
await renderView(ctx, storage, defaults, "groups", aLang, gateGroups);
|
|
869
|
+
}
|
|
870
|
+
else {
|
|
871
|
+
try {
|
|
872
|
+
await ctx.editText(`${say({ en: "✅ Approved", es: "✅ Aprobado" }, aLang)} · ${formatGroup(rec, gid)}`);
|
|
873
|
+
}
|
|
874
|
+
catch {
|
|
875
|
+
// not always editable
|
|
876
|
+
}
|
|
877
|
+
}
|
|
878
|
+
opts.onGroupApprove?.({ chatId: gid, approvedBy: ctx.adminId });
|
|
879
|
+
})
|
|
880
|
+
.callbackQuery(acGroupLeave, async (ctx) => {
|
|
881
|
+
const aLang = await adminGuard(ctx);
|
|
882
|
+
if (aLang === null)
|
|
883
|
+
return;
|
|
884
|
+
const gid = ctx.queryData.gid;
|
|
885
|
+
const rec = await loadGroup(storage, ctx, gid);
|
|
886
|
+
if (!rec) {
|
|
887
|
+
await ctx.answer({
|
|
888
|
+
text: say({ en: "Not found.", es: "No encontrado." }, aLang),
|
|
889
|
+
});
|
|
890
|
+
return;
|
|
891
|
+
}
|
|
892
|
+
rec.status = "denied";
|
|
893
|
+
rec.deniedAt = Date.now();
|
|
894
|
+
rec.deniedBy = ctx.adminId;
|
|
895
|
+
rec.approvedAt = undefined;
|
|
896
|
+
rec.approvedBy = undefined;
|
|
897
|
+
await saveGroup(storage, ctx, gid, rec);
|
|
898
|
+
await indexMove(storage, groupIndexKey(ctx), gid, "any", "denied");
|
|
899
|
+
await botApi(ctx)
|
|
900
|
+
.leaveChat({ chat_id: gid })
|
|
901
|
+
.catch(() => { });
|
|
902
|
+
await ctx.answer({
|
|
903
|
+
text: say({ en: "🚪 Left", es: "🚪 Fuera" }, aLang),
|
|
904
|
+
});
|
|
905
|
+
if (ctx.queryData.v) {
|
|
906
|
+
await renderView(ctx, storage, defaults, "groups", aLang, gateGroups);
|
|
907
|
+
}
|
|
908
|
+
else {
|
|
909
|
+
try {
|
|
910
|
+
await ctx.editText(`${say({ en: "🚪 Left", es: "🚪 Fuera" }, aLang)} · ${formatGroup(rec, gid)}`);
|
|
911
|
+
}
|
|
912
|
+
catch {
|
|
913
|
+
// not always editable
|
|
914
|
+
}
|
|
915
|
+
}
|
|
916
|
+
opts.onGroupDeny?.({ chatId: gid, deniedBy: ctx.adminId });
|
|
567
917
|
}));
|
|
568
918
|
};
|
|
569
919
|
// ─── views ─────────────────────────────────────────────────────────
|
|
@@ -574,11 +924,13 @@ const statusLabel = {
|
|
|
574
924
|
pending: { en: "Pending", es: "Pendientes" },
|
|
575
925
|
denied: { en: "Denied", es: "Denegados" },
|
|
576
926
|
};
|
|
577
|
-
const renderView = async (ctx, storage, defaults, view, lang) => {
|
|
578
|
-
const idx = await loadIndex(storage, ctx);
|
|
927
|
+
const renderView = async (ctx, storage, defaults, view, lang, gateGroups = false) => {
|
|
928
|
+
const idx = await loadIndex(storage, indexKey(ctx));
|
|
579
929
|
const v = view === "approved" || view === "pending" || view === "denied"
|
|
580
930
|
? await listView(storage, ctx, idx, view, defaults, lang)
|
|
581
|
-
:
|
|
931
|
+
: view === "groups" && gateGroups
|
|
932
|
+
? await groupsView(storage, ctx, lang)
|
|
933
|
+
: mainView(idx, defaults, lang, gateGroups ? await loadIndex(storage, groupIndexKey(ctx)) : null);
|
|
582
934
|
try {
|
|
583
935
|
await ctx.editText(v.text, { reply_markup: v.keyboard });
|
|
584
936
|
}
|
|
@@ -586,25 +938,33 @@ const renderView = async (ctx, storage, defaults, view, lang) => {
|
|
|
586
938
|
// editText only works while message is recent enough; ignore
|
|
587
939
|
}
|
|
588
940
|
};
|
|
589
|
-
const mainView = (idx, defaults, lang) => {
|
|
941
|
+
const mainView = (idx, defaults, lang, groupIdx = null) => {
|
|
590
942
|
const approved = say(statusLabel.approved, lang);
|
|
591
943
|
const pending = say(statusLabel.pending, lang);
|
|
592
944
|
const denied = say(statusLabel.denied, lang);
|
|
593
|
-
const
|
|
945
|
+
const lines = [
|
|
594
946
|
say({ en: "🔐 Access Control", es: "🔐 Access Control" }, lang),
|
|
595
947
|
"",
|
|
596
948
|
`✅ ${approved}: ${idx.approved.length}`,
|
|
597
949
|
`⏳ ${pending}: ${idx.pending.length}`,
|
|
598
950
|
`❌ ${denied}: ${idx.denied.length}`,
|
|
599
951
|
`👑 ${say({ en: "Defaults", es: "Defaults" }, lang)}: ${defaults.size} (hardcoded)`,
|
|
600
|
-
]
|
|
952
|
+
];
|
|
953
|
+
if (groupIdx) {
|
|
954
|
+
lines.push(`👥 ${say({ en: "Groups", es: "Grupos" }, lang)}: ${groupIdx.approved.length} ✅ · ${groupIdx.pending.length} ⏳ · ${groupIdx.denied.length} 🚪`);
|
|
955
|
+
}
|
|
956
|
+
const text = lines.join("\n");
|
|
601
957
|
const keyboard = new InlineKeyboard()
|
|
602
958
|
.text(`✅ ${approved} (${idx.approved.length})`, acView.pack({ v: "approved" }))
|
|
603
959
|
.text(`⏳ ${pending} (${idx.pending.length})`, acView.pack({ v: "pending" }))
|
|
604
960
|
.row()
|
|
605
|
-
.text(`❌ ${denied} (${idx.denied.length})`, acView.pack({ v: "denied" }))
|
|
606
|
-
|
|
961
|
+
.text(`❌ ${denied} (${idx.denied.length})`, acView.pack({ v: "denied" }));
|
|
962
|
+
if (groupIdx) {
|
|
963
|
+
keyboard.text(`👥 ${say({ en: "Groups", es: "Grupos" }, lang)} (${groupIdx.approved.length + groupIdx.pending.length})`, acView.pack({ v: "groups" }));
|
|
964
|
+
}
|
|
965
|
+
keyboard
|
|
607
966
|
.row()
|
|
967
|
+
.text(say({ en: "🔄 Refresh", es: "🔄 Refresh" }, lang), acView.pack({ v: "main" }))
|
|
608
968
|
.text(say({ en: "✖️ Close", es: "✖️ Cerrar" }, lang), acClose.pack({}));
|
|
609
969
|
return { text, keyboard };
|
|
610
970
|
};
|
|
@@ -667,6 +1027,60 @@ const listView = async (storage, ctx, idx, filter, defaults, lang) => {
|
|
|
667
1027
|
keyboard.text(back, acView.pack({ v: "main" }));
|
|
668
1028
|
return { text: lines.join("\n"), keyboard };
|
|
669
1029
|
};
|
|
1030
|
+
// One combined rooms view (group counts stay small): approved rooms can be
|
|
1031
|
+
// left, pending ones approved or left, denied ones re-allowed (the bot has
|
|
1032
|
+
// already left those — re-allowing just welcomes the next add).
|
|
1033
|
+
const groupsView = async (storage, ctx, lang) => {
|
|
1034
|
+
const idx = await loadIndex(storage, groupIndexKey(ctx));
|
|
1035
|
+
const back = say({ en: "⬅️ Back", es: "⬅️ Volver" }, lang);
|
|
1036
|
+
const lines = [say({ en: "👥 Groups", es: "👥 Grupos" }, lang)];
|
|
1037
|
+
const keyboard = new InlineKeyboard();
|
|
1038
|
+
let n = 0;
|
|
1039
|
+
const buckets = [
|
|
1040
|
+
{ filter: "approved", header: `✅ ${say(statusLabel.approved, lang)}` },
|
|
1041
|
+
{ filter: "pending", header: `⏳ ${say(statusLabel.pending, lang)}` },
|
|
1042
|
+
{
|
|
1043
|
+
filter: "denied",
|
|
1044
|
+
header: `🚪 ${say({ en: "Left/denied", es: "Fuera/denegados" }, lang)}`,
|
|
1045
|
+
},
|
|
1046
|
+
];
|
|
1047
|
+
for (const { filter, header } of buckets) {
|
|
1048
|
+
const ids = idx[filter].slice(0, 20);
|
|
1049
|
+
if (ids.length === 0)
|
|
1050
|
+
continue;
|
|
1051
|
+
lines.push("", `${header} (${idx[filter].length})`);
|
|
1052
|
+
for (const id of ids) {
|
|
1053
|
+
n += 1;
|
|
1054
|
+
const rec = await loadGroup(storage, ctx, id);
|
|
1055
|
+
const ageRef = rec?.approvedAt ?? rec?.deniedAt ?? rec?.requestedAt ?? Date.now();
|
|
1056
|
+
lines.push(`${n}. ${formatGroup(rec, id)} · ${say({ en: "ago", es: "hace" }, lang)} ${fmtAge(Date.now() - ageRef)}`);
|
|
1057
|
+
if (filter === "approved") {
|
|
1058
|
+
keyboard
|
|
1059
|
+
.text(`${say({ en: "🚪 Leave", es: "🚪 Salir" }, lang)} #${n}`, acGroupLeave.pack({ gid: id, v: "groups" }), { style: "danger" })
|
|
1060
|
+
.row();
|
|
1061
|
+
}
|
|
1062
|
+
else if (filter === "pending") {
|
|
1063
|
+
keyboard
|
|
1064
|
+
.text(`✅ ${n}`, acGroupApprove.pack({ gid: id, v: "groups" }), {
|
|
1065
|
+
style: "success",
|
|
1066
|
+
})
|
|
1067
|
+
.text(`🚪 ${n}`, acGroupLeave.pack({ gid: id, v: "groups" }), {
|
|
1068
|
+
style: "danger",
|
|
1069
|
+
})
|
|
1070
|
+
.row();
|
|
1071
|
+
}
|
|
1072
|
+
else {
|
|
1073
|
+
keyboard
|
|
1074
|
+
.text(`${say({ en: "✅ Allow", es: "✅ Permitir" }, lang)} #${n}`, acGroupApprove.pack({ gid: id, v: "groups" }), { style: "success" })
|
|
1075
|
+
.row();
|
|
1076
|
+
}
|
|
1077
|
+
}
|
|
1078
|
+
}
|
|
1079
|
+
if (n === 0)
|
|
1080
|
+
lines.push("", say({ en: "(empty)", es: "(vacío)" }, lang));
|
|
1081
|
+
keyboard.text(back, acView.pack({ v: "main" }));
|
|
1082
|
+
return { text: lines.join("\n"), keyboard };
|
|
1083
|
+
};
|
|
670
1084
|
// ─── test helper ───────────────────────────────────────────────────
|
|
671
1085
|
/**
|
|
672
1086
|
* Inject a synthetic access request — for tests/demos when you can't
|
|
@@ -694,7 +1108,7 @@ export const simulateAccessRequest = async (bot, storage, adminId, fakeUser, mes
|
|
|
694
1108
|
// instance itself, which exposes `info` directly after `bot.start`.
|
|
695
1109
|
const botCtx = { bot: { info: bot.info } };
|
|
696
1110
|
await saveAccess(storage, botCtx, fakeUser.id, rec);
|
|
697
|
-
await indexAdd(storage, botCtx, "pending", fakeUser.id);
|
|
1111
|
+
await indexAdd(storage, indexKey(botCtx), "pending", fakeUser.id);
|
|
698
1112
|
const adminLang = await langOfUser(storage, botCtx, adminId);
|
|
699
1113
|
await bot.api.sendMessage({
|
|
700
1114
|
chat_id: adminId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access-control.js","sourceRoot":"","sources":["../../src/bot/access-control.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"access-control.js","sourceRoot":"","sources":["../../src/bot/access-control.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED