2 * InspIRCd -- Internet Relay Chat Daemon
4 * Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
5 * Copyright (C) 2008 Pippijn van Steenhoven <pip88nl@gmail.com>
6 * Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
8 * This file is part of InspIRCd. InspIRCd is free software: you can
9 * redistribute it and/or modify it under the terms of the GNU General Public
10 * License as published by the Free Software Foundation, version 2.
12 * This program is distributed in the hope that it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
24 /* $ModDesc: Provides the TITLE command which allows setting of CUSTOM WHOIS TITLE line */
28 class CommandTitle : public Command
32 CommandTitle(Module* Creator) : Command(Creator,"TITLE", 2),
33 ctitle("ctitle", Creator)
35 syntax = "<user> <password>";
38 CmdResult Handle(const std::vector<std::string> ¶meters, User* user)
40 const std::string userHost = user->ident + "@" + user->host;
41 const std::string userIP = user->ident + "@" + user->GetIPString();
43 ConfigTagList tags = ServerInstance->Config->ConfTags("title");
44 for (ConfigIter i = tags.first; i != tags.second; ++i)
46 std::string Name = i->second->getString("name");
47 std::string pass = i->second->getString("password");
48 std::string hash = i->second->getString("hash");
49 std::string host = i->second->getString("host", "*@*");
50 std::string title = i->second->getString("title");
51 std::string vhost = i->second->getString("vhost");
53 if (Name == parameters[0] && !ServerInstance->PassCompare(user, pass, parameters[1], hash) &&
54 InspIRCd::MatchMask(host, userHost, userIP) && !title.empty())
56 ctitle.set(user, title);
58 ServerInstance->PI->SendMetaData(user, "ctitle", title);
61 user->ChangeDisplayedHost(vhost.c_str());
63 user->WriteNotice("Custom title set to '" + title + "'");
69 user->WriteNotice("Invalid title credentials");
75 class ModuleCustomTitle : public Module
80 ModuleCustomTitle() : cmd(this)
84 void init() CXX11_OVERRIDE
86 ServerInstance->Modules->AddService(cmd);
87 ServerInstance->Modules->AddService(cmd.ctitle);
88 ServerInstance->Modules->Attach(I_OnWhoisLine, this);
91 // :kenny.chatspike.net 320 Brain Azhrarn :is getting paid to play games.
92 ModResult OnWhoisLine(User* user, User* dest, int &numeric, std::string &text) CXX11_OVERRIDE
94 /* We use this and not OnWhois because this triggers for remote, too */
97 /* Insert our numeric before 312 */
98 const std::string* ctitle = cmd.ctitle.get(dest);
101 ServerInstance->SendWhoisLine(user, dest, 320, "%s %s :%s",user->nick.c_str(), dest->nick.c_str(), ctitle->c_str());
104 /* Don't block anything */
105 return MOD_RES_PASSTHRU;
108 Version GetVersion() CXX11_OVERRIDE
110 return Version("Custom Title for users", VF_OPTCOMMON | VF_VENDOR);
114 MODULE_INIT(ModuleCustomTitle)