summary refs log tree commit diff
diff options
context:
space:
mode:
authorNakidai <nakidai@disroot.org>2026-02-13 00:58:28 +0300
committerNakidai <nakidai@disroot.org>2026-02-13 00:58:28 +0300
commitaf86909202cd4fba0417a27b03f9df00342fcfbd (patch)
tree6c36eb5cefe6784b01da7eefad771b3fe4ad5cc4
parentd493c4a9b9bb1db0da7418a0a2797c5f2b3d34ff (diff)
downloadlibreircd-af86909202cd4fba0417a27b03f9df00342fcfbd.tar.gz
libreircd-af86909202cd4fba0417a27b03f9df00342fcfbd.zip
Add sending topic on join
When user joins, it should get topic message
-rw-r--r--handle.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/handle.c b/handle.c
index 0be87a3..2fb54f0 100644
--- a/handle.c
+++ b/handle.c
@@ -28,11 +28,12 @@ static struct Oper opers[OPERS_MAX];
 size_t opers_c;
 
 static int names(struct Message *msg, struct Peer *peer);
+static int topic(struct Message *msg, struct Peer *peer);
 
 static int
 join(struct Message *msg, struct Peer *peer)
 {
-	struct Message namesmsg;
+	struct Message joinmsg;
 	size_t i;
 	char *cp;
 
@@ -52,16 +53,21 @@ join(struct Message *msg, struct Peer *peer)
 	for (i = 0; i < peer->channels_c; ++i)
 		ensure(strcmp(channels[i].name, msg->params[0]), (void)0, 0);
 
-	namesmsg = (struct Message){ .params = { msg->params[0] } };
+	joinmsg = (struct Message){ .params = { msg->params[0] } };
 	for (i = 0; i < channels_c; ++i)
 	{
 		if (strcmp(channels[i].name, msg->params[0]))
 			continue;
 
 		if (channel_join(&channels[i], peer))
+		{
 			reply(peer, 471);
+		}
 		else
-			names(&namesmsg, peer);
+		{
+			topic(&joinmsg, peer);
+			names(&joinmsg, peer);
+		}
 		return 0;
 	}
 
@@ -69,7 +75,8 @@ join(struct Message *msg, struct Peer *peer)
 	strlcpy(channels[channels_c].name, msg->params[0], sizeof(channels->name));
 	channel_join(&channels[channels_c], peer);
 	channels[channels_c++].peers[0].modes |= CHANNEL_OPER;
-	names(&namesmsg, peer);
+	topic(&joinmsg, peer);
+	names(&joinmsg, peer);
 	return 0;
 }