about summary refs log tree commit diff
path: root/ircd.h
diff options
context:
space:
mode:
authorNakidai <nakidai@disroot.org>2026-01-10 16:32:54 +0300
committerNakidai <nakidai@disroot.org>2026-01-10 16:32:54 +0300
commit76e2c978829bc6ff7bfe6c49bfa3739e19370990 (patch)
tree07851d4ee5ca107ce4ec18889b20c006f56f53d3 /ircd.h
parent346abf24c900a19a77a8ce66566a7ffd86a819bb (diff)
downloadlibreircd-76e2c978829bc6ff7bfe6c49bfa3739e19370990.tar.gz
libreircd-76e2c978829bc6ff7bfe6c49bfa3739e19370990.zip
Add basic user mode handling
So, now there're all modes listed in RFC 2812. The only what they
do now, though, is a +r restricting user from changing their nick
Diffstat (limited to 'ircd.h')
-rw-r--r--ircd.h15
1 files changed, 12 insertions, 3 deletions
diff --git a/ircd.h b/ircd.h
index 6035b79..2c4b144 100644
--- a/ircd.h
+++ b/ircd.h
@@ -51,9 +51,17 @@ struct Peer
 		BIT(DELETE),
 		BIT(ANNOUNCE),
 	} flags;
+	enum PeerMode {
+		BIT(AWAY),
+		BIT(INVISIBLE),
+		BIT(WALLOPS),
+		BIT(RESTRICTED),
+		BIT(OPER),
+		BIT(LOCALOPER),
+		BIT(SNOTICE),
+	} modes;
 	char buf[MESSAGE_MAX];
 	size_t recvd, channels_c;
-	char modes[52];
 };
 
 struct Channel
@@ -75,10 +83,11 @@ extern struct Peer peers[PEERS_MAX];
 extern size_t channels_c, peers_c;
 extern const char *hostname;
 extern const char *host;
-extern int port;
+extern unsigned long port;
 
 const char *getnick(const struct Peer *peer);
-void user_reg(struct Peer *peer, const char *nick, const char *user, const char *real);
+enum PeerMode user_mode(char m);
+void user_reg(struct Peer *peer, const char *nick, const char *user, const char *real, const char *mode);
 void user_remove(size_t pid);
 
 int channel_join(struct Channel *channel, struct Peer *peer);