#undef MODE_VALUE_INDEX
}
+static void parseModesUserPriv(struct ChanNode* chan, unsigned char flag, int add, char *nick) {
+ struct UserNode *user = getUserByNick(nick);
+ if(user == NULL) return;
+ struct ChanUser *chanuser = getChanUser(user, chan);
+ if(chanuser == NULL) return;
+ if(add)
+ chanuser->flags |= flag;
+ else
+ chanuser->flags &= ~flag;
+}
+
+static void parseModesBan(struct ChanNode* chan, int add, char *mask) {
+ //to be continued...
+}
+
void parseModes(struct ChanNode* chan, char *modeStr, char **argv, int argc) {
int i, argpos = 0, add = 1;
#define MODE_TYPE (modeOpt[2] & CHANNEL_MODE_TYPE)
modeOpt = getModeOptions(modeStr[i]);
if(!modeOpt) continue; // unknown mode?
if(MODE_TYPE == CHANNEL_MODE_TYPE_A) {
+ if(argpos == argc) continue;
//special mode ;)
+ switch(modeStr[i]) {
+ case 'o':
+ parseModesUserPriv(chan, CHANUSERFLAG_OPPED, add, argv[argc]);
+ break;
+ case 'v':
+ parseModesUserPriv(chan, CHANUSERFLAG_VOICED, add, argv[argc]);
+ break;
+ case 'b':
+ parseModesBan(chan, add, argv[argc]);
+ break;
+ default:
+ //we have an unknown TYPE_A mode???
+ break;
+ }
+ argc++;
continue;
}
if(add) {