]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - src/modules/m_ircv3_chghost.cpp
Add m_ircv3_chghost which implements the IRCv3.2 chghost extension
[user/henk/code/inspircd.git] / src / modules / m_ircv3_chghost.cpp
1 /*
2  * InspIRCd -- Internet Relay Chat Daemon
3  *
4  *   Copyright (C) 2015 Attila Molnar <attilamolnar@hush.com>
5  *
6  * This file is part of InspIRCd.  InspIRCd is free software: you can
7  * redistribute it and/or modify it under the terms of the GNU General Public
8  * License as published by the Free Software Foundation, version 2.
9  *
10  * This program is distributed in the hope that it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12  * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
13  * details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  */
18
19
20 #include "inspircd.h"
21 #include "modules/cap.h"
22 #include "modules/ircv3.h"
23
24 class ModuleIRCv3ChgHost : public Module
25 {
26         Cap::Capability cap;
27
28         void DoChgHost(User* user, const std::string& ident, const std::string& host)
29         {
30                 std::string line(1, ':');
31                 line.append(user->GetFullHost()).append(" CHGHOST ").append(ident).append(1, ' ').append(host);
32                 IRCv3::WriteNeighborsWithCap(user, line, cap);
33         }
34
35  public:
36         ModuleIRCv3ChgHost()
37                 : cap(this, "chghost")
38         {
39         }
40
41         void OnChangeIdent(User* user, const std::string& newident) CXX11_OVERRIDE
42         {
43                 DoChgHost(user, newident, user->dhost);
44         }
45
46         void OnChangeHost(User* user, const std::string& newhost) CXX11_OVERRIDE
47         {
48                 DoChgHost(user, user->ident, newhost);
49         }
50
51         Version GetVersion() CXX11_OVERRIDE
52         {
53                 return Version("Provides the chghost IRCv3.2 extension", VF_VENDOR);
54         }
55 };
56
57 MODULE_INIT(ModuleIRCv3ChgHost)