summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorSadie Powell <sadie@witchery.services>2025-05-09 14:47:31 +0100
committerSadie Powell <sadie@witchery.services>2025-05-09 14:47:31 +0100
commit977780d8ef8cc2d28690d66eff4292b7d9bbd1a7 (patch)
tree279cb3f48cc68d32406452759c1ab529d292d27d /modules
parent459f3d07c999a0d55555d10139758e586d891f64 (diff)
Store user away state and add it to the anope.user RPC event.
Diffstat (limited to 'modules')
-rw-r--r--modules/protocol/inspircd.cpp19
-rw-r--r--modules/rpc/rpc_data.cpp11
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> &params, 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);