/* IRCParser.c - NeonServ v5.3
- * Copyright (C) 2011 Philipp Kreil (pk910)
+ * Copyright (C) 2011-2012 Philipp Kreil (pk910)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
int keep_channel = 1;
if(isUserOnChan(target, chan) && (chan->flags & CHANFLAG_RECEIVED_USERLIST)) {
if(user == NULL) {
- user = createTempUser(from);
+ user = createTempUserMask(from);
+ if(!user) return 0;
user->flags |= USERFLAG_ISTMPUSER;
}
struct ChanUser *chanuser = getChanUser(target, chan);
if(chan == NULL) return 0;
if(chan->chanbot != client->user) return 1; //just ignore it to prevent event duplicates
if(user == NULL) {
- user = createTempUser(from);
+ user = createTempUserMask(from);
+ if(!user) return 0;
user->flags |= USERFLAG_ISTMPUSER;
}
event_topic(user, chan, argv[1]);
if(from == NULL || argc < 2) return 0;
struct UserNode *user = getUserByMask(from);
if(user == NULL) {
- user = createTempUser(from);
+ user = createTempUserMask(from);
+ if(!user) return 0;
user->flags |= USERFLAG_ISTMPUSER;
}
if(!stricmp(user->nick, "*status") && !match("Disconnected from IRC.*", argv[1])) {
if(from == NULL || argc < 2) return 0;
struct UserNode *user = getUserByMask(from);
if(user == NULL) {
- user = createTempUser(from);
+ user = createTempUserMask(from);
+ if(!user) return 0;
user->flags |= USERFLAG_ISTMPUSER;
}
if(argv[0][0] == '#') { //Channel notice
if(from == NULL || argc < 2) return 0;
struct UserNode *user = getUserByMask(from);
if(user == NULL) {
- user = createTempUser(from);
+ user = createTempUserMask(from);
+ if(!user) return 0;
user->flags |= USERFLAG_ISTMPUSER;
}
event_invite(client, user, argv[1]);
if(from == NULL || argc < 2) return 0;
struct UserNode *user = getUserByMask(from);
if(user == NULL) {
- user = createTempUser(from);
+ user = createTempUserMask(from);
+ if(!user) return 0;
user->flags |= USERFLAG_ISTMPUSER;
}
if(argv[0][0] == '#') {
struct ChanNode *chan = getChanByName(argv[0]);
if(!chan) return 0;
if(chan->chanbot != client->user) return 1;
- event_mode(user, chan, argv[1], argv+2, argc-2);
parseModes(chan->modes, argv[1], argv+2, argc-2);
+ event_mode(user, chan, argv[1], argv+2, argc-2);
} else {
//UserMode
}
for(i = start; i < end; i++) {
p = argv[i];
while(*p) p++;
- *p = seperator;
+ if(i < end-1) {
+ while(p != argv[i+1]) {
+ *p++ = seperator;
+ }
+ } else
+ *p = seperator;
}
if(p) *p = '\0';
return argv[start];