privmsg support, thanks Evil_Bob! - irc - Unnamed repository; edit this file 'description' to name the repository.
(HTM) git clone git://vernunftzentrum.de/irc.git
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
---
(DIR) commit 1d3c109eb02c514ecedda65cd1bda5256ef0c6c2
(DIR) parent 48569cdb36dd1a71f3221390b8f25e2ec62fecd7
(HTM) Author: Quentin Carbonneaux <quentin.carbonneaux@yale.edu>
Date: Wed, 18 Jan 2017 15:12:44 -0500
privmsg support, thanks Evil_Bob!
Diffstat:
irc.c | 23 +++++++++++++++++------
1 file changed, 17 insertions(+), 6 deletions(-)
---
(DIR) diff --git a/irc.c b/irc.c
@@ -238,7 +238,7 @@ dial(const char *host, const char *service)
}
static int
-chadd(char *name)
+chadd(char *name, int change)
{
if (nch >= MaxChans || strlen(name) >= ChanLen)
return -1;
@@ -249,7 +249,9 @@ chadd(char *name)
panic("Out of memory.");
chl[nch].eol = chl[nch].buf;
chl[nch].n = 0;
- ch = nch++;
+ if (change)
+ ch = nch;
+ nch++;
tdrawbar();
return nch;
}
@@ -376,7 +378,7 @@ static void
scmd(char *usr, char *cmd, char *par, char *data)
{
int s, c;
- char *pm = strtok(par, " ");
+ char *pm = strtok(par, " "), *chan;
if (!usr)
usr = "?";
@@ -388,7 +390,16 @@ scmd(char *usr, char *cmd, char *par, char *data)
if (!strcmp(cmd, "PRIVMSG")) {
if (!pm || !data)
return;
- c = chfind(pm);
+ if (strchr("&#!+.~", pm[0]))
+ chan = pm;
+ else
+ chan = usr;
+ if (!(c = chfind(chan))) {
+ if (chadd(chan, 0) < 0)
+ return;
+ tredraw();
+ }
+ c = chfind(chan);
if (strcasestr(data, nick)) {
pushf(c, PFMTHIGH, usr, data);
chl[c].high |= ch != c;
@@ -453,7 +464,7 @@ uparse(char *m)
p += 1 + (p[1] == ' ');
p = strtok(p, " ");
while (p) {
- if (chadd(p) < 0)
+ if (chadd(p, 1) < 0)
break;
sndf("JOIN %s", p);
p = strtok(0, " ");
@@ -783,7 +794,7 @@ main(int argc, char *argv[])
user = "anonymous";
tinit();
sfd = dial(server, port);
- chadd("*server*");
+ chadd("*server*", 1);
sndf("NICK %s", nick);
sndf("USER %s 8 * :%s", user, user);
sndf("MODE %s +i", nick);