From 3bacc8fa14cc617c7298a74e44cc27d4cc54d2c1 Mon Sep 17 00:00:00 2001 From: Test_User Date: Fri, 31 May 2024 18:51:08 -0400 Subject: Don't respond to channels that it's not in --- .gitignore | 1 + server_network.c | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/.gitignore b/.gitignore index b5805e2..8c4fba9 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ config.c haxserv core .makeopts +output diff --git a/server_network.c b/server_network.c index d75b494..6d63c5f 100644 --- a/server_network.c +++ b/server_network.c @@ -700,6 +700,13 @@ int privmsg_handler(struct string sender, uint64_t argc, struct string *argv) { if (argv[1].len < command_prefix.len || memcmp(argv[1].data, command_prefix.data, command_prefix.len) != 0) return 0; + struct channel_info *channel_info = get_table_index(channel_list, argv[0]); + if (!channel_info) + return 0; + + if (!has_table_index(channel_info->user_list, STRING("1HC000000"))) + return 0; + offset = command_prefix.len; } else if (STRING_EQ(argv[0], STRING("1HC000000"))) { offset = 0; @@ -940,7 +947,23 @@ int initservernetwork(void) { if (add_local_client(STRING("1HC000000"), nick, hostmask, nick, nick, current_time, 0) != 0) return 1; + struct user_info *user_info = get_table_index(user_list, STRING("1HC000000")); + for (uint64_t i = 0; i < num_prejoin_channels; i++) { + struct channel_info *channel; + channel = malloc(sizeof(*channel)); + if (!channel) + return 1; + *channel = (struct channel_info){ + .ts = (uint64_t)current_time, + .topic = {.data = malloc(0), .len = 0}, + .topic_ts = 0, + .modes = {.array = malloc(0), .len = 0}, + .user_list = {.array = malloc(0), .len = 0}, + .metadata = {.array = malloc(0), .len = 0}, + }; + set_table_index(&channel_list, prejoin_channels[i], channel); + set_table_index(&(channel->user_list), STRING("1HC000000"), user_info); SEND(STRING("FJOIN ")); SEND(prejoin_channels[i]); SEND(STRING(" ")); -- cgit v1.2.3