Add /ops command
It's pretty awkward with large channels since NAMES isn't sorted by prefixes or anything... But having it accumulate names across many replies would require more reworking.master
parent
dce6c11cf6
commit
3e67bf6557
|
@ -1,4 +1,4 @@
|
||||||
.Dd September 6, 2020
|
.Dd September 30, 2020
|
||||||
.Dt CATGIRL 1
|
.Dt CATGIRL 1
|
||||||
.Os
|
.Os
|
||||||
.
|
.
|
||||||
|
@ -292,6 +292,8 @@ Change nicknames.
|
||||||
Send a notice.
|
Send a notice.
|
||||||
.It Ic /ns Ar command
|
.It Ic /ns Ar command
|
||||||
Send a command to NickServ.
|
Send a command to NickServ.
|
||||||
|
.It Ic /ops
|
||||||
|
List channel operators.
|
||||||
.It Ic /part Op Ar message
|
.It Ic /part Op Ar message
|
||||||
Leave the channel.
|
Leave the channel.
|
||||||
.It Ic /query Ar nick
|
.It Ic /query Ar nick
|
||||||
|
|
1
chat.h
1
chat.h
|
@ -246,6 +246,7 @@ extern struct Replies {
|
||||||
uint list;
|
uint list;
|
||||||
uint mode;
|
uint mode;
|
||||||
uint names;
|
uint names;
|
||||||
|
uint ops;
|
||||||
uint topic;
|
uint topic;
|
||||||
uint whois;
|
uint whois;
|
||||||
} replies;
|
} replies;
|
||||||
|
|
|
@ -174,6 +174,12 @@ static void commandNames(uint id, char *params) {
|
||||||
replies.names++;
|
replies.names++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void commandOps(uint id, char *params) {
|
||||||
|
(void)params;
|
||||||
|
ircFormat("NAMES %s\r\n", idNames[id]);
|
||||||
|
replies.ops++;
|
||||||
|
}
|
||||||
|
|
||||||
static void commandInvite(uint id, char *params) {
|
static void commandInvite(uint id, char *params) {
|
||||||
if (!params) return;
|
if (!params) return;
|
||||||
char *nick = strsep(¶ms, " ");
|
char *nick = strsep(¶ms, " ");
|
||||||
|
@ -468,6 +474,7 @@ static const struct Handler {
|
||||||
{ "/o", commandOpen, Restricted },
|
{ "/o", commandOpen, Restricted },
|
||||||
{ "/op", commandOp, 0 },
|
{ "/op", commandOp, 0 },
|
||||||
{ "/open", commandOpen, Restricted },
|
{ "/open", commandOpen, Restricted },
|
||||||
|
{ "/ops", commandOps, 0 },
|
||||||
{ "/part", commandPart, 0 },
|
{ "/part", commandPart, 0 },
|
||||||
{ "/query", commandQuery, Restricted },
|
{ "/query", commandQuery, Restricted },
|
||||||
{ "/quit", commandQuit, 0 },
|
{ "/quit", commandQuit, 0 },
|
||||||
|
|
14
handle.c
14
handle.c
|
@ -499,20 +499,26 @@ static void handleReplyNames(struct Message *msg) {
|
||||||
char *user = strsep(&name, "@");
|
char *user = strsep(&name, "@");
|
||||||
enum Color color = (user ? hash(user) : Default);
|
enum Color color = (user ? hash(user) : Default);
|
||||||
completeAdd(id, nick, color);
|
completeAdd(id, nick, color);
|
||||||
if (!replies.names) continue;
|
if (replies.ops && (prefixes == nick || prefixes[0] == '+')) continue;
|
||||||
|
if (!replies.ops && !replies.names) continue;
|
||||||
catf(&cat, "%s\3%02d%s\3", (buf[0] ? ", " : ""), color, prefixes);
|
catf(&cat, "%s\3%02d%s\3", (buf[0] ? ", " : ""), color, prefixes);
|
||||||
}
|
}
|
||||||
if (!replies.names) return;
|
if (!cat.len) return;
|
||||||
uiFormat(
|
uiFormat(
|
||||||
id, Cold, tagTime(msg),
|
id, Cold, tagTime(msg),
|
||||||
"In \3%02d%s\3 are %s",
|
"%s \3%02d%s\3 are %s",
|
||||||
|
(replies.ops ? "The operators of" : "In"),
|
||||||
hash(msg->params[2]), msg->params[2], buf
|
hash(msg->params[2]), msg->params[2], buf
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handleReplyEndOfNames(struct Message *msg) {
|
static void handleReplyEndOfNames(struct Message *msg) {
|
||||||
(void)msg;
|
(void)msg;
|
||||||
if (replies.names) replies.names--;
|
if (replies.ops) {
|
||||||
|
replies.ops--;
|
||||||
|
} else if (replies.names) {
|
||||||
|
replies.names--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handleReplyNoTopic(struct Message *msg) {
|
static void handleReplyNoTopic(struct Message *msg) {
|
||||||
|
|
Loading…
Reference in New Issue