📄 irc.c
字号:
free(nk); return(1);} I_IRC_FUNC(h332){ chans_t *cur = findchan(chanl, tok[3]); int i; if (!cur) return(1); cur->topic = strdup(str+strlen(tok[0])+strlen(tok[1])+strlen(tok[2])+strlen(tok[3])+5); for (i=0;cur->topic[i];i++) { if (cur->topic[i] < 26) { strncpy(cur->topic+i, cur->topic+i+1, strlen(cur->topic+i+1)); cur->topic[strlen(cur->topic)-1] = 0; } } wp(win, "%s* Topic for %s: %s%s\n", YELLOW, cur->nm, cur->topic, WHITE); drw(win); return(1);}I_IRC_FUNC(h333){ wp(win, "%s* Topic for %s set by %s%s\n", YELLOW, tok[3], tok[4], WHITE); drw(win); return(1);}I_IRC_FUNC(htopic){ chans_t *cur = findchan(chanl, tok[2]); char *nk = gnick(tok[0]+1); int i; if (!cur) { free(nk); return(1); } if (cur->topic) free(cur->topic); cur->topic = strdup(str+strlen(tok[0])+strlen(tok[1])+strlen(tok[2])+4); for (i=0;cur->topic[i];i++) { if (cur->topic[i] < 26) { strncpy(cur->topic+i, cur->topic+i+1, strlen(cur->topic+i+1)); cur->topic[strlen(cur->topic)-1] = 0; } } if (!strlen(cur->topic)) { free(cur->topic); cur->topic = NULL; } else cur->topic = (char *)realloc(cur->topic, strlen(cur->topic)+1); recent = cur; if (!cur->topic) wp(win, "%s* %s has unset the topic of %s%s\n", YELLOW, nk, cur->nm, WHITE); else wp(win, "%s* %s changed the topic of %s: %s%s\n", YELLOW, nk, cur->nm, cur->topic, WHITE); drw(win); if (curchan == recent) tind = 0; recent = NULL; free(nk); return(1);}I_IRC_FUNC(h311){ wp(win, "%s _________________%s\n", DARK, WHITE); wp(win, "%s|%s User: %s\n", DARK, WHITE, tok[3]); wp(win, "%s|%s IRC name: %s\n", DARK, WHITE, str+strlen(tok[0])+strlen(tok[1])+strlen(tok[2])+strlen(tok[3])+strlen(tok[4])+strlen(tok[5])+strlen(tok[6])+8); wp(win, "%s|%s Address: %s@%s\n", DARK, WHITE, tok[4], tok[5]); drw(win); return(1);}I_IRC_FUNC(h319){ wp(win, "%s|%s Channels: %s\n", DARK, WHITE, str+strlen(tok[0])+strlen(tok[1])+strlen(tok[2])+strlen(tok[3])+5); drw(win); return(1);}I_IRC_FUNC(h312){ wp(win, "%s|%s Server: %s (%s)\n", DARK, WHITE, tok[4], str+strlen(tok[0])+strlen(tok[1])+strlen(tok[2])+strlen(tok[3])+strlen(tok[4])+6); drw(win); return(1);}I_IRC_FUNC(h313){ wp(win, "%s|%s Class: %s\n", DARK, WHITE, cstr(str, 4)+1); drw(win); return(1);}I_IRC_FUNC(h317){ int hr, min, sec, t; t = atoi(tok[4]); min = t/60; hr = min/60; sec = t%60; while (min >= 60) min-=60; wp(win, "%s|%s Idle: %i h %i m %i s\n", DARK, WHITE, hr, min, sec); drw(win); return(1);}I_IRC_FUNC(h367){ time_t t; char *tm; t = strtoul(tok[6], (char **)NULL, 10); tm = ctime(&t); tm[strlen(tm)-1] = 0; wp(win, "%s* Banned: %s by %s at %s%s\n", BRIGHT(BLUE), tok[4], tok[5], tm, WHITE); drw(win); return(1);}I_IRC_FUNC(hmode){ int i, j, m=0, l; user_t *cur; chans_t *c = findchan(chanl, tok[2]); char *nk = gnick(tok[0]+1), *pt = strdup(str+strlen(tok[0])+strlen(tok[1])+strlen(tok[2])+3); if (pt[strlen(pt)-1] == ' ') pt[strlen(pt)-1] = 0; recent = c; if (!strcasecmp(tok[2], mnick)) wp(win, "%s* %s sets mode [%s%s%s]%s\n", BRIGHT(YELLOW), nk, WHITE, pt+1, BRIGHT(YELLOW), WHITE); else wp(win, "%s* %s sets mode %s [%s%s%s]%s\n", BRIGHT(YELLOW), nk, tok[2], WHITE, pt, BRIGHT(YELLOW), WHITE); free(pt); drw(win); recent = NULL; if (!c) { free(nk); return(1); } l = strlen(tok[3]); for (i=0,j=4;i<l;i++) { if (tok[3][i] == '+') m = '+'; else if (tok[3][i] == '-') m = '-'; else if (tok[3][i] == 'o') { if (m == '+') { cur = finduser(c, tok[j]); if (cur) cur->flag |= NAP_OP; } else if (m == '-') { cur = finduser(c, tok[j]); if (cur) cur->flag &= ~NAP_OP; } j++; } else if (tok[3][i] == 'v') { if (m == '+') { cur = finduser(c, tok[j]); if (cur) cur->flag |= NAP_VOICE; } else if (m == '-') { cur = finduser(c, tok[j]); if (cur) cur->flag &= ~NAP_VOICE; } j++; } else if (tok[3][i] == 'b') j++; else if (tok[3][i] == 'i') { if (m == '+') c->flag |= NAP_I; else if (m == '-') c->flag &= ~NAP_I; } else if (tok[3][i] == 's') { if (m == '+') c->flag |= NAP_S; else if (m == '-') c->flag &= ~NAP_S; } else if (tok[3][i] == 'p') { if (m == '+') c->flag |= NAP_P; else if (m == '-') c->flag &= ~NAP_P; } else if (tok[3][i] == 't') { if (m == '+') c->flag |= NAP_T; else if (m == '-') c->flag &= ~NAP_T; } else if (tok[3][i] == 'm') { if (m == '+') c->flag |= NAP_M; else if (m == '-') c->flag &= ~NAP_M; } else if (tok[3][i] == 'n') { if (m == '+') c->flag |= NAP_N; else if (m == '-') c->flag &= ~NAP_N; } else if (tok[3][i] == 'k') { if (m == '+') { c->flag |= NAP_K; c->key = strdup(tok[j]); } else if (m == '-') { c->flag &= ~NAP_K; free(c->key); c->key = NULL; } j++; } else if (tok[3][i] == 'l') { if (m == '+') { c->flag |= NAP_L; c->l = atoi(tok[j]); j++; } else if (m == '-') { c->flag &= ~NAP_L; c->l = 0; } } } free(nk); return(1);}I_IRC_FUNC(h324){ int i, j, m=0, l; chans_t *c = findchan(chanl, tok[3]); char *pt = strdup(str+strlen(tok[0])+strlen(tok[1])+strlen(tok[2])+strlen(tok[3])+4); if (pt[strlen(pt)-1] == ' ') pt[strlen(pt)-1] = 0; if (!c) return(1); l = strlen(tok[4]); for (i=0,j=5;i<l;i++) { if (tok[4][i] == '+') m = '+'; else if (tok[4][i] == '-') m = '-'; else if (tok[4][i] == 'i') { if (m == '+') c->flag |= NAP_I; else if (m == '-') c->flag &= ~NAP_I; } else if (tok[4][i] == 's') { if (m == '+') c->flag |= NAP_S; else if (m == '-') c->flag &= ~NAP_S; } else if (tok[4][i] == 'p') { if (m == '+') c->flag |= NAP_P; else if (m == '-') c->flag &= ~NAP_P; } else if (tok[4][i] == 't') { if (m == '+') c->flag |= NAP_T; else if (m == '-') c->flag &= ~NAP_T; } else if (tok[4][i] == 'm') { if (m == '+') c->flag |= NAP_M; else if (m == '-') c->flag &= ~NAP_M; } else if (tok[4][i] == 'n') { if (m == '+') c->flag |= NAP_N; else if (m == '-') c->flag &= ~NAP_N; } else if (tok[4][i] == 'k') { if (m == '+') { c->flag |= NAP_K; c->key = strdup(tok[j]); } else if (m == '-') { c->flag &= ~NAP_K; free(c->key); c->key = NULL; } j++; } else if (tok[4][i] == 'l') { if (m == '+') { c->flag |= NAP_L; c->l = atoi(tok[j]); j++; } else if (m == '-') { c->flag &= ~NAP_L; c->l = 0; } } } return(1);}I_IRC_FUNC(hkick){ char *nk = gnick(tok[0]+1); chans_t *pt = findchan(chanl, tok[2]); recent = pt; wp(win, "%s* %s was kicked from %s by %s (%s%s%s)%s\n", GREEN, tok[3], tok[2], nk, WHITE, str+strlen(tok[0])+strlen(tok[1])+strlen(tok[2])+strlen(tok[3])+5, GREEN, WHITE); drw(win); recent = NULL; if (strcasecmp(tok[3], mnick) != 0) { deluser(pt, tok[3]); free(nk); return(1); } delchan(pt); drw(win); free(nk); return(1);}I_IRC_FUNC(hprivmsg){ char *nk = gnick(tok[0]+1), *msg = strdup(str+strlen(tok[0])+strlen(tok[1])+strlen(tok[2])+4), *req, *pt, *nm=NULL; chans_t *cur = findchan(chanl, tok[2]); sock_t *sk; recent = cur; if (*msg != 1 && strcasecmp(tok[2], mnick)) { if (curchan && (!strcasecmp(curchan->nm, tok[2]) || wmode)) wp(win, "%s<%s%s%s>%s %s\n", BRIGHT(BLUE), WHITE, nk, BRIGHT(BLUE), WHITE, msg); else wp(win, "%s<%s%s%s:%s%s%s>%s %s\n", BLUE, WHITE, nk, DARK, WHITE, tok[2], BLUE, WHITE, msg); drw(win); recent = NULL; free(msg); free(nk); return(1); } else if (*msg != 1) { wp(win, "%s* [%s%s%s(%s%s%s)]%s %s\n", BRIGHT(GREEN), WHITE, nk, BRIGHT(GREEN), WHITE, tok[0]+strlen(nk)+2, BRIGHT(GREEN), WHITE, msg); drw(win); free(msg); free(nk); return(1); } if (msg[strlen(msg)-1] == 1) msg[strlen(msg)-1] = 0; if (!strcasecmp(tok[3]+2, "ACTION")) { pt = strdup(msg+strlen(tok[3])); if (pt[strlen(pt)-1] == 1) pt[strlen(pt)-1] = 0; if (!strcasecmp(curchan->nm, tok[2]) || wmode) { wp(win, "%s* %s%s %s\n", CYAN, nk, WHITE, pt); drw(win); } else { wp(win, "%s* %s%s/%s%s%s %s\n", CYAN, nk, WHITE, CYAN, tok[2], WHITE, pt); drw(win); } recent = NULL; free(pt); free(msg); free(nk); return(1); } else if (!strcasecmp(tok[3]+2, "DCC") && tok[4] && !strcasecmp(tok[4], "CHAT") && tok[5] && tok[6] && tok[7]) { msprintf(&nm, "pending %s", nk); sk = addsock(-1, nm, 0, NULL); sk->dxx = NULL; msprintf(&sk->dxx, "%s %s", tok[6], tok[7]); wp(win, "%s* %s has requested a DCC chat%s\n", BRIGHT(CYAN), nk, WHITE); drw(win); free(nm); free(msg); free(nk); return(1); } req = strdup(tok[3]+2); if (req[strlen(req)-1] == 1) req[strlen(req)-1] = 0; wp(win, "%s* CTCP request %s from %s (%s) to %s%s\n", CYAN, req, nk, tok[0]+strlen(nk)+2, tok[2], WHITE); drw(win); if (!strcasecmp(req, "VERSION")) ssock(s, "NOTICE %s :\001VERSION nap v%s\001\n", nk, VERSION); else if (!strcasecmp(req, "PING")) ssock(s, "NOTICE %s :%s\001\n", nk, msg); recent = NULL; free(msg); free(req); free(nk); return(1);}I_IRC_FUNC(hnotice){ char *nk = gnick(tok[0]+1), *msg = strdup(str+strlen(tok[0])+strlen(tok[1])+strlen(tok[2])+4); chans_t *cur = findchan(chanl, tok[2]); if (!strcasecmp(tok[1], "AUTH") || !strcasecmp(tok[1], mnick)) { wp(win, "%s%s%s\n", MAGENTA, str+strlen(tok[0])+strlen(tok[1])+3, WHITE); drw(win); free(msg); free(nk); return(1); } recent = cur; if (*msg != 1 && strcasecmp(tok[2], mnick)) { if (curchan && (!strcasecmp(curchan->nm, tok[2]) || wmode)) wp(win, "%s*%s*%s %s\n", MAGENTA, nk, WHITE, msg); else wp(win, "%s*%s%s/%s%s*%s %s\n", MAGENTA, nk, WHITE, MAGENTA, tok[2], WHITE, msg); drw(win); recent = NULL; free(msg); free(nk); return(1); } else if (*msg != 1) { wp(win, "%s* [%s%s%s(%s%s%s)]%s %s\n", MAGENTA, WHITE, nk, MAGENTA, WHITE, tok[0]+strlen(nk)+2, MAGENTA, WHITE, msg); drw(win); free(msg); free(nk); return(1); } if (msg[strlen(msg)-1] == 1) msg[strlen(msg)-1] = 0; wp(win, "%s* CTCP reply from %s (%s):%s %s\n", CYAN, nk, tok[0]+strlen(nk)+2, WHITE, msg+strlen(tok[3])); drw(win); recent = NULL; free(msg); free(nk); return(1);}I_IRC_FUNC(h376){ ircin = 1; if (mnick) free(mnick); mnick = strdup(tok[2]); return(1);}I_IRC_FUNC(h352){ chans_t *c = findchan(chanl, tok[3]); user_t *cur; if (!nwho) { recent = c; wp(win, "%s _________________%s\n", DARK, WHITE); wp(win, "%s|%s User: %s\n", DARK, WHITE, tok[7]); wp(win, "%s|%s IRC name: %s\n", DARK, WHITE, str+strlen(tok[0])+strlen(tok[1])+strlen(tok[2])+strlen(tok[3])+strlen(tok[4])+strlen(tok[5])+strlen(tok[6])+strlen(tok[7])+strlen(tok[8])+strlen(tok[9])+10); wp(win, "%s|%s Address: %s@%s\n", DARK, WHITE, tok[4], tok[5]); if (*tok[3] != '*') { if (tok[8][1] == '@') wp(win, "%s|%s Channel: @%s\n", DARK, WHITE, tok[3]); else if (tok[8][1] == '+') wp(win, "%s|%s Channel: +%s\n", DARK, WHITE, tok[3]); else wp(win, "%s|%s Channel: %s\n", DARK, WHITE, tok[3]); } wp(win, "%s|%s Server: %s\n", DARK, WHITE, tok[6]); drw(win); recent = NULL; return(1); } if (!c) return(1); cur = finduser(c, tok[7]); if (!cur) return(1); msprintf(&cur->addr, "%s@%s", tok[4], tok[5]); return(1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -