FILE *fp;
fp = popen(command, "r");
if (fp) {
- char *a;
- while (fgets(command, 1024, fp) != NULL) {
- if((a = strchr(command, '\n')))
- *a = '\0';
- if(answere_channel) {
- putsock(client, "PRIVMSG %s :%s", chan->name, command);
- } else
- reply(getTextBot(), user, "%s", command);
+ struct ClientSocket *textbot = getTextBot();
+ pid_t pID = fork();
+ if (pID == 0) { //We're the child process :D
+ char *a;
+ while (fgets(command, 1024, fp) != NULL) {
+ if((a = strchr(command, '\n')))
+ *a = '\0';
+ if(answere_channel)
+ putsock(client, "PRIVMSG %s :%s", chan->name, command);
+ else
+ reply(textbot, user, "%s", command);
+ }
+ pclose(fp);
+ exit(0);
+ } else if (pID < 0) {
+ reply(getTextBot(), user, "internal bot error - please contact an administrator!");
+ pclose(fp);
+ } else {
+ //parent bot - continue program
}
- pclose(fp);
} else {
//error
reply(getTextBot(), user, "internal bot error - please contact an administrator!");
static void neonspam_event_chanmsg(struct UserNode *user, struct ChanNode *chan, char *message) {
struct ClientSocket *client = getChannelBot(chan, BOTID);
- if(!client) return; //we can't "see" this event
+ if(!client || (user->flags & USERFLAG_ISBOT)) return; //we can't "see" this event
loadNeonSpamSettings(chan);
struct NeonSpamSettings *settings = chan->spam_settings;
struct ChanUser *chanuser = getChanUser(user, chan);