diff options
Diffstat (limited to 'src/modules/mysql/db_mysql_read.cpp')
-rw-r--r-- | src/modules/mysql/db_mysql_read.cpp | 36 |
1 files changed, 36 insertions, 0 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); |