Track own host, handle CHGHOST
parent
ccde1c2c8c
commit
eb6316c235
|
@ -560,6 +560,13 @@ join = #ascii.town
|
||||||
.Re
|
.Re
|
||||||
.It
|
.It
|
||||||
.Rs
|
.Rs
|
||||||
|
.%A Christine Dodrill
|
||||||
|
.%T IRCv3.2 chghost Extension
|
||||||
|
.%I IRCv3 Working Group
|
||||||
|
.%U https://ircv3.net/specs/extensions/chghost-3.2
|
||||||
|
.Re
|
||||||
|
.It
|
||||||
|
.Rs
|
||||||
.%A Daniel Oaks
|
.%A Daniel Oaks
|
||||||
.%T IRC Formatting
|
.%T IRC Formatting
|
||||||
.%I ircdocs
|
.%I ircdocs
|
||||||
|
|
2
chat.h
2
chat.h
|
@ -97,6 +97,7 @@ extern struct Network {
|
||||||
|
|
||||||
#define ENUM_CAP \
|
#define ENUM_CAP \
|
||||||
X("causal.agency/consumer", CapConsumer) \
|
X("causal.agency/consumer", CapConsumer) \
|
||||||
|
X("chghost", CapChghost) \
|
||||||
X("extended-join", CapExtendedJoin) \
|
X("extended-join", CapExtendedJoin) \
|
||||||
X("invite-notify", CapInviteNotify) \
|
X("invite-notify", CapInviteNotify) \
|
||||||
X("multi-prefix", CapMultiPrefix) \
|
X("multi-prefix", CapMultiPrefix) \
|
||||||
|
@ -119,6 +120,7 @@ extern struct Self {
|
||||||
char *join;
|
char *join;
|
||||||
char *nick;
|
char *nick;
|
||||||
char *user;
|
char *user;
|
||||||
|
char *host;
|
||||||
enum Color color;
|
enum Color color;
|
||||||
char *quit;
|
char *quit;
|
||||||
} self;
|
} self;
|
||||||
|
|
18
handle.c
18
handle.c
|
@ -280,10 +280,13 @@ static void handleJoin(struct Message *msg) {
|
||||||
require(msg, true, 1);
|
require(msg, true, 1);
|
||||||
uint id = idFor(msg->params[0]);
|
uint id = idFor(msg->params[0]);
|
||||||
if (!strcmp(msg->nick, self.nick)) {
|
if (!strcmp(msg->nick, self.nick)) {
|
||||||
if (!self.user) {
|
if (!self.user || strcmp(self.user, msg->user)) {
|
||||||
set(&self.user, msg->user);
|
set(&self.user, msg->user);
|
||||||
self.color = hash(msg->user);
|
self.color = hash(msg->user);
|
||||||
}
|
}
|
||||||
|
if (!self.host || strcmp(self.host, msg->host)) {
|
||||||
|
set(&self.host, msg->host);
|
||||||
|
}
|
||||||
idColors[id] = hash(msg->params[0]);
|
idColors[id] = hash(msg->params[0]);
|
||||||
completeTouch(None, msg->params[0], idColors[id]);
|
completeTouch(None, msg->params[0], idColors[id]);
|
||||||
if (replies.join) {
|
if (replies.join) {
|
||||||
|
@ -306,6 +309,18 @@ static void handleJoin(struct Message *msg) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void handleChghost(struct Message *msg) {
|
||||||
|
require(msg, true, 2);
|
||||||
|
if (strcmp(msg->nick, self.nick)) return;
|
||||||
|
if (!self.user || strcmp(self.user, msg->params[0])) {
|
||||||
|
set(&self.user, msg->params[0]);
|
||||||
|
self.color = hash(msg->params[0]);
|
||||||
|
}
|
||||||
|
if (!self.host || strcmp(self.host, msg->params[1])) {
|
||||||
|
set(&self.host, msg->params[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void handlePart(struct Message *msg) {
|
static void handlePart(struct Message *msg) {
|
||||||
require(msg, true, 1);
|
require(msg, true, 1);
|
||||||
uint id = idFor(msg->params[0]);
|
uint id = idFor(msg->params[0]);
|
||||||
|
@ -1076,6 +1091,7 @@ static const struct Handler {
|
||||||
{ "906", handleErrorSASLFail },
|
{ "906", handleErrorSASLFail },
|
||||||
{ "AUTHENTICATE", handleAuthenticate },
|
{ "AUTHENTICATE", handleAuthenticate },
|
||||||
{ "CAP", handleCap },
|
{ "CAP", handleCap },
|
||||||
|
{ "CHGHOST", handleChghost },
|
||||||
{ "ERROR", handleError },
|
{ "ERROR", handleError },
|
||||||
{ "INVITE", handleInvite },
|
{ "INVITE", handleInvite },
|
||||||
{ "JOIN", handleJoin },
|
{ "JOIN", handleJoin },
|
||||||
|
|
Loading…
Reference in New Issue