From b2a600797840f7414071b6baf843461e89660c93 Mon Sep 17 00:00:00 2001 From: Egor Date: Mon, 2 May 2022 20:17:30 +0300 Subject: [PATCH] add nick list --- irc.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/irc.c b/irc.c index 98fc751..1b461a6 100644 --- a/irc.c +++ b/irc.c @@ -49,6 +49,16 @@ int processPacket(struct client_data *client) { // End GitHub Copilot send_log(client->FD, databuf.buf, databuf.len, 0); sendall_log(client->FD, databuf.buf, databuf.len, 0); + *strchr(packet, '\n') = '\0'; + for(int i=0; inick[0]) { + databuf.len = 0; + append_strf(&databuf, ":irc.patchysicp.xyz 353 %s = %s :%s\n", client->nick, packet+5+(packet[5]==':'), clients[i]->nick); + send_log(client->FD, databuf.buf, databuf.len, 0); + } + databuf.len = 0; + append_strf(&databuf, ":irc.patchysicp.xyz 366 %s :End of /NAMES list\n", client->nick); + send_log(client->FD, databuf.buf, databuf.len, 0); } else if(strncmp(packet, "PRIVMSG ", 8) == 0) { append_str(&databuf, ":"); append_str(&databuf, client->nick); @@ -126,6 +136,7 @@ int processPacket(struct client_data *client) { goto unknown; } while (*p != ' ' && *p != '\n') { + databuf.len = 0; switch (*p) { case 'i': if (off) { @@ -148,6 +159,19 @@ int processPacket(struct client_data *client) { goto unknown; } } + } else if(strncmp(packet, "NAMES ", 6) == 0) { + // TODO: actual channel support + char *p = strchr(packet+6, '\n'); + *p = '\0'; + for(int i=0; inick[0]) { + databuf.len = 0; + append_strf(&databuf, ":irc.patchysicp.xyz 353 %s = %s :%s\n", client->nick, packet+6, clients[i]->nick); + send_log(client->FD, databuf.buf, databuf.len, 0); + } + databuf.len = 0; + append_strf(&databuf, ":irc.patchysicp.xyz 366 %s :End of /NAMES list\n", client->nick); + send_log(client->FD, databuf.buf, databuf.len, 0); } else { unknown: printf("Unknown packet: %s", packet); -- 2.56.0