Skip to content

Commit 8c01af9

Browse files
committed
Update irc-framework types
- Adding more events to use for Ergo
1 parent dd66f60 commit 8c01af9

2 files changed

Lines changed: 144 additions & 88 deletions

File tree

src/app/types/modules/irc-framework/irc-framework.d.ts

Lines changed: 142 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ declare module 'irc-framework' {
107107
*/
108108
who(
109109
target: string,
110-
cb: (event: { target: string; users: WhoListEventArgs['users'] }) => void,
110+
cb: (event: { target: string; users: WhoListEvent['users'] }) => void,
111111
): void;
112112

113113
list(/* params: Array<string> */): void;
@@ -128,54 +128,97 @@ declare module 'irc-framework' {
128128

129129
stringToBlocks(str: string, block_size?: number): string[];
130130

131+
// Reference: https://github.com/kiwiirc/irc-framework/blob/master/docs/events.md
131132
on(eventType: string | symbol, cb: (event: unknown) => void): this;
132133

133-
on(eventType: 'raw', cb: (event: RawEventArgs) => void): this;
134-
135-
on(eventType: 'join', cb: (event: JoinEventArgs) => void): this;
136-
137-
on(eventType: 'userlist', cb: (event: UserListEventArgs) => void): this;
138-
139-
on(eventType: 'monitorList', cb: (event: MonitorListEventArgs) => void): this;
140-
on(eventType: 'whois', cb: (event: WhoIsEventArgs) => void): this;
141-
on(eventType: 'whowas', cb: (event: WhoWasEventArgs) => void): this;
142-
143-
on(eventType: 'registered', cb: (event: RegisteredEventArgs) => void): this;
144-
on(eventType: 'connected', cb: (event: RegisteredEventArgs) => void): this;
134+
// Registration
135+
on(eventType: 'registered', cb: (event: RegisteredEvent) => void): this;
136+
on(eventType: 'connected', cb: (event: RegisteredEvent) => void): this;
145137
on(eventType: 'connecting', cb: () => void): this;
146138
on(
147139
eventType: 'reconnecting',
148140
cb: (event: { attempt: number; max_retries: number; wait: number }) => void,
149141
): this;
150-
151-
on(eventType: 'quit', cb: (event: QuitEventArgs) => void): this;
152-
on(eventType: 'part', cb: (event: QuitEventArgs) => void): this;
153-
on(eventType: 'kick', cb: (event: KickEventArgs) => void): this;
154-
155-
on(eventType: 'away', cb: (event: AwayEventArgs) => void): this;
156-
on(eventType: 'back', cb: (event: BackEventArgs) => void): this;
157-
158-
on(eventType: 'message', cb: (event: MessageEventArgs) => void): this;
159-
on(eventType: 'privmsg', cb: (event: MessageEventArgs<'privmsg'>) => void): this;
160-
on(eventType: 'notice', cb: (event: MessageEventArgs<'notice'>) => void): this;
161-
on(eventType: 'action', cb: (event: MessageEventArgs<'action'>) => void): this;
162-
163-
on(eventType: 'mode', cb: (event: ModeEventArgs) => void): this;
164-
142+
on(eventType: 'close', cb: () => void): this;
165143
on(eventType: 'socket close', cb: (event: Error | false) => void): this;
166-
167144
on(eventType: 'socket connected', cb: () => void): this;
168-
169145
on(eventType: 'raw socket connected', cb: () => void): this;
170-
171146
on(eventType: 'server options', cb: (event: ServerOptionsEventArgs) => void): this;
172147

148+
// Raw connection and debugging
149+
on(eventType: 'raw', cb: (event: RawEventArgs) => void): this;
150+
on(eventType: 'unknown command', cb: (event: IrcCommand) => void): this;
173151
on(eventType: 'debug', cb: (message: string) => void): this;
174152

153+
// Channels
154+
on(eventType: 'channel info', cb: (event: unknown) => void): this;
155+
on(eventType: 'channel list start', cb: () => void): this;
156+
on(eventType: 'channel list', cb: (event: unknown[]) => void): this;
157+
on(eventType: 'channel list end', cb: () => void): this;
158+
on(eventType: 'wholist', cb: (event: WhoListEvent) => void): this;
159+
on(eventType: 'userlist', cb: (event: UserListEventArgs) => void): this;
160+
on(eventType: 'invitelist', cb: (event: unknown) => void): this;
161+
on(eventType: 'banlist', cb: (event: BanlistEventArgs) => void): this;
162+
on(eventType: 'exceptlist', cb: (event: unknown) => void): this;
163+
on(eventType: 'topic', cb: (event: unknown) => void): this;
164+
on(eventType: 'topicsetby', cb: (event: unknown) => void): this;
165+
on(eventType: 'join', cb: (event: JoinEvent) => void): this;
166+
on(eventType: 'part', cb: (event: PartEvent) => void): this;
167+
on(eventType: 'kick', cb: (event: KickEvent) => void): this;
168+
on(eventType: 'quit', cb: (event: QuitEvent) => void): this;
169+
on(eventType: 'invited', cb: (event: unknown) => void): this;
170+
171+
// Messaging
172+
on(eventType: 'message', cb: (event: MessageEventArgs) => void): this;
173+
on(eventType: 'notice', cb: (event: MessageEvent) => void): this;
174+
on(eventType: 'action', cb: (event: MessageEvent) => void): this;
175+
on(eventType: 'privmsg', cb: (event: MessageEvent) => void): this;
176+
on(eventType: 'tagmsg', cb: (event: TagMessageEvent) => void): this;
177+
on(eventType: 'ctcp response', cb: (event: unknown) => void): this;
178+
on(eventType: 'ctcp request', cb: (event: unknown) => void): this;
179+
on(eventType: 'wallops', cb: (event: unknown) => void): this;
180+
181+
// Users
182+
on(eventType: 'nick', cb: (event: unknown) => void): this;
183+
on(eventType: 'account', cb: (event: unknown) => void): this;
184+
on(eventType: 'user info', cb: (event: unknown) => void): this;
185+
on(eventType: 'away', cb: (event: AwayEvent) => void): this;
186+
on(eventType: 'back', cb: (event: BackEvent) => void): this;
187+
on(eventType: 'monitorList', cb: (event: MonitorListEventArgs) => void): this;
175188
on(eventType: 'nick in use', cb: (event: NickInUseEventArgs) => void): this;
176-
177189
on(eventType: 'nick invalid', cb: (event: NickInvalidEventArgs) => void): this;
190+
on(eventType: 'users online', cb: (event: unknown) => void): this;
191+
on(eventType: 'users offline', cb: (event: unknown) => void): this;
192+
on(eventType: 'whois', cb: (event: WhoIsEventArgs) => void): this;
193+
on(eventType: 'whowas', cb: (event: WhoWasEventArgs) => void): this;
194+
on(eventType: 'user updated', cb: (event: unknown) => void): this;
195+
196+
// Misc
197+
on(eventType: 'motd', cb: (event: unknown) => void): this;
198+
on(eventType: 'info', cb: (event: unknown) => void): this;
199+
on(eventType: 'help', cb: (event: unknown) => void): this;
200+
on(eventType: 'batch start', cb: (event: unknown) => void): this;
201+
on<BatchType extends string>(
202+
eventType: `batch start ${BatchType}`,
203+
cb: (event: unknown) => void,
204+
): this;
205+
on(eventType: 'batch end', cb: (event: unknown) => void): this;
206+
on<BatchType extends string>(
207+
eventType: `batch end ${BatchType}`,
208+
cb: (event: unknown) => void,
209+
): this;
210+
on(
211+
eventType: `cap ${'ls' | 'ack' | 'nak' | 'list' | 'new' | 'del'}`,
212+
cb: (event: unknown) => void,
213+
): this;
214+
215+
// SASL
216+
on(eventType: 'loggedin', cb: (event: unknown) => void): this;
217+
on(eventType: 'loggedout', cb: (event: unknown) => void): this;
218+
on(eventType: 'sasl failed', cb: (event: unknown) => void): this;
178219

220+
// Undocumented
221+
on(eventType: 'mode', cb: (event: ModeEvent) => void): this;
179222
on(eventType: 'irc error', cb: (event: IrcErrorEventArgs) => void): this;
180223
}
181224
export class NetworkInfo {
@@ -202,7 +245,7 @@ declare module 'irc-framework' {
202245
extractTargetGroup(target: string): null | { target: string; target_group: string };
203246
}
204247
export class IrcMessage {
205-
tags: Record<string, string>;
248+
tags: Tags;
206249
prefix: string;
207250
nick: string;
208251
ident: string;
@@ -221,50 +264,57 @@ declare module 'irc-framework' {
221264
};
222265
}
223266

224-
export interface MessageEventArgs<
225-
Type extends 'privmsg' | 'action' | 'notice' = 'privmsg' | 'action' | 'notice',
226-
> {
227-
account?: string;
228-
group?: string;
229-
hostname: string;
230-
ident: string;
231-
message: string;
267+
type Tags = Partial<Record<string, string | boolean>> &
268+
Partial<{
269+
account: string;
270+
batch: string;
271+
msgid: string;
272+
time: string;
273+
}>;
274+
275+
interface MessageEvent {
276+
from_server: boolean;
232277
nick: string;
233-
reply: (message: string) => void;
234-
tags: { [key: string]: string };
278+
ident: string;
279+
hostname: string;
235280
target: string;
281+
group?: string;
282+
message: string;
283+
tags: Tags;
236284
time?: number;
237-
type: Type;
238-
}
239-
export interface JoinEventArgs {
240-
account: string;
285+
account?: string;
286+
batch?: string;
287+
reply(message: string): void;
288+
}
289+
export type MessageEventArgs =
290+
| (MessageEvent & { type: 'privmsg' })
291+
| (MessageEvent & { type: 'action' })
292+
| (MessageEvent & { type: 'notice' });
293+
294+
export type TagMessageEvent = Pick<
295+
MessageEvent,
296+
'from_server' | 'nick' | 'ident' | 'hostname' | 'target' | 'tags' | 'time' | 'account' | 'batch'
297+
>;
298+
299+
export interface JoinEvent extends Pick<
300+
MessageEvent,
301+
'nick' | 'ident' | 'hostname' | 'message' | 'time' | 'tags' | 'account' | 'batch'
302+
> {
241303
channel: string;
242304
gecos: string;
243-
hostname: string;
244-
ident: string;
245-
nick: string;
246-
time?: number;
247305
}
248-
export interface AwayEventArgs {
306+
export interface AwayEvent extends Pick<MessageEvent, 'nick' | 'message' | 'time' | 'tags'> {
249307
self: boolean;
250-
nick: string;
251-
message: string;
252-
time: number;
253308
}
254-
export interface BackEventArgs {
255-
self: boolean;
256-
nick: string;
257-
message: string;
258-
time: number;
309+
export interface BackEvent extends AwayEvent {
310+
message: '';
259311
}
260-
export interface KickEventArgs {
261-
kicked: string;
262-
nick: string;
263-
ident: string;
264-
hostname: string;
265-
channel: string;
266-
message: string;
267-
time: number;
312+
class IrcCommand implements Pick<MessageEvent, 'tags' | 'nick' | 'ident' | 'hostname'> {
313+
command: string;
314+
params: string[];
315+
prefix: string;
316+
getTag<Tag extends string>(tag_name: Tag): Tags[Tag];
317+
getServerTime(): number | undefined;
268318
}
269319
export interface RawEventArgs {
270320
from_server: boolean;
@@ -307,27 +357,36 @@ declare module 'irc-framework' {
307357
error: string;
308358
whowas: Array<{ nick: string; ident: string; hostname: string; real_name: string }>[];
309359
}
310-
export interface RegisteredEventArgs {
360+
export interface RegisteredEvent {
311361
nick: string;
312362
}
313-
export interface QuitEventArgs {
314-
hostname: string;
315-
ident: string;
316-
message: string;
317-
nick: string;
318-
time?: number;
363+
export interface PartEvent extends Pick<
364+
MessageEvent,
365+
'nick' | 'ident' | 'hostname' | 'message' | 'time'
366+
> {
367+
channel: string;
368+
}
369+
export interface KickEvent extends Pick<
370+
MessageEvent,
371+
'nick' | 'ident' | 'hostname' | 'message' | 'time'
372+
> {
373+
kicked: string;
374+
channel: string;
319375
}
376+
export type QuitEvent = Pick<MessageEvent, 'nick' | 'ident' | 'hostname' | 'message' | 'time'>;
377+
320378
interface Mode {
321379
mode: string;
322-
param: string;
380+
param: string | null;
323381
}
324-
export interface ModeEventArgs {
382+
export interface ModeEvent extends Pick<
383+
MessageEvent,
384+
'target' | 'nick' | 'time' | 'tags' | 'batch'
385+
> {
325386
modes: Mode[];
326-
nick: string;
387+
327388
raw_modes: string;
328389
raw_params: string[];
329-
target: string;
330-
time?: number;
331390
}
332391
export interface ServerOptionsEventArgs {
333392
options: Record<string, unknown>;
@@ -420,7 +479,7 @@ declare module 'irc-framework' {
420479
users: IrcChannelUser[];
421480
tags: Record<string, string>;
422481
}
423-
export interface WhoListEventArgs {
482+
export interface WhoListEvent {
424483
target: string;
425484
users: User[];
426485
tags: Record<string, string>;
@@ -447,7 +506,8 @@ declare module 'irc-framework' {
447506
when?: number;
448507
}
449508
interface ClientConstructorParameters {
450-
host: string; // host?: (?)
509+
host: string;
510+
port?: string;
451511
nick?: string;
452512
username?: string;
453513
gecos?: string;

src/stores/irc.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,13 @@ const useIrcStore = defineStore('irc', () => {
6767

6868
const ircClient = new Client({
6969
host: import.meta.env.VITE_APP_SERVER_URL!,
70+
port: import.meta.env.VITE_APP_SERVER_PORT!,
7071
ssl: import.meta.env.VITE_APP_SSL === 'true',
7172
nick,
7273
username: uid,
7374
gecos: username,
7475
transport: CustomConnection,
76+
enable_echomessage: true,
7577
auto_reconnect_max_retries: 10,
7678
auto_reconnect_max_wait: 300_000,
7779
})
@@ -106,12 +108,6 @@ const useIrcStore = defineStore('irc', () => {
106108
connectionStatus.value = 'reconnect failed';
107109
reconnectionStatus.isReconnecting = false;
108110
})
109-
.on('batch start chathistory', (event) => {
110-
log.debug('BATCH (start):', event);
111-
})
112-
.on('batch end chathistory', (event) => {
113-
log.debug('BATCH (end) :', event);
114-
})
115111
.on('raw', (event) => {
116112
if (event.from_server) {
117113
log.debug(

0 commit comments

Comments
 (0)