anope- supernets anope source code & configuration |
git clone git://git.acid.vegas/anope.git |
Log | Files | Refs | Archive | README |
m_sql_log.cpp (2578B)
1 /* 2 * 3 * (C) 2003-2022 Anope Team 4 * Contact us at team@anope.org 5 * 6 * Please read COPYING and README for further details. 7 */ 8 9 #include "module.h" 10 #include "modules/sql.h" 11 12 class SQLLog : public Module 13 { 14 std::set<Anope::string> inited; 15 Anope::string table; 16 17 public: 18 SQLLog(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, VENDOR | EXTRA) 19 { 20 } 21 22 void OnReload(Configuration::Conf *conf) anope_override 23 { 24 Configuration::Block *config = conf->GetModule(this); 25 this->table = config->Get<const Anope::string>("table", "logs"); 26 } 27 28 void OnLogMessage(LogInfo *li, const Log *l, const Anope::string &msg) anope_override 29 { 30 Anope::string ref_name; 31 ServiceReference<SQL::Provider> SQL; 32 33 for (unsigned i = 0; i < li->targets.size(); ++i) 34 { 35 const Anope::string &target = li->targets[i]; 36 size_t sz = target.find("sql_log:"); 37 if (!sz) 38 { 39 ref_name = target.substr(8); 40 SQL = ServiceReference<SQL::Provider>("SQL::Provider", ref_name); 41 break; 42 } 43 } 44 45 if (!SQL) 46 return; 47 48 if (!inited.count(ref_name)) 49 { 50 inited.insert(ref_name); 51 52 SQL::Query create("CREATE TABLE IF NOT EXISTS `" + table + "` (" 53 "`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP," 54 "`type` varchar(64) NOT NULL," 55 "`user` varchar(64) NOT NULL," 56 "`acc` varchar(64) NOT NULL," 57 "`command` varchar(64) NOT NULL," 58 "`channel` varchar(64) NOT NULL," 59 "`msg` text NOT NULL" 60 ")"); 61 62 SQL->Run(NULL, create); 63 } 64 65 SQL::Query insert("INSERT INTO `" + table + "` (`type`,`user`,`acc`,`command`,`channel`,`msg`)" 66 "VALUES (@type@, @user@, @acc@, @command@, @channel@, @msg@)"); 67 68 switch (l->type) 69 { 70 case LOG_ADMIN: 71 insert.SetValue("type", "ADMIN"); 72 break; 73 case LOG_OVERRIDE: 74 insert.SetValue("type", "OVERRIDE"); 75 break; 76 case LOG_COMMAND: 77 insert.SetValue("type", "COMMAND"); 78 break; 79 case LOG_SERVER: 80 insert.SetValue("type", "SERVER"); 81 break; 82 case LOG_CHANNEL: 83 insert.SetValue("type", "CHANNEL"); 84 break; 85 case LOG_USER: 86 insert.SetValue("type", "USER"); 87 break; 88 case LOG_MODULE: 89 insert.SetValue("type", "MODULE"); 90 break; 91 case LOG_NORMAL: 92 insert.SetValue("type", "NORMAL"); 93 break; 94 default: 95 return; 96 } 97 98 insert.SetValue("user", l->u ? l->u->nick : ""); 99 insert.SetValue("acc", l->nc ? l->nc->display : ""); 100 insert.SetValue("command", l->c ? l->c->name : ""); 101 insert.SetValue("channel", l->ci ? l->ci->name : ""); 102 insert.SetValue("msg", msg); 103 104 SQL->Run(NULL, insert); 105 } 106 }; 107 108 MODULE_INIT(SQLLog)