diff options
author | Attila Molnar <attilamolnar@hush.com> | 2015-12-06 11:14:17 +0100 |
---|---|---|
committer | Attila Molnar <attilamolnar@hush.com> | 2015-12-06 11:14:17 +0100 |
commit | 27f69fdc424fc1c934a4a994731f412118f4c051 (patch) | |
tree | 094a32b517641ecca66447627b3b7cff5394d89a /src | |
parent | 489ba0ad54bf6bdd80d5f539f67f03241ddfe77b (diff) |
Add m_ircv3_echomessage which implements the IRCv3.2 echo-message extension
Diffstat (limited to 'src')
-rw-r--r-- | src/modules/m_ircv3_echomessage.cpp | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/modules/m_ircv3_echomessage.cpp b/src/modules/m_ircv3_echomessage.cpp new file mode 100644 index 000000000..8773d7187 --- /dev/null +++ b/src/modules/m_ircv3_echomessage.cpp @@ -0,0 +1,70 @@ +/* + * InspIRCd -- Internet Relay Chat Daemon + * + * Copyright (C) 2015 Attila Molnar <attilamolnar@hush.com> + * Copyright (C) 2013-2015 Peter Powell <petpow@saberuk.com> + * + * This file is part of InspIRCd. InspIRCd is free software: you can + * redistribute it and/or modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation, version 2. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + + +#include "inspircd.h" +#include "modules/cap.h" + +static const char* MessageTypeStringSp[] = { "PRIVMSG ", "NOTICE " }; + +class ModuleIRCv3EchoMessage : public Module +{ + Cap::Capability cap; + + public: + ModuleIRCv3EchoMessage() + : cap(this, "echo-message") + { + } + + void OnUserMessage(User* user, void* dest, int target_type, const std::string& text, char status, const CUList& exempt_list, MessageType msgtype) CXX11_OVERRIDE + { + if (!cap.get(user)) + return; + + std::string msg = MessageTypeStringSp[msgtype]; + if (target_type == TYPE_USER) + { + User* destuser = static_cast<User*>(dest); + msg.append(destuser->nick); + } + else if (target_type == TYPE_CHANNEL) + { + if (status) + msg.push_back(status); + + Channel* chan = static_cast<Channel*>(dest); + msg.append(chan->name); + } + else + { + const char* servername = static_cast<const char*>(dest); + msg.append(servername); + } + msg.append(" :").append(text); + user->WriteFrom(user, msg); + } + + Version GetVersion() CXX11_OVERRIDE + { + return Version("Provides the echo-message IRCv3.2 extension", VF_VENDOR); + } +}; + +MODULE_INIT(ModuleIRCv3EchoMessage) |