+static IRC_CMD(raw_topic) {
+ if(from == NULL || argc < 2) return 0;
+ struct UserNode *user = getUserByMask(from);
+ struct ChanNode *chan = getChanByName(argv[0]);
+ 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->flags |= USERFLAG_ISTMPUSER;
+ }
+ event_topic(user, chan, argv[1]);
+ strcpy(chan->topic, argv[1]);
+ return 1;
+}
+
+static IRC_CMD(raw_privmsg) {
+ 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] == '#') { //Channel message
+ struct ChanNode *chan = getChanByName(argv[0]);
+ if(chan && chan->chanbot == client->user) {
+ if(argv[1][0] == '\001') {
+ char *cmd = &argv[1][1];
+ char *text = strstr(cmd, " ");
+ if(text) {
+ *text = '\0';
+ text++;
+ if(strlen(text) && text[strlen(text)-1] == '\001')
+ text[strlen(text)-1] = '\0';
+ } else if(strlen(cmd) && cmd[strlen(cmd)-1] == '\001')
+ cmd[strlen(cmd)-1] = '\0';
+ event_chanctcp(user, chan, cmd, text);
+ } else
+ event_chanmsg(user, chan, argv[1]);
+ }
+ } else {
+ struct UserNode *target = getUserByNick(argv[0]);
+ if(target) {
+ if(argv[1][0] == '\001') {
+ char *cmd = &argv[1][1];
+ char *text = strstr(cmd, " ");
+ if(text) {
+ *text = '\0';
+ text++;
+ if(strlen(text) && text[strlen(text)-1] == '\001')
+ text[strlen(text)-1] = '\0';
+ } else if(strlen(cmd) && cmd[strlen(cmd)-1] == '\001')
+ cmd[strlen(cmd)-1] = '\0';
+ event_privctcp(user, target, cmd, text);
+ } else
+ event_privmsg(user, target, argv[1]);
+ }
+ }
+ return 1;
+}
+
+static IRC_CMD(raw_notice) {
+ 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] == '#') { //Channel notice
+ struct ChanNode *chan = getChanByName(argv[0]);
+ if(chan && chan->chanbot == client->user)
+ event_channotice(user, chan, argv[1]);
+ } else {
+ struct UserNode *target = getUserByNick(argv[0]);
+ if(target)
+ event_privnotice(user, target, argv[1]);
+ }
+ return 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;
+}
+