diff options
author | Sadie Powell <sadie@witchery.services> | 2024-06-20 16:57:11 +0100 |
---|---|---|
committer | Sadie Powell <sadie@witchery.services> | 2024-06-20 17:16:16 +0100 |
commit | 016a5b390385bdfca3ae3e7fd7705de0eb305699 (patch) | |
tree | 9d4e2c265fbc87cd34afab3ee1e4a935ac41fc74 /modules | |
parent | 60aeb2a71a788670ff06f4271949118cb2330c96 (diff) |
Fix importing Atheme mode locks.
Diffstat (limited to 'modules')
-rw-r--r-- | modules/database/db_atheme.cpp | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/modules/database/db_atheme.cpp b/modules/database/db_atheme.cpp index fa103f3f6..b75813ce2 100644 --- a/modules/database/db_atheme.cpp +++ b/modules/database/db_atheme.cpp @@ -85,16 +85,34 @@ public: struct ModeData final { + char letter; Anope::string name; Anope::string value; bool set; ModeData(const Anope::string &n, bool s, const Anope::string &v = "") - : name(n) + : letter(0) + , name(n) , value(v) , set(s) { } + + ModeData(char l, const Anope::string &v = "") + : letter(l) + , value(v) + , set(true) + { + } + + Anope::string str() const + { + std::stringstream buf; + buf << '+' << (name.empty() ? letter : name); + if (value.empty()) + buf << ' ' << value; + return buf.str(); + } }; struct ChannelData final @@ -969,6 +987,12 @@ private: data->info_adder = value; else if (key == "private:mark:timestamp") data->info_ts = Anope::Convert<time_t>(value, 0); + else if (key == "private:mlockext") + { + spacesepstream mlocks(value); + for (Anope::string mlock; mlocks.GetToken(mlock); ) + data->mlocks.emplace_back(mlock[0], mlock.substr(1)); + } else if (key == "private:templates") return HandleIgnoreMetadata(ci->name, key, value); else if (key == "private:topic:setter") @@ -1558,10 +1582,14 @@ public: for (const auto &mlock : data->mlocks) { - auto mh = ModeManager::FindChannelModeByName(mlock.name); + ChannelMode *mh; + if (mlock.name.empty()) + mh = ModeManager::FindChannelModeByChar(mlock.letter); + else + mh = ModeManager::FindChannelModeByName(mlock.name); if (!mh) { - Log(this) << "Unable to find mode while importing mode lock on " << ci->name << ": " << mlock.name; + Log(this) << "Unable to find mode while importing mode lock on " << ci->name << ": " << mlock.str(); continue; } |