diff options
author | Adam <adam@sigterm.info> | 2019-01-03 21:30:44 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-03 21:30:44 -0500 |
commit | a5eaf6fc499f9b1530660705029dbf8a596ec034 (patch) | |
tree | 3ced7c46235039613005a1aba6ffc9e389a4250b /modules/protocol/inspircd20.cpp | |
parent | 9d7245bded2f21ffe116921e76d9a4ed0ce37e99 (diff) | |
parent | 1e9d959857346a2a302dbf8ecde20cc8406f9c49 (diff) |
Merge pull request #225 from genius3000/2.0+away_msg
Handle S2S AWAY messages with a timestamp
Diffstat (limited to 'modules/protocol/inspircd20.cpp')
-rw-r--r-- | modules/protocol/inspircd20.cpp | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/modules/protocol/inspircd20.cpp b/modules/protocol/inspircd20.cpp index 334e6ae34..686b05771 100644 --- a/modules/protocol/inspircd20.cpp +++ b/modules/protocol/inspircd20.cpp @@ -369,6 +369,20 @@ class ChannelModeRedirect : public ChannelModeParam } }; +struct IRCDMessageAway : Message::Away +{ + IRCDMessageAway(Module *creator) : Message::Away(creator, "AWAY") { SetFlag(IRCDMESSAGE_REQUIRE_USER); } + + void Run(MessageSource &source, const std::vector<Anope::string> ¶ms) anope_override + { + std::vector<Anope::string> newparams(params); + if (newparams.size() > 1) + newparams.erase(newparams.begin()); + + Message::Away::Run(source, newparams); + } +}; + struct IRCDMessageCapab : Message::Capab { std::map<char, Anope::string> chmodes, umodes; @@ -925,7 +939,6 @@ class ProtoInspIRCd20 : public Module InspIRCd20Proto ircd_proto; /* Core message handlers */ - Message::Away message_away; Message::Error message_error; Message::Invite message_invite; Message::Join message_join; @@ -947,6 +960,7 @@ class ProtoInspIRCd20 : public Module message_squit, message_time, message_uid; /* Our message handlers */ + IRCDMessageAway message_away; IRCDMessageCapab message_capab; IRCDMessageEncap message_encap; IRCDMessageFHost message_fhost; @@ -964,9 +978,9 @@ class ProtoInspIRCd20 : public Module public: ProtoInspIRCd20(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, PROTOCOL | VENDOR), ircd_proto(this), - message_away(this), message_error(this), message_invite(this), message_join(this), message_kick(this), - message_kill(this), message_motd(this), message_notice(this), message_part(this), message_ping(this), - message_privmsg(this), message_quit(this), message_stats(this), message_topic(this), + message_error(this), message_invite(this), message_join(this), message_kick(this), message_kill(this), + message_motd(this), message_notice(this), message_part(this), message_ping(this), message_privmsg(this), + message_quit(this), message_stats(this), message_topic(this), message_endburst("IRCDMessage", "inspircd20/endburst", "inspircd12/endburst"), message_fjoin("IRCDMessage", "inspircd20/fjoin", "inspircd12/fjoin"), @@ -982,8 +996,8 @@ class ProtoInspIRCd20 : public Module message_time("IRCDMessage", "inspircd20/time", "inspircd12/time"), message_uid("IRCDMessage", "inspircd20/uid", "inspircd12/uid"), - message_capab(this), message_encap(this), message_fhost(this), message_fident(this), message_metadata(this, use_server_side_topiclock, use_server_side_mlock), - message_save(this) + message_away(this), message_capab(this), message_encap(this), message_fhost(this), message_fident(this), + message_metadata(this, use_server_side_topiclock, use_server_side_mlock), message_save(this) { if (ModuleManager::LoadModule("inspircd12", User::Find(creator)) != MOD_ERR_OK) |