static USERLIST_CALLBACK(got_channel_userlist) {
struct ChanUser *chanuser = data;
event_join(chanuser);
- putsock(client, "PRIVMSG %s :[BOT JOIN] Users on this Channel:", chan->name);
- for(chanuser = getChannelUsers(chan, NULL); chanuser; chanuser = getChannelUsers(chan, chanuser)) {
- putsock(client, "PRIVMSG %s : %s!%s@%s [%s] rights: %d", chan->name, chanuser->user->nick, chanuser->user->ident, chanuser->user->host, ((chanuser->user->flags & USERFLAG_ISAUTHED) ? chanuser->user->auth : "*"), chanuser->flags);
- }
}
static IRC_CMD(raw_001) {
client->flags |= SOCKET_FLAG_READY;
- putsock(client, "JOIN #pktest");
+ event_bot_ready(client);
return 1;
}
chan->chanbot = user;
struct ChanUser *chanuser = addChanUser(chan, user); //it must be a bot
get_userlist(chan, got_channel_userlist, chanuser);
+ putsock(client, "MODE %s", chan->name);
} else if(!isUserOnChan(user, chan) && (chan->flags & CHANFLAG_RECEIVED_USERLIST)) {
struct ChanUser *chanuser = addChanUser(chan, user);
event_join(chanuser);
text[strlen(text)-1] = '\0';
} else if(strlen(cmd) && cmd[strlen(cmd)-1] == '\001')
cmd[strlen(cmd)-1] = '\0';
- event_privctcp(user, chan, cmd, text);
+ event_privctcp(user, target, cmd, text);
} else
event_privmsg(user, target, argv[1]);
}
static IRC_CMD(raw_nick) {
if(from == NULL || argc == 0) return 0;
struct UserNode *user = getUserByMask(from);
+ if(user == NULL) return 0;
event_nick(user, argv[0]);
renameUser(user, argv[0]);
return 1;
return 1;
}
+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, 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);
return 1;
}
-void parser_init() {
+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, argv[1], argv+2, argc-2);
+ } else {
+ //UserMode
+ }
+ return 1;
+}
+
+void init_parser() {
//all the raws we receive...
register_irc_function("001", raw_001);
+ register_irc_function("324", raw_324);
register_irc_function("INVITE", raw_invite);
register_irc_function("NOTICE", raw_notice);
register_irc_function("TOPIC", raw_topic);
register_irc_function("PART", raw_part);
register_irc_function("QUIT", raw_quit);
register_irc_function("JOIN", raw_join);
+ register_irc_function("MODE", raw_mode);
register_irc_function("NICK", raw_nick);
register_irc_function("354", raw_354);
register_irc_function("315", raw_315);
register_irc_function("PING", raw_ping);
register_irc_function("PRIVMSG", raw_privmsg);
}
+
+void free_parser() {
+ struct irc_cmd *cmd, *next;
+ for(cmd = irc_commands; cmd; cmd = next) {
+ next = cmd->next;
+ free(cmd);
+ }
+}
+