diff options
author | Adam- <Adam-@5417fbe8-f217-4b02-8779-1006273d7864> | 2010-03-31 04:41:56 +0000 |
---|---|---|
committer | Adam- <Adam-@5417fbe8-f217-4b02-8779-1006273d7864> | 2010-03-31 04:41:56 +0000 |
commit | b55ac06019785b308ac1ead44414f8c6dee226fc (patch) | |
tree | 513033038be0a1a327b8dc714936d29d2f742353 /src | |
parent | eaf211d59ca799719970f2789758eff6bc269eab (diff) |
Added akicks into SQL
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2848 5417fbe8-f217-4b02-8779-1006273d7864
Diffstat (limited to 'src')
-rw-r--r-- | src/modules/mysql/db_mysql_read.cpp | 36 | ||||
-rw-r--r-- | src/modules/mysql/db_mysql_write.cpp | 35 | ||||
-rw-r--r-- | src/regchannel.cpp | 8 |
3 files changed, 77 insertions, 2 deletions
diff --git a/src/modules/mysql/db_mysql_read.cpp b/src/modules/mysql/db_mysql_read.cpp index 2cbcd669c..bbbca0df2 100644 --- a/src/modules/mysql/db_mysql_read.cpp +++ b/src/modules/mysql/db_mysql_read.cpp @@ -438,6 +438,42 @@ static void LoadDatabase() } } + query << "SELECT * FROM `anope_cs_akick`"; + qres = StoreQuery(query); + + if (qres) + { + for (size_t i = 0; i < qres.num_rows(); ++i) + { + ChannelInfo *ci = cs_findchan(SQLAssign(qres[i]["channel"])); + if (!ci) + { + Alog() << "MySQL: Channel akick entry for nonexistant channel " << qres[i]["channel"]; + continue; + } + NickCore *nc = NULL; + spacesepstream sep(qres[i]["flags"]); + std::string flag, mask; + bool stuck = false; + while (sep.GetToken(flag)) + { + if (flag == "ISNICK") + nc = findcore(qres[i]["mask"]); + else if (flag == "STUCK") + stuck = true; + } + AutoKick *ak; + if (nc) + ak = ci->AddAkick(SQLAssign(qres[i]["creator"]), nc, SQLAssign(qres[i]["reason"]), atol(qres[i]["created"].c_str()), atol(qres[i]["last_used"].c_str())); + else + ak = ci->AddAkick(SQLAssign(qres[i]["creator"]), SQLAssign(qres[i]["mask"]), SQLAssign(qres[i]["reason"]), atol(qres[i]["created"].c_str()), atol(qres[i]["last_used"].c_str())); + if (stuck) + ak->SetFlag(AK_STUCK); + if (nc) + ak->SetFlag(AK_ISNICK); + } + } + query << "SELECT * FROM `anope_cs_levels`"; qres = StoreQuery(query); diff --git a/src/modules/mysql/db_mysql_write.cpp b/src/modules/mysql/db_mysql_write.cpp index b177a160f..00340a541 100644 --- a/src/modules/mysql/db_mysql_write.cpp +++ b/src/modules/mysql/db_mysql_write.cpp @@ -388,9 +388,10 @@ class DBMySQLWrite : public DBMySQL I_OnDelCore, I_OnNickForbidden, I_OnNickGroup, I_OnMakeNickRequest, I_OnDelNickRequest, I_OnNickRegister, I_OnChangeCoreDisplay, I_OnNickSuspended, - /* Chanserv */ + /* ChanServ */ I_OnAccessAdd, I_OnAccessDel, I_OnAccessChange, I_OnAccessClear, I_OnChanForbidden, I_OnDelChan, I_OnChanRegistered, I_OnChanSuspend, + I_OnAkickAdd, I_OnAkickDel, /* BotServ */ I_OnBotCreate, I_OnBotChange, I_OnBotDelete, I_OnBotAssign, I_OnBotUnAssign, @@ -401,7 +402,7 @@ class DBMySQLWrite : public DBMySQL I_OnOperServHelp, I_OnAddAkill, I_OnDelAkill, I_OnExceptionAdd, I_OnExceptionDel, I_OnAddSXLine, I_OnDelSXLine }; - ModuleManager::Attach(i, this, 37); + ModuleManager::Attach(i, this, 39); } void OnOperServHelp(User *u) @@ -666,6 +667,8 @@ class DBMySQLWrite : public DBMySQL mysqlpp::Query query(Me->Con); query << "DELETE FROM `anope_cs_access` WHERE `display` = " << mysqlpp::quote << nc->display; ExecuteQuery(query); + query << "DELETE FROM `anope_cs_akick` WHERE `mask` = " << mysqlpp::quote << nc->display; + ExecuteQuery(query); query << "DELETE FROM `anope_ns_access` WHERE `display` = " << mysqlpp::quote << nc->display; ExecuteQuery(query); query << "DELETE FROM `anope_ns_alias` WHERE `display` = " << mysqlpp::quote << nc->display; @@ -796,10 +799,16 @@ class DBMySQLWrite : public DBMySQL mysqlpp::Query query(Me->Con); query << "DELETE FROM `anope_cs_access` WHERE `channel` = " << mysqlpp::quote << ci->name; ExecuteQuery(query); + query << "DELETE FROM `anope_cs_akick` WHERE `channel` = " << mysqlpp::quote << ci->name; + ExecuteQuery(query); query << "DELETE FROM `anope_cs_info` WHERE `name` = " << mysqlpp::quote << ci->name; ExecuteQuery(query); query << "DELETE FROM `anope_cs_levels` WHERE `channel` = " << mysqlpp::quote << ci->name; ExecuteQuery(query); + query << "DELETE From `anope_cs_ttb` WHERE `channel` = " << mysqlpp::quote << ci->name; + ExecuteQuery(query); + query << "DELETE FROM `anope_bs_badwords` WHERE `channel` = " << mysqlpp::quote << ci->name; + ExecuteQuery(query); } void OnChanRegistered(ChannelInfo *ci) @@ -834,6 +843,28 @@ class DBMySQLWrite : public DBMySQL ExecuteQuery(query); } + void OnAkickAdd(ChannelInfo *ci, AutoKick *ak) + { + mysqlpp::Query query(Me->Con); + query << "INSERT DELAYED INTO `anope_cs_akick` (channel, flags, mask, reason, creator, created, last_used) VALUES("; + query << mysqlpp::quote << ci->name << ", '"; + if (ak->HasFlag(AK_ISNICK)) + query << "ISNICK "; + if (ak->HasFlag(AK_STUCK)) + query << "STUCK "; + query << "', " << mysqlpp::quote << (ak->HasFlag(AK_ISNICK) ? ak->nc->display : ak->mask) << ", "; + query << mysqlpp::quote << ak->reason << ", " << mysqlpp::quote << ak->creator << ", " << ak->addtime; + query << ", " << ak->last_used << ")"; + ExecuteQuery(query); + } + + void OnAkickDel(ChannelInfo *ci, AutoKick *ak) + { + mysqlpp::Query query(Me->Con); + query << "DELETE FROM `anope_cs_akick` WHERE `channel`= " << mysqlpp::quote << ci->name << " AND `mask` = " << mysqlpp::quote << (ak->HasFlag(AK_ISNICK) ? ak->nc->display : ak->mask); + ExecuteQuery(query); + } + void OnBotCreate(BotInfo *bi) { mysqlpp::Query query(Me->Con); diff --git a/src/regchannel.cpp b/src/regchannel.cpp index 1dcf9f515..1925baf77 100644 --- a/src/regchannel.cpp +++ b/src/regchannel.cpp @@ -264,6 +264,9 @@ AutoKick *ChannelInfo::AddAkick(const std::string &user, NickCore *akicknc, cons autokick->last_used = lu; akick.push_back(autokick); + + FOREACH_MOD(I_OnAkickAdd, OnAkickAdd(this, autokick)); + return autokick; } @@ -286,6 +289,9 @@ AutoKick *ChannelInfo::AddAkick(const std::string &user, const std::string &mask autokick->last_used = lu; akick.push_back(autokick); + + FOREACH_MOD(I_OnAkickAdd, OnAkickAdd(this, autokick)); + return autokick; } @@ -318,6 +324,8 @@ void ChannelInfo::EraseAkick(AutoKick *autokick) if (it != akick.end()) { + FOREACH_MOD(I_OnAkickDel, OnAkickDel(this, *it)); + delete *it; akick.erase(it); } |