about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2020-03-29 12:43:53 -0400
committerJune McEnroe <june@causal.agency>2020-03-29 12:43:53 -0400
commitebbb5ad4d20f7d68134f236f6dbd7e00251579bd (patch)
treebedc8494b82fce734c580017e2676115079523c1
parentRewrite mode formatting again and write to log (diff)
downloadcatgirl-ebbb5ad4d20f7d68134f236f6dbd7e00251579bd.tar.gz
catgirl-ebbb5ad4d20f7d68134f236f6dbd7e00251579bd.zip
Add /op, /deop, /voice, /devoice
This collides with using /o for /open which I'm sad about, but I think
these commands should exist...
-rw-r--r--catgirl.110
-rw-r--r--command.c24
2 files changed, 33 insertions, 1 deletions
diff --git a/catgirl.1 b/catgirl.1
index 501163c..286d4f9 100644
--- a/catgirl.1
+++ b/catgirl.1
@@ -1,4 +1,4 @@
-.Dd March 25, 2020
+.Dd March 29, 2020
 .Dt CATGIRL 1
 .Os
 .
@@ -330,6 +330,10 @@ Switch to window by number.
 .Bl -tag -width Ds
 .It Ic /ban Op Ar mask ...
 List or ban masks from the channel.
+.It Ic /deop Ar nick ...
+Revoke channel operator status from users.
+.It Ic /devoice Ar nick ...
+Revoke voice from users in the channel.
 .It Ic /except Op Ar mask ...
 List or add masks to the channel ban exception list.
 .It Ic /invex Op Ar mask ...
@@ -342,12 +346,16 @@ In the
 .Sy <network>
 window,
 show or set user modes.
+.It Ic /op Ar nick ...
+Grant users channel operator status.
 .It Ic /unban Ar mask ...
 Unban masks from the channel.
 .It Ic /unexcept Ar mask ...
 Remove masks from the channel ban exception list.
 .It Ic /uninvex Ar mask ...
 Remove masks from the channel invite list.
+.It Ic /voice Ar nick ...
+Grant users voice in the channel.
 .El
 .
 .Sh KEY BINDINGS
diff --git a/command.c b/command.c
index 7339574..4779a6a 100644
--- a/command.c
+++ b/command.c
@@ -206,6 +206,26 @@ static void channelListMode(uint id, char pm, char l, char *params) {
 	ircFormat("MODE %s %c%.*s %s\r\n", idNames[id], pm, count, modes, params);
 }
 
+static void commandOp(uint id, char *params) {
+	if (!params) return;
+	channelListMode(id, '+', 'o', params);
+}
+
+static void commandDeop(uint id, char *params) {
+	if (!params) return;
+	channelListMode(id, '-', 'o', params);
+}
+
+static void commandVoice(uint id, char *params) {
+	if (!params) return;
+	channelListMode(id, '+', 'v', params);
+}
+
+static void commandDevoice(uint id, char *params) {
+	if (!params) return;
+	channelListMode(id, '-', 'v', params);
+}
+
 static void commandBan(uint id, char *params) {
 	if (params) {
 		channelListMode(id, '+', 'b', params);
@@ -379,6 +399,8 @@ static const struct Handler {
 	{ "/copy", commandCopy, Restricted },
 	{ "/cs", commandCS, 0 },
 	{ "/debug", commandDebug, Restricted },
+	{ "/deop", commandDeop, 0 },
+	{ "/devoice", commandDevoice, 0 },
 	{ "/except", commandExcept, 0 },
 	{ "/exec", commandExec, Multiline | Restricted },
 	{ "/help", commandHelp, 0 },
@@ -395,6 +417,7 @@ static const struct Handler {
 	{ "/nick", commandNick, 0 },
 	{ "/notice", commandNotice, Multiline },
 	{ "/ns", commandNS, 0 },
+	{ "/op", commandOp, 0 },
 	{ "/open", commandOpen, Restricted },
 	{ "/part", commandPart, 0 },
 	{ "/query", commandQuery, Restricted },
@@ -405,6 +428,7 @@ static const struct Handler {
 	{ "/unban", commandUnban, 0 },
 	{ "/unexcept", commandUnexcept, 0 },
 	{ "/uninvex", commandUninvex, 0 },
+	{ "/voice", commandVoice, 0 },
 	{ "/whois", commandWhois, 0 },
 	{ "/window", commandWindow, 0 },
 };