+static IRC_CMD(raw_324) { //MODE LIST
+ //Watchcat #pktest +stnzN
+ if(from == NULL || argc < 3) return 0;
+ struct ChanNode *chan = getChanByName(argv[1]);
+ if(chan == NULL) return 0;
+ parseModes(chan->modes, argv[2], argv+3, argc-3);
+ return 1;
+}
+
+static IRC_CMD(raw_invite) {
+ if(from == NULL || argc < 2) return 0;
+ struct UserNode *user = getUserByMask(from);
+ if(user == NULL) {
+ user = createTempUser(from);
+ user->flags |= USERFLAG_ISTMPUSER;
+ }
+ event_invite(client, user, argv[1]);
+ return 1;
+}
+
+static IRC_CMD(raw_mode) {
+ if(from == NULL || argc < 2) return 0;
+ struct UserNode *user = getUserByMask(from);
+ if(user == NULL) {
+ user = createTempUser(from);
+ user->flags |= USERFLAG_ISTMPUSER;
+ }
+ if(argv[0][0] == '#') {
+ //ChannelMode
+ 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);
+ } else {
+ //UserMode
+ }
+ return 1;
+}
+
+static IRC_CMD(raw_367) {
+ //Watchcat #pktest pk911!*@* TestBot!~bot@pktest.user.WebGamesNet 1315863279
+ struct ChanNode *chan = getChanByName(argv[1]);
+ if(!chan) return 0;
+ struct BanNode *ban;
+ while((ban = getMatchingChannelBan(chan, argv[2]))) {
+ removeChannelBan(ban);
+ }
+ addChannelBan(chan, argv[2]);
+ return 1;
+}
+
+void init_parser() {