Switch back to checking for server by nick with '.'

This fixes a bug where if you send a private message before joining any
channels, your message will be routed to the <network> window. That
happens because without a JOIN, self.user remains unset, which means
that require will copy self.nick (set by echoMessage) to self.host. The
easiest solution is to go back to checking for '.' and add a '.' to the
default nick, so now if a server sends a NOTICE with no origin it will
look like -*.*- which is kinda cute.
master
C. McEnroe 2020-09-18 18:13:09 -04:00
parent b2de129e3f
commit 2b8a45779d
1 changed files with 2 additions and 2 deletions

View File

@ -76,7 +76,7 @@ static const char *capList(enum Cap caps) {
static void require(struct Message *msg, bool origin, uint len) { static void require(struct Message *msg, bool origin, uint len) {
if (origin) { if (origin) {
if (!msg->nick) msg->nick = "*"; if (!msg->nick) msg->nick = "*.*";
if (!msg->user) msg->user = msg->nick; if (!msg->user) msg->user = msg->nick;
if (!msg->host) msg->host = msg->user; if (!msg->host) msg->host = msg->user;
} }
@ -1114,7 +1114,7 @@ static const char *colorMentions(uint id, struct Message *msg) {
static void handlePrivmsg(struct Message *msg) { static void handlePrivmsg(struct Message *msg) {
require(msg, true, 2); require(msg, true, 2);
bool query = !strchr(network.chanTypes, msg->params[0][0]); bool query = !strchr(network.chanTypes, msg->params[0][0]);
bool server = (msg->host == msg->nick); bool server = strchr(msg->nick, '.');
bool mine = !strcmp(msg->nick, self.nick); bool mine = !strcmp(msg->nick, self.nick);
uint id; uint id;
if (query && server) { if (query && server) {