]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - src/modules/m_uninvite.cpp
Replace [cC]olour with [cC]olor
[user/henk/code/inspircd.git] / src / modules / m_uninvite.cpp
1 /*       +------------------------------------+
2  *       | Inspire Internet Relay Chat Daemon |
3  *       +------------------------------------+
4  *
5  *  InspIRCd: (C) 2002-2010 InspIRCd Development Team
6  * See: http://wiki.inspircd.org/Credits
7  *
8  * This program is free but copyrighted software; see
9  *            the file COPYING for details.
10  *
11  * ---------------------------------------------------
12  */
13
14 /* $ModDesc: Provides the UNINVITE command which lets users un-invite other users from channels (!) */
15
16 #include "inspircd.h"
17
18 /** Handle /UNINVITE
19  */
20 class CommandUninvite : public Command
21 {
22  public:
23         CommandUninvite(Module* Creator) : Command(Creator,"UNINVITE", 2)
24         {
25                 syntax = "<nick> <channel>";
26                 TRANSLATE3(TR_NICK, TR_TEXT, TR_END);
27         }
28
29         CmdResult Handle (const std::vector<std::string> &parameters, User *user)
30         {
31                 User* u = ServerInstance->FindNick(parameters[0]);
32                 Channel* c = ServerInstance->FindChan(parameters[1]);
33
34                 if ((!c) || (!u))
35                 {
36                         if (!c)
37                         {
38                                 user->WriteNumeric(401, "%s %s :No such nick/channel",user->nick.c_str(), parameters[1].c_str());
39                         }
40                         else
41                         {
42                                 user->WriteNumeric(401, "%s %s :No such nick/channel",user->nick.c_str(), parameters[0].c_str());
43                         }
44
45                         return CMD_FAILURE;
46                 }
47
48                 if (IS_LOCAL(user))
49                 {
50                         if (c->GetPrefixValue(user) < HALFOP_VALUE)
51                         {
52                                 user->WriteNumeric(ERR_CHANOPRIVSNEEDED, "%s %s :You must be a channel %soperator", user->nick.c_str(), c->name.c_str(), c->GetPrefixValue(u) == HALFOP_VALUE ? "" : "half-");
53                                 return CMD_FAILURE;
54                         }
55                 }
56
57                 irc::string xname(c->name.c_str());
58
59                 if (IS_LOCAL(u))
60                 {
61                         // TODO send messages & such out to remote servers
62                         LocalUser* lu = IS_LOCAL(u);
63                         if (!lu->IsInvited(xname))
64                         {
65                                 user->WriteNumeric(505, "%s %s %s :Is not invited to channel %s", user->nick.c_str(), u->nick.c_str(), c->name.c_str(), c->name.c_str());
66                                 return CMD_FAILURE;
67                         }
68                         user->WriteNumeric(494, "%s %s %s :Uninvited", user->nick.c_str(), c->name.c_str(), u->nick.c_str());
69                         lu->RemoveInvite(xname);
70                         lu->WriteNumeric(493, "%s :You were uninvited from %s by %s", u->nick.c_str(), c->name.c_str(), user->nick.c_str());
71                         c->WriteChannelWithServ(ServerInstance->Config->ServerName, "NOTICE %s :*** %s uninvited %s.",
72                                 c->name.c_str(), user->nick.c_str(), u->nick.c_str());
73                 }
74
75                 return CMD_SUCCESS;
76         }
77
78         RouteDescriptor GetRouting(User* user, const std::vector<std::string>& parameters)
79         {
80                 User* u = ServerInstance->FindNick(parameters[0]);
81                 return u ? ROUTE_OPT_UCAST(u->server) : ROUTE_LOCALONLY;
82         }
83 };
84
85 class ModuleUninvite : public Module
86 {
87         CommandUninvite cmd;
88
89  public:
90
91         ModuleUninvite() : cmd(this)
92         {
93                 ServerInstance->AddCommand(&cmd);
94         }
95
96         virtual ~ModuleUninvite()
97         {
98         }
99
100         virtual Version GetVersion()
101         {
102                 return Version("Provides the UNINVITE command which lets users un-invite other users from channels", VF_VENDOR | VF_OPTCOMMON);
103         }
104 };
105
106 MODULE_INIT(ModuleUninvite)
107