]> PatchyGit - patchyircd.git/commitdiff
add nick list
authorEgor <egor@patchysicp.xyz>
Mon, 2 May 2022 17:17:30 +0000 (20:17 +0300)
committerEgor <egor@patchysicp.xyz>
Mon, 2 May 2022 17:17:30 +0000 (20:17 +0300)
irc.c

diff --git a/irc.c b/irc.c
index 98fc751..1b461a6 100644 (file)
--- 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; i<CLIENTS; i++)
+                       if(clients[i] && clients[i]->nick[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; i<CLIENTS; i++)
+                       if(clients[i] && clients[i]->nick[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);