/* @COMPILECMD ../unity.sh */ #define _GNU_SOURCE #include #include #include #include #define SERVER "irc.rizon.net" #define PORT 6667 #define CHANNEL "#/g/chad" #define USERNAME "probotic" #define ERR(ret,msg) do { fputs(msg "\n", stderr); return ret; } while (0) irc_session_t * session; irc_callbacks_t callbacks; char * get_username(const char * origin) { const char USERNAME_TERMINATOR = '!'; int i = 0; char * r; while (origin[i] != USERNAME_TERMINATOR) { i++; } r = (char *) malloc(i + 1); strncpy(r, origin, i); r[i] = '\00'; return r; } void msg_wrapper(const char* fmt, ...) { va_list args; char * fmtdmsg; va_start(args, fmt); if(vasprintf(&fmtdmsg, fmt, args) == -1) { exit(1); } puts(fmtdmsg); irc_cmd_msg(session, CHANNEL, fmtdmsg); free(fmtdmsg); va_end(args); } void event_connect(irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count) { irc_cmd_join(session, CHANNEL, 0); } void event_channel(irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count) { const char * channel = params[0]; const char * message = params[1]; char * swp = get_username(origin); msg_wrapper("%s, you are a faggot for this opinion.", swp); free(swp); } int init(void) { memset(&callbacks, 0, sizeof(callbacks)); callbacks.event_connect = event_connect; callbacks.event_channel = event_channel; session = irc_create_session(&callbacks); if (!session) { ERR(1, "Error creating IRC session"); } irc_connect(session, SERVER, PORT, 0, USERNAME, USERNAME, USERNAME); if (irc_run(session) != 0) { ERR(1, "Error running IRC session\nNo net?"); } return 0; } int main(int argc, char ** argv) { if(!init()) { while(1) {} irc_destroy_session(session); return 0; } else { return 1; } }