diff --git a/modules/console.cc b/modules/console.cc index 573f6cb70..5849a2843 100644 --- a/modules/console.cc +++ b/modules/console.cc @@ -5292,6 +5292,23 @@ console_cmd__room__purge(opt &out, const string_view &line) m::room_id(token(line, ' ', 0)) }; + const m::room room + { + room_id + }; + + using prototype = size_t (const m::room &); + static m::import purge + { + "m_room", "purge" + }; + + const size_t ret + { + purge(room) + }; + + out << "erased " << ret << std::endl; return true; } diff --git a/modules/m_room.cc b/modules/m_room.cc index c9708eab0..f0afadf27 100644 --- a/modules/m_room.cc +++ b/modules/m_room.cc @@ -16,6 +16,34 @@ IRCD_MODULE "Matrix state library; modular components." }; +extern "C" size_t +purge(const m::room &room) +{ + size_t ret(0); + db::txn txn + { + *m::dbs::events + }; + + room.for_each([&txn, &ret] + (const m::event::idx &idx) + { + const m::event::fetch event + { + idx + }; + + m::dbs::write_opts opts; + opts.op = db::op::DELETE; + opts.event_idx = idx; + m::dbs::write(txn, event, opts); + ++ret; + }); + + txn(); + return ret; +} + extern "C" void make_auth(const m::room &room, json::stack::array &out,