summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorSadie Powell <sadie@witchery.services>2024-06-20 16:57:11 +0100
committerSadie Powell <sadie@witchery.services>2024-06-20 17:16:16 +0100
commit016a5b390385bdfca3ae3e7fd7705de0eb305699 (patch)
tree9d4e2c265fbc87cd34afab3ee1e4a935ac41fc74 /modules
parent60aeb2a71a788670ff06f4271949118cb2330c96 (diff)
Fix importing Atheme mode locks.
Diffstat (limited to 'modules')
-rw-r--r--modules/database/db_atheme.cpp34
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;
}