#include "module.h" #define AUTHOR "{x3d}" #define VERSION "Chan Log 1.6" int do_chanlog(User *u); int do_addchanlog1(User *u); int do_addchanlog2(User *u); int do_addchanlog3(User *u); int do_addchanlog4(User *u); int do_savechanlog(User *u,char *getchan, char *getcmd, char *getnick, char *getlevel); int do_listchanlog(User *u, char *chan); int check_access_for_chaccm(NickAlias * user, ChannelInfo * ci, int what); int exists(User *u, char *file, char *nick, int type); void rem_u(User *u, char *file, char *user, int form); int AnopeInit(int argc, char **argv) { Command *c; alog("Module: cs_chanlog.so LOADED."); c = createCommand("CHANLOG", do_chanlog, is_services_oper,-1,-1,-1,-1,-1); moduleAddCommand(CHANSERV, c, MOD_HEAD); c = createCommand("SOP", do_addchanlog1, NULL,-1,-1,-1,-1,-1); moduleAddCommand(CHANSERV, c, MOD_TAIL); c = createCommand("AOP", do_addchanlog2, NULL,-1,-1,-1,-1,-1); moduleAddCommand(CHANSERV, c, MOD_TAIL); c = createCommand("HOP", do_addchanlog3, NULL,-1,-1,-1,-1,-1); moduleAddCommand(CHANSERV, c, MOD_TAIL); c = createCommand("VOP", do_addchanlog4, NULL,-1,-1,-1,-1,-1); moduleAddCommand(CHANSERV, c, MOD_TAIL); moduleAddAuthor(AUTHOR); moduleAddVersion(VERSION); return MOD_CONT; } void AnopeFini(void) { alog("Module: cs_chanlog.so UNLOADED."); } int do_chanlog(User * u) { char *chan = strtok(NULL, ""); ChannelInfo *ci; if (!chan) { notice(s_ChanServ,u->nick,"Syntax: /msg Chanserv CHANLOG \002#chan\002 - view channel logs."); return MOD_STOP; } ci = cs_findchan(chan); if(ci) { notice(s_ChanServ,u->nick,"- Start Channel Log %s -",chan); notice(s_ChanServ,u->nick," CHANNEL CMD USER LEVEL CREATOR DATE TIME"); do_listchanlog(u, chan); notice(s_ChanServ,u->nick,"- End of Channel Log %s -",chan); } else { notice(s_ChanServ,u->nick,"Channel %s isnt registered",chan); } return MOD_CONT; } int do_addchanlog1(User *u) { char *gettext = moduleGetLastBuffer(); char *getchan; char *getcmd; char *getnick; char *getlevel; ChannelInfo *ci; if (!myStrGetToken(gettext,' ',0) || !myStrGetToken(gettext,' ',1) || !myStrGetToken(gettext,' ',2) ) { return MOD_STOP; } getchan = sstrdup(myStrGetToken(gettext,' ',0)); ci = cs_findchan(getchan); if (!ci) { return MOD_STOP; } if (!check_access(u, ci, CA_AUTOOP)) { return MOD_STOP; } getcmd = sstrdup(myStrGetToken(gettext,' ',1)); getnick = sstrdup(myStrGetToken(gettext,' ',2)); getlevel="SOP"; do_savechanlog(u,getchan,getcmd,getnick,getlevel); return MOD_CONT; } int do_addchanlog2(User *u) { char *gettext = moduleGetLastBuffer(); char *getchan; char *getcmd; char *getnick; char *getlevel; ChannelInfo *ci; if (!myStrGetToken(gettext,' ',0) || !myStrGetToken(gettext,' ',1) || !myStrGetToken(gettext,' ',2) ) { return MOD_STOP; } getchan = sstrdup(myStrGetToken(gettext,' ',0)); ci = cs_findchan(getchan); if (!ci) { return MOD_STOP; } if(!check_access(u, ci, CA_AUTOOP)) { return MOD_STOP; } getcmd = sstrdup(myStrGetToken(gettext,' ',1)); getnick = sstrdup(myStrGetToken(gettext,' ',2)); getlevel="AOP"; do_savechanlog(u,getchan,getcmd,getnick,getlevel); return MOD_CONT; } int do_addchanlog3(User *u) { char *gettext = moduleGetLastBuffer(); char *getchan; char *getcmd; char *getnick; char *getlevel; ChannelInfo *ci; if (!myStrGetToken(gettext,' ',0) || !myStrGetToken(gettext,' ',1) || !myStrGetToken(gettext,' ',2) ) { return MOD_STOP; } getchan = sstrdup(myStrGetToken(gettext,' ',0)); ci = cs_findchan(getchan); if (!ci) { return MOD_STOP; } if(!check_access(u, ci, CA_AUTOOP)) { return MOD_STOP; } getcmd = sstrdup(myStrGetToken(gettext,' ',1)); getnick = sstrdup(myStrGetToken(gettext,' ',2)); getlevel="HOP"; do_savechanlog(u,getchan,getcmd,getnick,getlevel); return MOD_CONT; } int do_addchanlog4(User *u) { char *gettext = moduleGetLastBuffer(); char *getchan; char *getcmd; char *getnick; char *getlevel; ChannelInfo *ci; if (!myStrGetToken(gettext,' ',0) || !myStrGetToken(gettext,' ',1) || !myStrGetToken(gettext,' ',2) ) { return MOD_STOP; } getchan = sstrdup(myStrGetToken(gettext,' ',0)); ci = cs_findchan(getchan); if (!ci) { return MOD_STOP; } if(!check_access(u, ci, CA_AUTOOP)) { return MOD_STOP; } getcmd = sstrdup(myStrGetToken(gettext,' ',1)); getnick = sstrdup(myStrGetToken(gettext,' ',2)); getlevel="VOP"; do_savechanlog(u,getchan,getcmd,getnick,getlevel); return MOD_CONT; } int do_savechanlog(User *u,char *getchan, char *getcmd, char *getnick, char *getlevel) { FILE *Fchanlog; time_t t; struct tm tm; char buf[256]; time(&t); tm = *localtime(&t); strftime(buf, sizeof(buf) - 1, "[%b %d, %Y][%H:%M:%S] ", &tm); Fchanlog = fopen("chanlog.db","a"); if(Fchanlog != NULL) { fprintf(Fchanlog, "%s %s %s %s %s@%s %s \n", getchan, getcmd, getnick, getlevel, u->nick, u->host, buf); fclose(Fchanlog); return MOD_STOP; } else { notice(s_ChanServ, u->nick, "An error occured while opening chanlog.db"); } return MOD_STOP; } int do_listchanlog(User *u, char *chan) { char line[600]; int i = 0; FILE *Fchanlog; line[0] = '\0'; if(chan[0] == '%') { Fchanlog = fopen("chanlog.db","r"); if(Fchanlog != NULL) { while(!feof(Fchanlog)) { fgets(line, sizeof(line), Fchanlog); if(feof(Fchanlog)) break; if(line[0] != '\n') { notice(s_ChanServ,u->nick, "[%d] %s ", ++i, line); } } if(i == 0) return 0; } else wallops(s_ChanServ, "An error occured while opening the chanlog.db"); } else { if(exists(u, "chanlog.db", chan, 1)==1) { Fchanlog = fopen("chanlog.db","r"); if(Fchanlog != NULL) { while(!feof(Fchanlog)) { fgets(line, sizeof(line), Fchanlog); if(feof(Fchanlog)) break; if(line[strlen(chan)] == ' ' && !strnicmp(line,chan,strlen(chan))) { notice(s_ChanServ,u->nick, "%s", line); } } } } } return MOD_CONT; } /*************************************************************************/ /* checks if a user exists in a file */ int exists(User *u, char *file, char *chan, int format) { int i; char line[1000]; FILE *op; line[0] = '\0'; for(i=0; i