@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 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. Token girado, bot desativado ou outra conexão assumindo o
78
- mesmo bot **não** reconectam: `bot.estado` vira `recusado` e o erro fica em
79
- `bot.ultimoErro`.
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, eventos
163
- node testes/voz.mjs # dois bots na voz: ICE + DTLS fechados, track recebida
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":"AAEA,OAAO,EAAE,SAAS,EAAQ,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAW,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,KAAK,EACV,YAAY,EAEZ,UAAU,EACV,WAAW,EACX,OAAO,EACP,QAAQ,EACR,QAAQ,EAET,MAAM,YAAY,CAAC;AAKpB,gDAAgD;AAChD,MAAM,WAAW,WAAW;IAC1B,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uFAAuF;IACvF,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC;IACrB,8CAA8C;IAC9C,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAED,2DAA2D;AAC3D,MAAM,WAAW,iBAAiB;IAChC,8CAA8C;IAC9C,QAAQ,EAAE,QAAQ,CAAC;IACnB,kEAAkE;IAClE,KAAK,EAAE,YAAY,CAAC;IACpB,kEAAkE;IAClE,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5C,yEAAyE;IACzE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAcD,+CAA+C;AAC/C,KAAK,OAAO,CAAC,CAAC,SAAS,MAAM,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpF;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,GAAG;;IAYd,wEAAwE;gBAC5D,MAAM,EAAE,WAAW;IAM/B,oEAAoE;IACpE,IAAI,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,IAAI,CAElC;IAED,mEAAmE;IACnE,IAAI,MAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,IAAI,CAExC;IAED,uEAAuE;IACvE,IAAI,UAAU,IAAI,WAAW,EAAE,CAE9B;IAED,wFAAwF;IACxF,IAAI,MAAM,IAAI,eAAe,GAAG,QAAQ,CAEvC;IAED;;;;;;;;OAQG;IACH,aAAa,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,GAAG,IAAI;IAK/D,sFAAsF;IACtF,IAAI,UAAU,IAAI,KAAK,GAAG,IAAI,CAE7B;IAED;;;;;;OAMG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA+C5B;;;;;;OAMG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,IAAI;IAK7D,2DAA2D;IACrD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B;;;;;;OAMG;IACH,EAAE,CAAC,CAAC,SAAS,MAAM,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;IAM/D;;;;;;OAMG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;IA4BhE;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,OAAO,CACL,IAAI,EAAE,MAAM,EACZ,UAAU,EACN;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GACzC,CAAC,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAC3D,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAC/D,IAAI;IAmCP,+EAA+E;IAC/E,IAAI,QAAQ,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAIrD;IAsDD;;;;;;;;;;OAUG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAIvD;;;;;;;;;OASG;IACH,SAAS,CACP,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,UAAU,EACjB,MAAM,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAO,GAC5C,OAAO,CAAC,QAAQ,CAAC;IASpB;;;;;;;;;OASG;IACH,aAAa,CACX,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,UAAU,EACpB,MAAM,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAO,GAC5C,OAAO,CAAC,QAAQ,CAAC;IASpB;;;;;;;OAOG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;;;;;IAOzC;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD;;;;;OAKG;IACG,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC;CAIxC;AAED,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -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
- const canal = this.#descoberta?.canais.texto.find((c) => c.code === mensagem.sala);
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 && (c.canais.length === 0 || c.canais.includes(canal.code)));
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(canal.code, resposta),
290
- apagar: () => this.#http.apagar(canal.code, mensagem.id, this.#sessao?.sessao),
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
  }
@@ -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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"}
@@ -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 socket cannot open.
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;AAgBpE;;;;;;;;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;;IAYN,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;;;;;OAKG;IACH,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAoHzB;;;;;;;;;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;CA6GtD"}
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"}
@@ -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 socket cannot open.
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
- return this.#abrir();
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 the first dispatched event — in practice `ready` — and rejects
60
- * if the socket fails before that.
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 falhar = (erro) => {
158
+ const concluir = (erro) => {
69
159
  if (concluido)
70
160
  return;
71
161
  concluido = true;
72
- rejeitar(erro);
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
- falhar(erro instanceof Error ? erro : new Error(String(erro)));
175
+ concluir(erro instanceof Error ? erro : new Error(String(erro)));
80
176
  return;
81
177
  }
82
178
  this.#ws = ws;
83
- ws.addEventListener("error", () => falhar(new Error("não consegui abrir o gateway")));
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
- this.#aoFechar(evento.code, evento.reason);
103
- if (this.#encerrado)
104
- falhar(new Error("gateway encerrado"));
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
- this.#ws = null;
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
- * Decides what to do when the socket closes: come back or stop for good.
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
- this.#tentativa += 1;
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
- /** Clears every timer, so a closed gateway leaves no handles behind. */
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.#recuo)
293
- clearTimeout(this.#recuo);
417
+ if (this.#prazo)
418
+ clearTimeout(this.#prazo);
294
419
  this.#batida = null;
295
420
  this.#vigia = null;
296
- this.#recuo = null;
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
@@ -1 +1 @@
1
- {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/gateway.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/gateway.ts"],"names":[],"mappings":"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"}
@@ -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";
@@ -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"}
@@ -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;AAkB9C,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"}
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"}
@@ -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. */
@@ -1 +1 @@
1
- {"version":3,"file":"tipos.d.ts","sourceRoot":"","sources":["../../src/tipos.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tipos.d.ts","sourceRoot":"","sources":["../../src/tipos.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openvertice/bot-sdk",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "SDK para escrever bots do Vértice: gateway, mensagens e voz (WebRTC), sem dependência de runtime",
5
5
  "type": "module",
6
6
  "main": "./dist/src/index.js",
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
- const canal = this.#descoberta?.canais.texto.find((c) => c.code === mensagem.sala);
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) => c.nome === nome && (c.canais.length === 0 || c.canais.includes(canal.code)),
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(canal.code, resposta),
364
- apagar: () => this.#http.apagar(canal.code, mensagem.id, this.#sessao?.sessao),
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 socket cannot open.
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
- return this.#abrir();
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 the first dispatched event — in practice `ready` — and rejects
115
- * if the socket fails before that.
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 falhar = (erro: Error) => {
210
+ const concluir = (erro?: Error) => {
124
211
  if (concluido) return;
125
212
  concluido = true;
126
- rejeitar(erro);
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
- falhar(erro instanceof Error ? erro : new Error(String(erro)));
223
+ concluir(erro instanceof Error ? erro : new Error(String(erro)));
133
224
  return;
134
225
  }
135
226
  this.#ws = ws;
136
227
 
137
- ws.addEventListener("error", () =>
138
- falhar(new Error("não consegui abrir o gateway")),
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
- this.#aoFechar(evento.code, evento.reason);
157
- if (this.#encerrado) falhar(new Error("gateway encerrado"));
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
- this.#ws = null;
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
- * Decides what to do when the socket closes: come back or stop for good.
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): void {
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
- this.#tentativa += 1;
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
- /** Clears every timer, so a closed gateway leaves no handles behind. */
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.#recuo) clearTimeout(this.#recuo);
465
+ if (this.#prazo) clearTimeout(this.#prazo);
350
466
  this.#batida = null;
351
467
  this.#vigia = null;
352
- this.#recuo = null;
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
@@ -21,6 +21,7 @@ export type {
21
21
  Mensagem,
22
22
  PeerDaVoz,
23
23
  PreviaDeLink,
24
+ SalaDeVoz,
24
25
  ServidorIce,
25
26
  Sessao,
26
27
  SinalDeVoz,
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. */