@openvertice/bot-sdk 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -5
- package/dist/src/cliente.d.ts.map +1 -1
- package/dist/src/cliente.js +15 -5
- package/dist/src/cliente.js.map +1 -1
- package/dist/src/gateway.d.ts +6 -1
- package/dist/src/gateway.d.ts.map +1 -1
- package/dist/src/gateway.js +169 -37
- package/dist/src/gateway.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/tipos.d.ts +11 -0
- package/dist/src/tipos.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/cliente.ts +17 -5
- package/src/gateway.ts +166 -41
- package/src/index.ts +1 -0
- package/src/tipos.ts +12 -0
package/README.md
CHANGED
|
@@ -74,9 +74,11 @@ await bot.start();
|
|
|
74
74
|
|
|
75
75
|
O SDK cuida do que ninguém quer escrever duas vezes: troca o token por sessão,
|
|
76
76
|
renova antes de vencer, manda batimento, retoma com `resume` e reconecta com
|
|
77
|
-
espera crescente.
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
espera crescente. Falhas transitórias — servidor fora, rede caindo, sessão que
|
|
78
|
+
não pôde ser renovada — são tentadas **indefinidamente** (espera de 1 s até
|
|
79
|
+
30 s); desistir só acontece nos casos definitivos abaixo. Token girado, bot
|
|
80
|
+
desativado ou outra conexão assumindo o mesmo bot **não** reconectam:
|
|
81
|
+
`bot.estado` vira `recusado` e o erro fica em `bot.ultimoErro`.
|
|
80
82
|
|
|
81
83
|
## Mensagem de voz (áudio no chat)
|
|
82
84
|
|
|
@@ -108,6 +110,23 @@ do canal — é o que deixa chamar o bot numa sala de comandos (`!`) sem que ele
|
|
|
108
110
|
leia a conversa toda. Em canal sem prefixo, `mention` vem junto com
|
|
109
111
|
`message.created` (mesmo `id`): trate como aviso, não como segunda mensagem.
|
|
110
112
|
|
|
113
|
+
## Onde o autor está na voz (`autorVoz`)
|
|
114
|
+
|
|
115
|
+
`message.created` e `mention` trazem **`autorVoz`**: a sala de voz em que quem
|
|
116
|
+
escreveu está naquele instante (`null` = fora da voz). É um retrato do evento — o
|
|
117
|
+
histórico não tem esse campo.
|
|
118
|
+
|
|
119
|
+
```ts
|
|
120
|
+
bot.command("tocar", async ({ mensagem, responder }) => {
|
|
121
|
+
const sala = mensagem.autorVoz?.code ?? "PATIO"; // já sei onde a pessoa está
|
|
122
|
+
await voz.entrar(sala);
|
|
123
|
+
await responder(`no ar em ${sala}`);
|
|
124
|
+
});
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Com isso o clássico `!tocar` escrito de dentro de uma chamada não precisa de
|
|
128
|
+
pergunta nem de código de sala: o bot entra direto na sala de quem pediu.
|
|
129
|
+
|
|
111
130
|
## Voz
|
|
112
131
|
|
|
113
132
|
```ts
|
|
@@ -155,16 +174,34 @@ rodar `node dist/exemplos/eco.js` de outro diretório.
|
|
|
155
174
|
|
|
156
175
|
## Testes
|
|
157
176
|
|
|
177
|
+
A reconexão do gateway tem teste próprio, **sem servidor** (usa um `WebSocket`
|
|
178
|
+
falso e o `dist/` compilado):
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
npm run build && node testes/gateway-reconexao.mjs # backoff, recusa, queda e fechar()
|
|
182
|
+
```
|
|
183
|
+
|
|
158
184
|
Os testes de fumaça sobem o servidor de verdade (precisa do repositório do
|
|
159
185
|
Vértice ao lado):
|
|
160
186
|
|
|
161
187
|
```bash
|
|
162
|
-
node testes/fumaca.mjs # dois bots: comando, histórico, apagar,
|
|
163
|
-
node testes/
|
|
188
|
+
node testes/fumaca.mjs # dois bots: comando, histórico, apagar, voz no chat, menção
|
|
189
|
+
node testes/curinga.mjs # curinga `*`: comando em sala de texto criada depois do start()
|
|
190
|
+
node testes/voz.mjs # dois bots na voz: mesh fechada e `autorVoz` no evento
|
|
164
191
|
node testes/voz-cliente.mjs # bot ↔ cliente do navegador: SDP nos dois nomes e áudio
|
|
165
192
|
# (o fumaca.mjs também manda um recado de voz e baixa o áudio de volta)
|
|
166
193
|
```
|
|
167
194
|
|
|
195
|
+
Os testes acham o servidor no checkout irmão (`../discord2`); noutro layout,
|
|
196
|
+
exporte `VERTICE_SERVIDOR=/caminho/do/vertice` antes de rodar.
|
|
197
|
+
|
|
198
|
+
## Curinga: todos os canais de um tipo
|
|
199
|
+
|
|
200
|
+
Se o painel liberar **todos os canais de texto** (ou de voz), a descoberta traz um
|
|
201
|
+
item com `code: "*"`, e o SDK usa esse item para os canais que não estavam na
|
|
202
|
+
lista (salas criadas depois). Nos comandos, o `code` do canal entregue ao handler
|
|
203
|
+
já é o da sala de verdade — nunca `*`.
|
|
204
|
+
|
|
168
205
|
## Limites (do servidor, não do SDK)
|
|
169
206
|
|
|
170
207
|
- 30 mensagens por minuto por bot; 1 sessão por minuto (o SDK só pede outra
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cliente.d.ts","sourceRoot":"","sources":["../../src/cliente.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cliente.d.ts","sourceRoot":"","sources":["../../src/cliente.ts"],"names":[],"mappings":"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"}
|
package/dist/src/cliente.js
CHANGED
|
@@ -267,9 +267,16 @@ export class Bot {
|
|
|
267
267
|
// The bot does not run its own commands: otherwise `!eco !eco …` would loop.
|
|
268
268
|
if (mensagem.autorBot && mensagem.autorId === this.#descoberta?.bot.id)
|
|
269
269
|
return;
|
|
270
|
-
|
|
270
|
+
// `*` is the wildcard: the bot was granted every text channel, including
|
|
271
|
+
// the ones created after the discovery.
|
|
272
|
+
const canais = this.#descoberta?.canais.texto ?? [];
|
|
273
|
+
const canal = canais.find((c) => c.code === mensagem.sala) ??
|
|
274
|
+
canais.find((c) => c.code === "*");
|
|
271
275
|
if (!canal)
|
|
272
276
|
return;
|
|
277
|
+
// With the wildcard, `canal.code` is `*`; the room itself comes from the
|
|
278
|
+
// message. Replying (and deleting) must use the room, never the wildcard.
|
|
279
|
+
const sala = canal.code === "*" ? mensagem.sala : canal.code;
|
|
273
280
|
const texto = mensagem.texto.trim();
|
|
274
281
|
const prefixo = canal.prefixo;
|
|
275
282
|
// Without a channel prefix, the command is simply the first token ("tocar x").
|
|
@@ -278,16 +285,19 @@ export class Bot {
|
|
|
278
285
|
return;
|
|
279
286
|
const [bruto = "", ...args] = semPrefixo.split(/\s+/);
|
|
280
287
|
const nome = bruto.toLowerCase();
|
|
281
|
-
const comando = this.#comandos.find((c) => c.nome === nome &&
|
|
288
|
+
const comando = this.#comandos.find((c) => c.nome === nome &&
|
|
289
|
+
(c.canais.length === 0 || c.canais.includes(sala)));
|
|
282
290
|
if (!comando)
|
|
283
291
|
return;
|
|
284
292
|
const contexto = {
|
|
285
293
|
mensagem,
|
|
286
|
-
canal,
|
|
294
|
+
// Effective channel: `canal.code` is always a real room code, even when the
|
|
295
|
+
// grant came from the wildcard.
|
|
296
|
+
canal: { ...canal, code: sala },
|
|
287
297
|
args,
|
|
288
298
|
resto: semPrefixo.slice(bruto.length).trim(),
|
|
289
|
-
responder: (resposta) => this.enviar(
|
|
290
|
-
apagar: () => this.#http.apagar(
|
|
299
|
+
responder: (resposta) => this.enviar(sala, resposta),
|
|
300
|
+
apagar: () => this.#http.apagar(sala, mensagem.id, this.#sessao?.sessao),
|
|
291
301
|
};
|
|
292
302
|
Promise.resolve(comando.executar(contexto)).catch((erro) => this.#log(`comando ${comando.nome} falhou: ${erro.message}`));
|
|
293
303
|
}
|
package/dist/src/cliente.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cliente.js","sourceRoot":"","sources":["../../src/cliente.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cliente.js","sourceRoot":"","sources":["../../src/cliente.ts"],"names":[],"mappings":"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"}
|
package/dist/src/gateway.d.ts
CHANGED
|
@@ -50,8 +50,13 @@ export declare class Gateway {
|
|
|
50
50
|
/**
|
|
51
51
|
* Opens the socket and resolves once the bot is identified (`ready`).
|
|
52
52
|
*
|
|
53
|
+
* Transient failures — network drops, an unreachable server, a session that
|
|
54
|
+
* could not be renewed, a gateway that never answers — are retried with
|
|
55
|
+
* exponential backoff until the bot is ready. Only a definitive refusal (or
|
|
56
|
+
* {@link fechar}) stops the loop.
|
|
57
|
+
*
|
|
53
58
|
* @returns A promise that settles when the gateway is truly ready.
|
|
54
|
-
* @throws {Error} When the server refuses the bot or the
|
|
59
|
+
* @throws {Error} When the server refuses the bot or the gateway was closed.
|
|
55
60
|
*/
|
|
56
61
|
conectar(): Promise<void>;
|
|
57
62
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../src/gateway.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../src/gateway.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAkBpE;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,GACvB,YAAY,GACZ,QAAQ,GACR,cAAc,GACd,WAAW,GACX,UAAU,CAAC;AAEf,iEAAiE;AACjE,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ,0EAA0E;IAC1E,MAAM,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9B,uCAAuC;IACvC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,QAAQ,EAAE,CAAC,CAAC,SAAS,MAAM,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IACjE,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,sDAAsD;IACtD,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAUD;;;;;;;;;GASG;AACH,qBAAa,OAAO;;IAmBN,OAAO,CAAC,QAAQ,CAAC,MAAM;IADnC,6EAA6E;gBAChD,MAAM,EAAE,aAAa;IAElD,gCAAgC;IAChC,IAAI,MAAM,IAAI,eAAe,CAE5B;IAED,qEAAqE;IACrE,IAAI,WAAW,IAAI,MAAM,GAAG,IAAI,CAE/B;IAED;;;;;;;;;;OAUG;IACH,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA6NzB;;;;;;;;;OASG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,IAAI;IAO7D;;;;;OAKG;IACH,MAAM,CAAC,MAAM,SAAO,EAAE,MAAM,SAAkB,GAAG,IAAI;CA0GtD"}
|
package/dist/src/gateway.js
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
const ABERTO = 1;
|
|
3
3
|
/** How long without any server frame before the connection is assumed dead. */
|
|
4
4
|
const SEM_SINAL_MS = 90_000;
|
|
5
|
+
/** Deadline for a new socket to answer `hello`/`ready` before the attempt is abandoned. */
|
|
6
|
+
const SEM_RESPOSTA_MS = 15_000;
|
|
5
7
|
/** Codes where retrying is pointless: the server refused the bot. */
|
|
6
8
|
const DEFINITIVOS = new Set([4001, 4003, 4005]);
|
|
7
9
|
/** Another connection took over this bot: reconnecting would fight over it. */
|
|
@@ -27,7 +29,14 @@ export class Gateway {
|
|
|
27
29
|
#seq = 0;
|
|
28
30
|
#batida = null;
|
|
29
31
|
#vigia = null;
|
|
32
|
+
/** Deadline of the attempt in progress (waiting for `hello`/`ready`). */
|
|
33
|
+
#prazo = null;
|
|
34
|
+
/** Backoff timer between attempts. */
|
|
30
35
|
#recuo = null;
|
|
36
|
+
/** Wakes the backoff early, so `fechar()` can settle a sleeping `conectar()`. */
|
|
37
|
+
#acordar = null;
|
|
38
|
+
/** Connection cycle in progress; one at a time, no matter who asks. */
|
|
39
|
+
#corrida = null;
|
|
31
40
|
#tentativa = 0;
|
|
32
41
|
#encerrado = false;
|
|
33
42
|
#estado = "conectando";
|
|
@@ -46,42 +55,150 @@ export class Gateway {
|
|
|
46
55
|
/**
|
|
47
56
|
* Opens the socket and resolves once the bot is identified (`ready`).
|
|
48
57
|
*
|
|
58
|
+
* Transient failures — network drops, an unreachable server, a session that
|
|
59
|
+
* could not be renewed, a gateway that never answers — are retried with
|
|
60
|
+
* exponential backoff until the bot is ready. Only a definitive refusal (or
|
|
61
|
+
* {@link fechar}) stops the loop.
|
|
62
|
+
*
|
|
49
63
|
* @returns A promise that settles when the gateway is truly ready.
|
|
50
|
-
* @throws {Error} When the server refuses the bot or the
|
|
64
|
+
* @throws {Error} When the server refuses the bot or the gateway was closed.
|
|
51
65
|
*/
|
|
52
66
|
conectar() {
|
|
53
67
|
this.#encerrado = false;
|
|
54
|
-
|
|
68
|
+
// Already identified: nothing to open, and a healthy socket is not replaced.
|
|
69
|
+
if (this.#estado === "pronto")
|
|
70
|
+
return Promise.resolve();
|
|
71
|
+
if (this.#corrida)
|
|
72
|
+
return this.#corrida;
|
|
73
|
+
// A manual start begins with the short backoff again.
|
|
74
|
+
this.#tentativa = 0;
|
|
75
|
+
return this.#iniciarCiclo();
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Starts a connection cycle, or joins the one already running.
|
|
79
|
+
*
|
|
80
|
+
* @returns The cycle promise; it settles on `ready`, on a definitive refusal
|
|
81
|
+
* or when {@link fechar} is called.
|
|
82
|
+
*/
|
|
83
|
+
#iniciarCiclo() {
|
|
84
|
+
if (this.#corrida)
|
|
85
|
+
return this.#corrida;
|
|
86
|
+
const corrida = this.#manterConectado().finally(() => {
|
|
87
|
+
if (this.#corrida === corrida)
|
|
88
|
+
this.#corrida = null;
|
|
89
|
+
});
|
|
90
|
+
this.#corrida = corrida;
|
|
91
|
+
return corrida;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Attempts the connection and retries until `ready` or a definitive refusal.
|
|
95
|
+
*
|
|
96
|
+
* Every failure comes back through here — including the ones that happen
|
|
97
|
+
* before a socket exists, such as a session that could not be renewed. It is
|
|
98
|
+
* a loop on purpose: a single retry used to end the reconnection, leaving the
|
|
99
|
+
* bot offline for good.
|
|
100
|
+
*/
|
|
101
|
+
async #manterConectado() {
|
|
102
|
+
for (;;) {
|
|
103
|
+
// `fechar()` may have run while we were sleeping in the backoff.
|
|
104
|
+
if (this.#encerrado)
|
|
105
|
+
throw new Error("gateway encerrado");
|
|
106
|
+
try {
|
|
107
|
+
await this.#abrir();
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
catch (erro) {
|
|
111
|
+
if (this.#encerrado)
|
|
112
|
+
throw erro;
|
|
113
|
+
await this.#esperarRecuo(erro);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Waits out the backoff before the next attempt.
|
|
119
|
+
*
|
|
120
|
+
* The wait is interruptible: {@link fechar} wakes it, so a `conectar()` call
|
|
121
|
+
* sleeping here settles instead of hanging until the timer fires.
|
|
122
|
+
*
|
|
123
|
+
* @param erro Failure that triggered the wait; it goes into the state detail.
|
|
124
|
+
*/
|
|
125
|
+
async #esperarRecuo(erro) {
|
|
126
|
+
this.#tentativa += 1;
|
|
127
|
+
const espera = Math.min(30_000, 500 * 2 ** Math.min(this.#tentativa, 6));
|
|
128
|
+
this.#mudar("reconectando", `${mensagemDe(erro)}: volta em ${espera} ms (tentativa ${this.#tentativa})`);
|
|
129
|
+
await new Promise((resolver) => {
|
|
130
|
+
this.#acordar = () => {
|
|
131
|
+
this.#acordar = null;
|
|
132
|
+
if (this.#recuo)
|
|
133
|
+
clearTimeout(this.#recuo);
|
|
134
|
+
this.#recuo = null;
|
|
135
|
+
resolver();
|
|
136
|
+
};
|
|
137
|
+
this.#recuo = setTimeout(() => this.#acordar?.(), espera);
|
|
138
|
+
this.#recuo.unref?.();
|
|
139
|
+
});
|
|
55
140
|
}
|
|
56
141
|
/**
|
|
57
142
|
* Opens one socket attempt.
|
|
58
143
|
*
|
|
59
|
-
* Resolves on
|
|
60
|
-
*
|
|
144
|
+
* Resolves on `ready` and rejects on any failure before it (socket error,
|
|
145
|
+
* close, no answer within {@link SEM_RESPOSTA_MS}, session error), which is
|
|
146
|
+
* what lets {@link #manterConectado} decide when to try again.
|
|
61
147
|
*/
|
|
62
148
|
async #abrir() {
|
|
63
149
|
this.#mudar("conectando");
|
|
64
150
|
const sessao = await this.opcoes.sessao();
|
|
151
|
+
// `fechar()` may have run while the session was being fetched: do not open
|
|
152
|
+
// a socket that nobody is waiting for.
|
|
153
|
+
if (this.#encerrado)
|
|
154
|
+
throw new Error("gateway encerrado");
|
|
65
155
|
this.#sessao = sessao;
|
|
66
156
|
return new Promise((resolver, rejeitar) => {
|
|
67
157
|
let concluido = false;
|
|
68
|
-
const
|
|
158
|
+
const concluir = (erro) => {
|
|
69
159
|
if (concluido)
|
|
70
160
|
return;
|
|
71
161
|
concluido = true;
|
|
72
|
-
|
|
162
|
+
if (this.#prazo)
|
|
163
|
+
clearTimeout(this.#prazo);
|
|
164
|
+
this.#prazo = null;
|
|
165
|
+
if (erro)
|
|
166
|
+
rejeitar(erro);
|
|
167
|
+
else
|
|
168
|
+
resolver();
|
|
73
169
|
};
|
|
74
170
|
let ws;
|
|
75
171
|
try {
|
|
76
172
|
ws = new WebSocket(this.opcoes.url);
|
|
77
173
|
}
|
|
78
174
|
catch (erro) {
|
|
79
|
-
|
|
175
|
+
concluir(erro instanceof Error ? erro : new Error(String(erro)));
|
|
80
176
|
return;
|
|
81
177
|
}
|
|
82
178
|
this.#ws = ws;
|
|
83
|
-
|
|
179
|
+
// A socket that opens but never answers would hang this attempt (and the
|
|
180
|
+
// retry loop) forever; the deadline settles it as a failure.
|
|
181
|
+
this.#prazo = setTimeout(() => {
|
|
182
|
+
this.#prazo = null;
|
|
183
|
+
if (this.#ws !== ws)
|
|
184
|
+
return;
|
|
185
|
+
try {
|
|
186
|
+
ws.close(4000, "sem resposta");
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
/* it had already dropped */
|
|
190
|
+
}
|
|
191
|
+
concluir(new Error("o gateway não respondeu ao `identify`"));
|
|
192
|
+
}, SEM_RESPOSTA_MS);
|
|
193
|
+
this.#prazo.unref?.();
|
|
194
|
+
ws.addEventListener("error", () => {
|
|
195
|
+
if (this.#ws !== ws)
|
|
196
|
+
return;
|
|
197
|
+
concluir(new Error("não consegui abrir o gateway"));
|
|
198
|
+
});
|
|
84
199
|
ws.addEventListener("message", (evento) => {
|
|
200
|
+
if (this.#ws !== ws)
|
|
201
|
+
return;
|
|
85
202
|
const envelope = this.#ler(evento);
|
|
86
203
|
if (!envelope)
|
|
87
204
|
return;
|
|
@@ -91,17 +208,24 @@ export class Gateway {
|
|
|
91
208
|
this.#identificar(ws, sessao);
|
|
92
209
|
return;
|
|
93
210
|
}
|
|
94
|
-
this.#receber(envelope, () =>
|
|
95
|
-
if (concluido)
|
|
96
|
-
return;
|
|
97
|
-
concluido = true;
|
|
98
|
-
resolver();
|
|
99
|
-
});
|
|
211
|
+
this.#receber(envelope, () => concluir());
|
|
100
212
|
});
|
|
101
213
|
ws.addEventListener("close", (evento) => {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
214
|
+
// A close from a socket that is no longer the current one is residue
|
|
215
|
+
// from a previous attempt: it must not touch the live connection.
|
|
216
|
+
if (this.#ws !== ws)
|
|
217
|
+
return;
|
|
218
|
+
const estavaPronto = this.#estado === "pronto";
|
|
219
|
+
const definitivo = this.#aoFechar(evento.code, evento.reason);
|
|
220
|
+
concluir(new Error(this.#estado === "encerrado"
|
|
221
|
+
? "gateway encerrado"
|
|
222
|
+
: `gateway ${definitivo ? "recusado" : "caiu"} (${evento.code})`));
|
|
223
|
+
// After `ready` there is no attempt left to fail — the loop already
|
|
224
|
+
// returned — so a drop has to start a new cycle.
|
|
225
|
+
if (!definitivo && estavaPronto) {
|
|
226
|
+
this.#corrida = null;
|
|
227
|
+
void this.#iniciarCiclo().catch(() => { });
|
|
228
|
+
}
|
|
105
229
|
});
|
|
106
230
|
});
|
|
107
231
|
}
|
|
@@ -187,13 +311,16 @@ export class Gateway {
|
|
|
187
311
|
fechar(codigo = 1000, motivo = "pedido do bot") {
|
|
188
312
|
this.#encerrado = true;
|
|
189
313
|
this.#limpar();
|
|
314
|
+
// Nothing else to wait for: wake a `conectar()` that is sleeping in backoff.
|
|
315
|
+
this.#acordar?.();
|
|
190
316
|
try {
|
|
191
317
|
this.#ws?.close(codigo, motivo);
|
|
192
318
|
}
|
|
193
319
|
catch {
|
|
194
320
|
/* it was already closing */
|
|
195
321
|
}
|
|
196
|
-
|
|
322
|
+
// `#ws` is cleared by the close handler: it has to settle the attempt in
|
|
323
|
+
// progress, otherwise a `conectar()` waiting on it would never return.
|
|
197
324
|
this.#mudar("encerrado");
|
|
198
325
|
}
|
|
199
326
|
/**
|
|
@@ -246,54 +373,59 @@ export class Gateway {
|
|
|
246
373
|
this.#vigia.unref?.();
|
|
247
374
|
}
|
|
248
375
|
/**
|
|
249
|
-
*
|
|
376
|
+
* Applies the close policy: stop for good or let the caller reconnect.
|
|
250
377
|
*
|
|
251
378
|
* @param codigo WebSocket close code.
|
|
252
379
|
* @param motivo Close reason, used in the log and in the state detail.
|
|
380
|
+
* @returns `true` when the bot must stop; `false` when a retry makes sense.
|
|
253
381
|
*/
|
|
254
382
|
#aoFechar(codigo, motivo) {
|
|
255
383
|
this.#limpar();
|
|
256
384
|
this.#ws = null;
|
|
257
385
|
if (this.#encerrado)
|
|
258
|
-
return;
|
|
386
|
+
return true;
|
|
259
387
|
if (DEFINITIVOS.has(codigo)) {
|
|
260
388
|
this.#mudar("recusado", `${codigo}: ${motivo}`);
|
|
261
389
|
this.#encerrado = true;
|
|
262
|
-
return;
|
|
390
|
+
return true;
|
|
263
391
|
}
|
|
264
392
|
if (codigo === OUTRA_CONEXAO) {
|
|
265
393
|
this.#mudar("recusado", "outra conexão assumiu este bot");
|
|
266
394
|
this.#encerrado = true;
|
|
267
|
-
return;
|
|
395
|
+
return true;
|
|
268
396
|
}
|
|
269
397
|
if (codigo === SESSAO_ENCERRADA) {
|
|
270
398
|
this.#mudar("recusado", "a sessão foi encerrada (token girado ou bot desativado)");
|
|
271
399
|
this.#encerrado = true;
|
|
272
|
-
return;
|
|
400
|
+
return true;
|
|
273
401
|
}
|
|
274
402
|
// 4002 (expired session) and network drops: renew the session and come back.
|
|
275
|
-
|
|
276
|
-
const espera = Math.min(30_000, 500 * 2 ** Math.min(this.#tentativa, 6));
|
|
277
|
-
this.#mudar("reconectando", `${codigo || "sem código"}: volta em ${espera} ms (tentativa ${this.#tentativa})`);
|
|
278
|
-
this.#recuo = setTimeout(() => {
|
|
279
|
-
if (this.#encerrado)
|
|
280
|
-
return;
|
|
281
|
-
// On an expired session, the client's `sessao()` already asks for another one.
|
|
282
|
-
this.#abrir().catch((erro) => this.#mudar("reconectando", `falhou: ${erro.message}`));
|
|
283
|
-
}, espera);
|
|
284
|
-
this.#recuo.unref?.();
|
|
403
|
+
return false;
|
|
285
404
|
}
|
|
286
|
-
/**
|
|
405
|
+
/**
|
|
406
|
+
* Clears the timers of a live connection (heartbeat, silence watch, attempt
|
|
407
|
+
* deadline), so a closed gateway leaves no handles behind.
|
|
408
|
+
*
|
|
409
|
+
* The backoff timer is not touched here: it belongs to {@link #esperarRecuo},
|
|
410
|
+
* which is woken by {@link fechar}.
|
|
411
|
+
*/
|
|
287
412
|
#limpar() {
|
|
288
413
|
if (this.#batida)
|
|
289
414
|
clearInterval(this.#batida);
|
|
290
415
|
if (this.#vigia)
|
|
291
416
|
clearTimeout(this.#vigia);
|
|
292
|
-
if (this.#
|
|
293
|
-
clearTimeout(this.#
|
|
417
|
+
if (this.#prazo)
|
|
418
|
+
clearTimeout(this.#prazo);
|
|
294
419
|
this.#batida = null;
|
|
295
420
|
this.#vigia = null;
|
|
296
|
-
this.#
|
|
421
|
+
this.#prazo = null;
|
|
297
422
|
}
|
|
298
423
|
}
|
|
424
|
+
/**
|
|
425
|
+
* Turns any thrown value into a printable message.
|
|
426
|
+
*
|
|
427
|
+
* @param erro Value thrown or rejected.
|
|
428
|
+
* @returns `erro.message` for `Error`s, `String(erro)` otherwise.
|
|
429
|
+
*/
|
|
430
|
+
const mensagemDe = (erro) => erro instanceof Error ? erro.message : String(erro);
|
|
299
431
|
//# sourceMappingURL=gateway.js.map
|
package/dist/src/gateway.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/gateway.ts"],"names":[],"mappings":"AAOA,iDAAiD;AACjD,MAAM,MAAM,GAAG,CAAC,CAAC;AACjB,+EAA+E;AAC/E,MAAM,YAAY,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/gateway.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
export { Bot, ErroDaApi } from "./cliente.js";
|
|
8
8
|
export type { ContextoDoComando, OpcoesDoBot } from "./cliente.js";
|
|
9
9
|
export type { EstadoDoGateway, OpcoesGateway } from "./gateway.js";
|
|
10
|
-
export type { AnexoDaMensagem, CanalDeTexto, CanalDeVoz, Descoberta, Eventos, Intencao, Limites, Mensagem, PeerDaVoz, PreviaDeLink, ServidorIce, Sessao, SinalDeVoz, } from "./tipos.js";
|
|
10
|
+
export type { AnexoDaMensagem, CanalDeTexto, CanalDeVoz, Descoberta, Eventos, Intencao, Limites, Mensagem, PeerDaVoz, PreviaDeLink, SalaDeVoz, ServidorIce, Sessao, SinalDeVoz, } from "./tipos.js";
|
|
11
11
|
export { CONTRATO } from "./tipos.js";
|
|
12
12
|
export { Voz } from "./voz.js";
|
|
13
13
|
export type { ConexaoDeVoz, EntradaNaVoz, FonteDeAudio, OpcoesDeVoz, TransporteDeVoz, } from "./voz.js";
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACnE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACnE,YAAY,EACV,eAAe,EACf,YAAY,EACZ,UAAU,EACV,UAAU,EACV,OAAO,EACP,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,WAAW,EACX,MAAM,EACN,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,eAAe,GAChB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACnE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACnE,YAAY,EACV,eAAe,EACf,YAAY,EACZ,UAAU,EACV,UAAU,EACV,OAAO,EACP,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,SAAS,EACT,WAAW,EACX,MAAM,EACN,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,eAAe,GAChB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,gFAAgF;AAChF,qBAAqB;AACrB;;;;;GAKG;AACH,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,gFAAgF;AAChF,qBAAqB;AACrB;;;;;GAKG;AACH,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAmB9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAQ/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/src/tipos.d.ts
CHANGED
|
@@ -101,6 +101,11 @@ export interface PreviaDeLink {
|
|
|
101
101
|
/** Site name (host) shown next to the preview. */
|
|
102
102
|
site: string;
|
|
103
103
|
}
|
|
104
|
+
/** Voice room someone is in, as reported by the server. */
|
|
105
|
+
export interface SalaDeVoz {
|
|
106
|
+
code: string;
|
|
107
|
+
nome: string;
|
|
108
|
+
}
|
|
104
109
|
/** A message, as delivered by `message.created` and returned by the send routes. */
|
|
105
110
|
export interface Mensagem {
|
|
106
111
|
/** Message id, unique inside the channel. */
|
|
@@ -113,6 +118,12 @@ export interface Mensagem {
|
|
|
113
118
|
autorId?: string | null;
|
|
114
119
|
/** `true` when the author is a bot — this one included. */
|
|
115
120
|
autorBot: boolean;
|
|
121
|
+
/**
|
|
122
|
+
* Voice room the author was in when the message was sent (`null` = not in
|
|
123
|
+
* voice). Only on `message.created`/`mention` — it is a snapshot, so it is
|
|
124
|
+
* absent from the history.
|
|
125
|
+
*/
|
|
126
|
+
autorVoz?: SalaDeVoz | null;
|
|
116
127
|
/** Kind of payload the message carries. */
|
|
117
128
|
tipo?: "texto" | "arquivo" | "voz";
|
|
118
129
|
/** Text content; `null` for attachments without a caption. */
|
package/dist/src/tipos.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tipos.d.ts","sourceRoot":"","sources":["../../src/tipos.ts"],"names":[],"mappings":"AAGA,4CAA4C;AAC5C,eAAO,MAAM,QAAQ,YAAY,CAAC;AAElC,qDAAqD;AACrD,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;AAErE,0DAA0D;AAC1D,MAAM,WAAW,YAAY;IAC3B,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,OAAO,EAAE,OAAO,CAAC;IACjB,qCAAqC;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,uFAAuF;IACvF,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,kDAAkD;AAClD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,6DAA6D;AAC7D,MAAM,WAAW,WAAW;IAC1B,oDAAoD;IACpD,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,oDAAoD;AACpD,MAAM,WAAW,OAAO;IACtB,2BAA2B;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sCAAsC;IACtC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mCAAmC;IACnC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,iFAAiF;AACjF,MAAM,WAAW,UAAU;IACzB,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,GAAG,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACvD,yDAAyD;IACzD,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,iDAAiD;IACjD,MAAM,EAAE;QAAE,KAAK,EAAE,YAAY,EAAE,CAAC;QAAC,GAAG,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;IACrD,wCAAwC;IACxC,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,oCAAoC;IACpC,UAAU,EAAE,WAAW,EAAE,CAAC;IAC1B,6BAA6B;IAC7B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,8EAA8E;AAC9E,MAAM,WAAW,MAAM;IACrB,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D;AAED,oCAAoC;AACpC,MAAM,WAAW,eAAe;IAC9B,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,GAAG,EAAE,MAAM,CAAC;CACb;AAED,sDAAsD;AACtD,MAAM,WAAW,YAAY;IAC3B,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,kDAAkD;IAClD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,wCAAwC;IACxC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,yCAAyC;IACzC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,oFAAoF;AACpF,MAAM,WAAW,QAAQ;IACvB,6CAA6C;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,2DAA2D;IAC3D,QAAQ,EAAE,OAAO,CAAC;IAClB,2CAA2C;IAC3C,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,KAAK,CAAC;IACnC,8DAA8D;IAC9D,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,qDAAqD;IACrD,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACjC,+DAA+D;IAC/D,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;CAC9B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,UAAU;IACzB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,WAAW,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,mDAAmD;IACnD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAC/B,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,sCAAsC;AACtC,MAAM,WAAW,SAAS;IACxB,+BAA+B;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,iGAAiG;AACjG,MAAM,WAAW,OAAO;IACtB,+EAA+E;IAC/E,KAAK,EAAE;QACL,wCAAwC;QACxC,GAAG,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC;QACvD,sEAAsE;QACtE,MAAM,EAAE;YAAE,KAAK,EAAE,YAAY,EAAE,CAAC;YAAC,GAAG,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC;QACjD,0CAA0C;QAC1C,OAAO,EAAE,QAAQ,EAAE,CAAC;QACpB,sFAAsF;QACtF,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,sEAAsE;QACtE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;QAC7B,oCAAoC;QACpC,UAAU,EAAE,WAAW,EAAE,CAAC;QAC1B,kDAAkD;QAClD,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,4DAA4D;IAC5D,iBAAiB,EAAE,QAAQ,CAAC;IAC5B;;;;;OAKG;IACH,OAAO,EAAE,QAAQ,CAAC;IAClB,wEAAwE;IACxE,iBAAiB,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,4EAA4E;IAC5E,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,wCAAwC;IACxC,cAAc,EAAE;QACd,oBAAoB;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,oBAAoB;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,sEAAsE;QACtE,EAAE,EAAE,MAAM,CAAC;QACX,iCAAiC;QACjC,KAAK,EAAE,SAAS,EAAE,CAAC;KACpB,CAAC;IACF,0CAA0C;IAC1C,mBAAmB,EAAE,SAAS,CAAC;IAC/B,wCAAwC;IACxC,iBAAiB,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAClC,yDAAyD;IACzD,YAAY,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,2DAA2D;IAC3D,cAAc,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,UAAU,CAAA;KAAE,CAAC;CACpD"}
|
|
1
|
+
{"version":3,"file":"tipos.d.ts","sourceRoot":"","sources":["../../src/tipos.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/cliente.ts
CHANGED
|
@@ -342,8 +342,16 @@ export class Bot {
|
|
|
342
342
|
if (!mensagem.texto || !mensagem.sala) return;
|
|
343
343
|
// The bot does not run its own commands: otherwise `!eco !eco …` would loop.
|
|
344
344
|
if (mensagem.autorBot && mensagem.autorId === this.#descoberta?.bot.id) return;
|
|
345
|
-
|
|
345
|
+
// `*` is the wildcard: the bot was granted every text channel, including
|
|
346
|
+
// the ones created after the discovery.
|
|
347
|
+
const canais = this.#descoberta?.canais.texto ?? [];
|
|
348
|
+
const canal =
|
|
349
|
+
canais.find((c) => c.code === mensagem.sala) ??
|
|
350
|
+
canais.find((c) => c.code === "*");
|
|
346
351
|
if (!canal) return;
|
|
352
|
+
// With the wildcard, `canal.code` is `*`; the room itself comes from the
|
|
353
|
+
// message. Replying (and deleting) must use the room, never the wildcard.
|
|
354
|
+
const sala = canal.code === "*" ? mensagem.sala : canal.code;
|
|
347
355
|
const texto = mensagem.texto.trim();
|
|
348
356
|
const prefixo = canal.prefixo;
|
|
349
357
|
// Without a channel prefix, the command is simply the first token ("tocar x").
|
|
@@ -352,16 +360,20 @@ export class Bot {
|
|
|
352
360
|
const [bruto = "", ...args] = semPrefixo.split(/\s+/);
|
|
353
361
|
const nome = bruto.toLowerCase();
|
|
354
362
|
const comando = this.#comandos.find(
|
|
355
|
-
(c) =>
|
|
363
|
+
(c) =>
|
|
364
|
+
c.nome === nome &&
|
|
365
|
+
(c.canais.length === 0 || c.canais.includes(sala)),
|
|
356
366
|
);
|
|
357
367
|
if (!comando) return;
|
|
358
368
|
const contexto: ContextoDoComando = {
|
|
359
369
|
mensagem,
|
|
360
|
-
canal,
|
|
370
|
+
// Effective channel: `canal.code` is always a real room code, even when the
|
|
371
|
+
// grant came from the wildcard.
|
|
372
|
+
canal: { ...canal, code: sala },
|
|
361
373
|
args,
|
|
362
374
|
resto: semPrefixo.slice(bruto.length).trim(),
|
|
363
|
-
responder: (resposta) => this.enviar(
|
|
364
|
-
apagar: () => this.#http.apagar(
|
|
375
|
+
responder: (resposta) => this.enviar(sala, resposta),
|
|
376
|
+
apagar: () => this.#http.apagar(sala, mensagem.id, this.#sessao?.sessao),
|
|
365
377
|
};
|
|
366
378
|
Promise.resolve(comando.executar(contexto)).catch((erro: Error) =>
|
|
367
379
|
this.#log(`comando ${comando.nome} falhou: ${erro.message}`),
|
package/src/gateway.ts
CHANGED
|
@@ -9,6 +9,8 @@ import type { ComandoAnunciado, Eventos, Sessao } from "./tipos.js";
|
|
|
9
9
|
const ABERTO = 1;
|
|
10
10
|
/** How long without any server frame before the connection is assumed dead. */
|
|
11
11
|
const SEM_SINAL_MS = 90_000;
|
|
12
|
+
/** Deadline for a new socket to answer `hello`/`ready` before the attempt is abandoned. */
|
|
13
|
+
const SEM_RESPOSTA_MS = 15_000;
|
|
12
14
|
|
|
13
15
|
/** Codes where retrying is pointless: the server refused the bot. */
|
|
14
16
|
const DEFINITIVOS = new Set([4001, 4003, 4005]);
|
|
@@ -79,7 +81,14 @@ export class Gateway {
|
|
|
79
81
|
#seq = 0;
|
|
80
82
|
#batida: ReturnType<typeof setInterval> | null = null;
|
|
81
83
|
#vigia: ReturnType<typeof setTimeout> | null = null;
|
|
84
|
+
/** Deadline of the attempt in progress (waiting for `hello`/`ready`). */
|
|
85
|
+
#prazo: ReturnType<typeof setTimeout> | null = null;
|
|
86
|
+
/** Backoff timer between attempts. */
|
|
82
87
|
#recuo: ReturnType<typeof setTimeout> | null = null;
|
|
88
|
+
/** Wakes the backoff early, so `fechar()` can settle a sleeping `conectar()`. */
|
|
89
|
+
#acordar: (() => void) | null = null;
|
|
90
|
+
/** Connection cycle in progress; one at a time, no matter who asks. */
|
|
91
|
+
#corrida: Promise<void> | null = null;
|
|
83
92
|
#tentativa = 0;
|
|
84
93
|
#encerrado = false;
|
|
85
94
|
#estado: EstadoDoGateway = "conectando";
|
|
@@ -100,44 +109,142 @@ export class Gateway {
|
|
|
100
109
|
/**
|
|
101
110
|
* Opens the socket and resolves once the bot is identified (`ready`).
|
|
102
111
|
*
|
|
112
|
+
* Transient failures — network drops, an unreachable server, a session that
|
|
113
|
+
* could not be renewed, a gateway that never answers — are retried with
|
|
114
|
+
* exponential backoff until the bot is ready. Only a definitive refusal (or
|
|
115
|
+
* {@link fechar}) stops the loop.
|
|
116
|
+
*
|
|
103
117
|
* @returns A promise that settles when the gateway is truly ready.
|
|
104
|
-
* @throws {Error} When the server refuses the bot or the
|
|
118
|
+
* @throws {Error} When the server refuses the bot or the gateway was closed.
|
|
105
119
|
*/
|
|
106
120
|
conectar(): Promise<void> {
|
|
107
121
|
this.#encerrado = false;
|
|
108
|
-
|
|
122
|
+
// Already identified: nothing to open, and a healthy socket is not replaced.
|
|
123
|
+
if (this.#estado === "pronto") return Promise.resolve();
|
|
124
|
+
if (this.#corrida) return this.#corrida;
|
|
125
|
+
// A manual start begins with the short backoff again.
|
|
126
|
+
this.#tentativa = 0;
|
|
127
|
+
return this.#iniciarCiclo();
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Starts a connection cycle, or joins the one already running.
|
|
132
|
+
*
|
|
133
|
+
* @returns The cycle promise; it settles on `ready`, on a definitive refusal
|
|
134
|
+
* or when {@link fechar} is called.
|
|
135
|
+
*/
|
|
136
|
+
#iniciarCiclo(): Promise<void> {
|
|
137
|
+
if (this.#corrida) return this.#corrida;
|
|
138
|
+
const corrida = this.#manterConectado().finally(() => {
|
|
139
|
+
if (this.#corrida === corrida) this.#corrida = null;
|
|
140
|
+
});
|
|
141
|
+
this.#corrida = corrida;
|
|
142
|
+
return corrida;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Attempts the connection and retries until `ready` or a definitive refusal.
|
|
147
|
+
*
|
|
148
|
+
* Every failure comes back through here — including the ones that happen
|
|
149
|
+
* before a socket exists, such as a session that could not be renewed. It is
|
|
150
|
+
* a loop on purpose: a single retry used to end the reconnection, leaving the
|
|
151
|
+
* bot offline for good.
|
|
152
|
+
*/
|
|
153
|
+
async #manterConectado(): Promise<void> {
|
|
154
|
+
for (;;) {
|
|
155
|
+
// `fechar()` may have run while we were sleeping in the backoff.
|
|
156
|
+
if (this.#encerrado) throw new Error("gateway encerrado");
|
|
157
|
+
try {
|
|
158
|
+
await this.#abrir();
|
|
159
|
+
return;
|
|
160
|
+
} catch (erro) {
|
|
161
|
+
if (this.#encerrado) throw erro;
|
|
162
|
+
await this.#esperarRecuo(erro);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Waits out the backoff before the next attempt.
|
|
169
|
+
*
|
|
170
|
+
* The wait is interruptible: {@link fechar} wakes it, so a `conectar()` call
|
|
171
|
+
* sleeping here settles instead of hanging until the timer fires.
|
|
172
|
+
*
|
|
173
|
+
* @param erro Failure that triggered the wait; it goes into the state detail.
|
|
174
|
+
*/
|
|
175
|
+
async #esperarRecuo(erro: unknown): Promise<void> {
|
|
176
|
+
this.#tentativa += 1;
|
|
177
|
+
const espera = Math.min(30_000, 500 * 2 ** Math.min(this.#tentativa, 6));
|
|
178
|
+
this.#mudar(
|
|
179
|
+
"reconectando",
|
|
180
|
+
`${mensagemDe(erro)}: volta em ${espera} ms (tentativa ${this.#tentativa})`,
|
|
181
|
+
);
|
|
182
|
+
await new Promise<void>((resolver) => {
|
|
183
|
+
this.#acordar = () => {
|
|
184
|
+
this.#acordar = null;
|
|
185
|
+
if (this.#recuo) clearTimeout(this.#recuo);
|
|
186
|
+
this.#recuo = null;
|
|
187
|
+
resolver();
|
|
188
|
+
};
|
|
189
|
+
this.#recuo = setTimeout(() => this.#acordar?.(), espera);
|
|
190
|
+
this.#recuo.unref?.();
|
|
191
|
+
});
|
|
109
192
|
}
|
|
110
193
|
|
|
111
194
|
/**
|
|
112
195
|
* Opens one socket attempt.
|
|
113
196
|
*
|
|
114
|
-
* Resolves on
|
|
115
|
-
*
|
|
197
|
+
* Resolves on `ready` and rejects on any failure before it (socket error,
|
|
198
|
+
* close, no answer within {@link SEM_RESPOSTA_MS}, session error), which is
|
|
199
|
+
* what lets {@link #manterConectado} decide when to try again.
|
|
116
200
|
*/
|
|
117
201
|
async #abrir(): Promise<void> {
|
|
118
202
|
this.#mudar("conectando");
|
|
119
203
|
const sessao = await this.opcoes.sessao();
|
|
204
|
+
// `fechar()` may have run while the session was being fetched: do not open
|
|
205
|
+
// a socket that nobody is waiting for.
|
|
206
|
+
if (this.#encerrado) throw new Error("gateway encerrado");
|
|
120
207
|
this.#sessao = sessao;
|
|
121
208
|
return new Promise<void>((resolver, rejeitar) => {
|
|
122
209
|
let concluido = false;
|
|
123
|
-
const
|
|
210
|
+
const concluir = (erro?: Error) => {
|
|
124
211
|
if (concluido) return;
|
|
125
212
|
concluido = true;
|
|
126
|
-
|
|
213
|
+
if (this.#prazo) clearTimeout(this.#prazo);
|
|
214
|
+
this.#prazo = null;
|
|
215
|
+
if (erro) rejeitar(erro);
|
|
216
|
+
else resolver();
|
|
127
217
|
};
|
|
218
|
+
|
|
128
219
|
let ws: WebSocket;
|
|
129
220
|
try {
|
|
130
221
|
ws = new WebSocket(this.opcoes.url);
|
|
131
222
|
} catch (erro) {
|
|
132
|
-
|
|
223
|
+
concluir(erro instanceof Error ? erro : new Error(String(erro)));
|
|
133
224
|
return;
|
|
134
225
|
}
|
|
135
226
|
this.#ws = ws;
|
|
136
227
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
)
|
|
228
|
+
// A socket that opens but never answers would hang this attempt (and the
|
|
229
|
+
// retry loop) forever; the deadline settles it as a failure.
|
|
230
|
+
this.#prazo = setTimeout(() => {
|
|
231
|
+
this.#prazo = null;
|
|
232
|
+
if (this.#ws !== ws) return;
|
|
233
|
+
try {
|
|
234
|
+
ws.close(4000, "sem resposta");
|
|
235
|
+
} catch {
|
|
236
|
+
/* it had already dropped */
|
|
237
|
+
}
|
|
238
|
+
concluir(new Error("o gateway não respondeu ao `identify`"));
|
|
239
|
+
}, SEM_RESPOSTA_MS);
|
|
240
|
+
this.#prazo.unref?.();
|
|
241
|
+
|
|
242
|
+
ws.addEventListener("error", () => {
|
|
243
|
+
if (this.#ws !== ws) return;
|
|
244
|
+
concluir(new Error("não consegui abrir o gateway"));
|
|
245
|
+
});
|
|
140
246
|
ws.addEventListener("message", (evento) => {
|
|
247
|
+
if (this.#ws !== ws) return;
|
|
141
248
|
const envelope = this.#ler(evento);
|
|
142
249
|
if (!envelope) return;
|
|
143
250
|
this.#armarVigia();
|
|
@@ -146,15 +253,27 @@ export class Gateway {
|
|
|
146
253
|
this.#identificar(ws, sessao);
|
|
147
254
|
return;
|
|
148
255
|
}
|
|
149
|
-
this.#receber(envelope, () =>
|
|
150
|
-
if (concluido) return;
|
|
151
|
-
concluido = true;
|
|
152
|
-
resolver();
|
|
153
|
-
});
|
|
256
|
+
this.#receber(envelope, () => concluir());
|
|
154
257
|
});
|
|
155
258
|
ws.addEventListener("close", (evento) => {
|
|
156
|
-
|
|
157
|
-
|
|
259
|
+
// A close from a socket that is no longer the current one is residue
|
|
260
|
+
// from a previous attempt: it must not touch the live connection.
|
|
261
|
+
if (this.#ws !== ws) return;
|
|
262
|
+
const estavaPronto = this.#estado === "pronto";
|
|
263
|
+
const definitivo = this.#aoFechar(evento.code, evento.reason);
|
|
264
|
+
concluir(
|
|
265
|
+
new Error(
|
|
266
|
+
this.#estado === "encerrado"
|
|
267
|
+
? "gateway encerrado"
|
|
268
|
+
: `gateway ${definitivo ? "recusado" : "caiu"} (${evento.code})`,
|
|
269
|
+
),
|
|
270
|
+
);
|
|
271
|
+
// After `ready` there is no attempt left to fail — the loop already
|
|
272
|
+
// returned — so a drop has to start a new cycle.
|
|
273
|
+
if (!definitivo && estavaPronto) {
|
|
274
|
+
this.#corrida = null;
|
|
275
|
+
void this.#iniciarCiclo().catch(() => {});
|
|
276
|
+
}
|
|
158
277
|
});
|
|
159
278
|
});
|
|
160
279
|
}
|
|
@@ -245,12 +364,15 @@ export class Gateway {
|
|
|
245
364
|
fechar(codigo = 1000, motivo = "pedido do bot"): void {
|
|
246
365
|
this.#encerrado = true;
|
|
247
366
|
this.#limpar();
|
|
367
|
+
// Nothing else to wait for: wake a `conectar()` that is sleeping in backoff.
|
|
368
|
+
this.#acordar?.();
|
|
248
369
|
try {
|
|
249
370
|
this.#ws?.close(codigo, motivo);
|
|
250
371
|
} catch {
|
|
251
372
|
/* it was already closing */
|
|
252
373
|
}
|
|
253
|
-
|
|
374
|
+
// `#ws` is cleared by the close handler: it has to settle the attempt in
|
|
375
|
+
// progress, otherwise a `conectar()` waiting on it would never return.
|
|
254
376
|
this.#mudar("encerrado");
|
|
255
377
|
}
|
|
256
378
|
|
|
@@ -301,54 +423,57 @@ export class Gateway {
|
|
|
301
423
|
}
|
|
302
424
|
|
|
303
425
|
/**
|
|
304
|
-
*
|
|
426
|
+
* Applies the close policy: stop for good or let the caller reconnect.
|
|
305
427
|
*
|
|
306
428
|
* @param codigo WebSocket close code.
|
|
307
429
|
* @param motivo Close reason, used in the log and in the state detail.
|
|
430
|
+
* @returns `true` when the bot must stop; `false` when a retry makes sense.
|
|
308
431
|
*/
|
|
309
|
-
#aoFechar(codigo: number, motivo: string):
|
|
432
|
+
#aoFechar(codigo: number, motivo: string): boolean {
|
|
310
433
|
this.#limpar();
|
|
311
434
|
this.#ws = null;
|
|
312
|
-
if (this.#encerrado) return;
|
|
435
|
+
if (this.#encerrado) return true;
|
|
313
436
|
if (DEFINITIVOS.has(codigo)) {
|
|
314
437
|
this.#mudar("recusado", `${codigo}: ${motivo}`);
|
|
315
438
|
this.#encerrado = true;
|
|
316
|
-
return;
|
|
439
|
+
return true;
|
|
317
440
|
}
|
|
318
441
|
if (codigo === OUTRA_CONEXAO) {
|
|
319
442
|
this.#mudar("recusado", "outra conexão assumiu este bot");
|
|
320
443
|
this.#encerrado = true;
|
|
321
|
-
return;
|
|
444
|
+
return true;
|
|
322
445
|
}
|
|
323
446
|
if (codigo === SESSAO_ENCERRADA) {
|
|
324
447
|
this.#mudar("recusado", "a sessão foi encerrada (token girado ou bot desativado)");
|
|
325
448
|
this.#encerrado = true;
|
|
326
|
-
return;
|
|
449
|
+
return true;
|
|
327
450
|
}
|
|
328
451
|
// 4002 (expired session) and network drops: renew the session and come back.
|
|
329
|
-
|
|
330
|
-
const espera = Math.min(30_000, 500 * 2 ** Math.min(this.#tentativa, 6));
|
|
331
|
-
this.#mudar(
|
|
332
|
-
"reconectando",
|
|
333
|
-
`${codigo || "sem código"}: volta em ${espera} ms (tentativa ${this.#tentativa})`,
|
|
334
|
-
);
|
|
335
|
-
this.#recuo = setTimeout(() => {
|
|
336
|
-
if (this.#encerrado) return;
|
|
337
|
-
// On an expired session, the client's `sessao()` already asks for another one.
|
|
338
|
-
this.#abrir().catch((erro: Error) =>
|
|
339
|
-
this.#mudar("reconectando", `falhou: ${erro.message}`),
|
|
340
|
-
);
|
|
341
|
-
}, espera);
|
|
342
|
-
this.#recuo.unref?.();
|
|
452
|
+
return false;
|
|
343
453
|
}
|
|
344
454
|
|
|
345
|
-
/**
|
|
455
|
+
/**
|
|
456
|
+
* Clears the timers of a live connection (heartbeat, silence watch, attempt
|
|
457
|
+
* deadline), so a closed gateway leaves no handles behind.
|
|
458
|
+
*
|
|
459
|
+
* The backoff timer is not touched here: it belongs to {@link #esperarRecuo},
|
|
460
|
+
* which is woken by {@link fechar}.
|
|
461
|
+
*/
|
|
346
462
|
#limpar(): void {
|
|
347
463
|
if (this.#batida) clearInterval(this.#batida);
|
|
348
464
|
if (this.#vigia) clearTimeout(this.#vigia);
|
|
349
|
-
if (this.#
|
|
465
|
+
if (this.#prazo) clearTimeout(this.#prazo);
|
|
350
466
|
this.#batida = null;
|
|
351
467
|
this.#vigia = null;
|
|
352
|
-
this.#
|
|
468
|
+
this.#prazo = null;
|
|
353
469
|
}
|
|
354
470
|
}
|
|
471
|
+
|
|
472
|
+
/**
|
|
473
|
+
* Turns any thrown value into a printable message.
|
|
474
|
+
*
|
|
475
|
+
* @param erro Value thrown or rejected.
|
|
476
|
+
* @returns `erro.message` for `Error`s, `String(erro)` otherwise.
|
|
477
|
+
*/
|
|
478
|
+
const mensagemDe = (erro: unknown): string =>
|
|
479
|
+
erro instanceof Error ? erro.message : String(erro);
|
package/src/index.ts
CHANGED
package/src/tipos.ts
CHANGED
|
@@ -99,6 +99,12 @@ export interface PreviaDeLink {
|
|
|
99
99
|
site: string;
|
|
100
100
|
}
|
|
101
101
|
|
|
102
|
+
/** Voice room someone is in, as reported by the server. */
|
|
103
|
+
export interface SalaDeVoz {
|
|
104
|
+
code: string;
|
|
105
|
+
nome: string;
|
|
106
|
+
}
|
|
107
|
+
|
|
102
108
|
/** A message, as delivered by `message.created` and returned by the send routes. */
|
|
103
109
|
export interface Mensagem {
|
|
104
110
|
/** Message id, unique inside the channel. */
|
|
@@ -111,6 +117,12 @@ export interface Mensagem {
|
|
|
111
117
|
autorId?: string | null;
|
|
112
118
|
/** `true` when the author is a bot — this one included. */
|
|
113
119
|
autorBot: boolean;
|
|
120
|
+
/**
|
|
121
|
+
* Voice room the author was in when the message was sent (`null` = not in
|
|
122
|
+
* voice). Only on `message.created`/`mention` — it is a snapshot, so it is
|
|
123
|
+
* absent from the history.
|
|
124
|
+
*/
|
|
125
|
+
autorVoz?: SalaDeVoz | null;
|
|
114
126
|
/** Kind of payload the message carries. */
|
|
115
127
|
tipo?: "texto" | "arquivo" | "voz";
|
|
116
128
|
/** Text content; `null` for attachments without a caption. */
|