diff options
author | Sadie Powell <sadie@witchery.services> | 2025-05-09 14:47:31 +0100 |
---|---|---|
committer | Sadie Powell <sadie@witchery.services> | 2025-05-09 14:47:31 +0100 |
commit | 977780d8ef8cc2d28690d66eff4292b7d9bbd1a7 (patch) | |
tree | 279cb3f48cc68d32406452759c1ab529d292d27d /modules | |
parent | 459f3d07c999a0d55555d10139758e586d891f64 (diff) |
Store user away state and add it to the anope.user RPC event.
Diffstat (limited to 'modules')
-rw-r--r-- | modules/protocol/inspircd.cpp | 19 | ||||
-rw-r--r-- | modules/rpc/rpc_data.cpp | 11 |
2 files changed, 23 insertions, 7 deletions
diff --git a/modules/protocol/inspircd.cpp b/modules/protocol/inspircd.cpp index 9535778ae..8ea6b7f7a 100644 --- a/modules/protocol/inspircd.cpp +++ b/modules/protocol/inspircd.cpp @@ -1056,17 +1056,22 @@ public: }; struct IRCDMessageAway final - : Message::Away + : IRCDMessage { - IRCDMessageAway(Module *creator) : Message::Away(creator, "AWAY") { SetFlag(FLAG_REQUIRE_USER); } + IRCDMessageAway(Module *creator) + : IRCDMessage(creator, "AWAY") + { + SetFlag(FLAG_REQUIRE_USER); + SetFlag(FLAG_SOFT_LIMIT); + } void Run(MessageSource &source, const std::vector<Anope::string> ¶ms, const Anope::map<Anope::string> &tags) override { - std::vector<Anope::string> newparams(params); - if (newparams.size() > 1) - newparams.erase(newparams.begin()); - - Message::Away::Run(source, newparams, tags); + auto *u = source.GetUser(); + if (params.size() == 2) + u->SetAway(params[1], IRCD->ExtractTimestamp(params[0])); + else + u->SetAway(); } }; diff --git a/modules/rpc/rpc_data.cpp b/modules/rpc/rpc_data.cpp index 1e8f990b0..c4ab43d69 100644 --- a/modules/rpc/rpc_data.cpp +++ b/modules/rpc/rpc_data.cpp @@ -508,6 +508,17 @@ public: root.Reply("account", nullptr); } + if (u->IsAway()) + { + root.ReplyMap("away") + .Reply("message", u->awaymsg) + .Reply("time", u->awaytime); + } + else + { + root.Reply("away", nullptr); + } + auto &channels = root.ReplyArray("channels"); for (const auto &[_, cc] : u->chans) channels.Reply(cc->status.BuildModePrefixList() + cc->chan->name); |