diff --git a/include/ircd/m/room.h b/include/ircd/m/room.h index 8a536d3c3..19ac13ca2 100644 --- a/include/ircd/m/room.h +++ b/include/ircd/m/room.h @@ -410,6 +410,7 @@ struct ircd::m::room::power using closure = std::function; using closure_bool = std::function; + static const int64_t default_creator_level; static const int64_t default_power_level; static const int64_t default_event_level; static const int64_t default_user_level; diff --git a/ircd/m/room.cc b/ircd/m/room.cc index ba84d0b8a..664193838 100644 --- a/ircd/m/room.cc +++ b/ircd/m/room.cc @@ -1958,6 +1958,12 @@ const // room::power // +decltype(ircd::m::room::power::default_creator_level) +ircd::m::room::power::default_creator_level +{ + 100 +}; + decltype(ircd::m::room::power::default_power_level) ircd::m::room::power::default_power_level { @@ -2006,7 +2012,7 @@ const try default_user_level }; - view([&user_id, &ret] + const auto closure{[&user_id, &ret] (const json::object &content) { const json::object &users @@ -2015,7 +2021,16 @@ const try }; ret = users.at(user_id); - }); + }}; + + const bool has_power_levels_event + { + view(closure) + }; + + if(!has_power_levels_event) + if(creator(room, user_id)) + ret = default_creator_level; return ret; }