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.weechat-hashes
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