]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - src/modules/m_chgident.cpp
Improve the message sent when overriding channel modes.
[user/henk/code/inspircd.git] / src / modules / m_chgident.cpp
1 /*
2  * InspIRCd -- Internet Relay Chat Daemon
3  *
4  *   Copyright (C) 2013, 2018 Sadie Powell <sadie@witchery.services>
5  *   Copyright (C) 2012-2014, 2016 Attila Molnar <attilamolnar@hush.com>
6  *   Copyright (C) 2012, 2019 Robby <robby@chatbelgie.be>
7  *   Copyright (C) 2009 Uli Schlachter <psychon@inspircd.org>
8  *   Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
9  *   Copyright (C) 2007-2008, 2010 Craig Edwards <brain@inspircd.org>
10  *   Copyright (C) 2007, 2009 Dennis Friis <peavey@inspircd.org>
11  *   Copyright (C) 2007 Robin Burchell <robin+git@viroteck.net>
12  *   Copyright (C) 2007 John Brooks <special@inspircd.org>
13  *
14  * This file is part of InspIRCd.  InspIRCd is free software: you can
15  * redistribute it and/or modify it under the terms of the GNU General Public
16  * License as published by the Free Software Foundation, version 2.
17  *
18  * This program is distributed in the hope that it will be useful, but WITHOUT
19  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
20  * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
21  * details.
22  *
23  * You should have received a copy of the GNU General Public License
24  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
25  */
26
27
28 #include "inspircd.h"
29
30 /** Handle /CHGIDENT
31  */
32 class CommandChgident : public Command
33 {
34  public:
35         CommandChgident(Module* Creator) : Command(Creator,"CHGIDENT", 2)
36         {
37                 allow_empty_last_param = false;
38                 flags_needed = 'o';
39                 syntax = "<nick> <ident>";
40                 TRANSLATE2(TR_NICK, TR_TEXT);
41         }
42
43         CmdResult Handle(User* user, const Params& parameters) CXX11_OVERRIDE
44         {
45                 User* dest = ServerInstance->FindNick(parameters[0]);
46
47                 if ((!dest) || (dest->registered != REG_ALL))
48                 {
49                         user->WriteNumeric(Numerics::NoSuchNick(parameters[0]));
50                         return CMD_FAILURE;
51                 }
52
53                 if (parameters[1].length() > ServerInstance->Config->Limits.IdentMax)
54                 {
55                         user->WriteNotice("*** CHGIDENT: Ident is too long");
56                         return CMD_FAILURE;
57                 }
58
59                 if (!ServerInstance->IsIdent(parameters[1]))
60                 {
61                         user->WriteNotice("*** CHGIDENT: Invalid characters in ident");
62                         return CMD_FAILURE;
63                 }
64
65                 if (IS_LOCAL(dest))
66                 {
67                         dest->ChangeIdent(parameters[1]);
68
69                         if (!user->server->IsULine())
70                                 ServerInstance->SNO->WriteGlobalSno('a', "%s used CHGIDENT to change %s's ident to '%s'", user->nick.c_str(), dest->nick.c_str(), dest->ident.c_str());
71                 }
72
73                 return CMD_SUCCESS;
74         }
75
76         RouteDescriptor GetRouting(User* user, const Params& parameters) CXX11_OVERRIDE
77         {
78                 return ROUTE_OPT_UCAST(parameters[0]);
79         }
80 };
81
82 class ModuleChgIdent : public Module
83 {
84         CommandChgident cmd;
85
86 public:
87         ModuleChgIdent() : cmd(this)
88         {
89         }
90
91         Version GetVersion() CXX11_OVERRIDE
92         {
93                 return Version("Adds the /CHGIDENT command which allows server operators to change the username (ident) of a user.", VF_OPTCOMMON | VF_VENDOR);
94         }
95 };
96
97 MODULE_INIT(ModuleChgIdent)