]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - src/modules/m_uninvite.cpp
Remove InspIRCd* parameters and fields
[user/henk/code/inspircd.git] / src / modules / m_uninvite.cpp
1 /*       +------------------------------------+
2  *       | Inspire Internet Relay Chat Daemon |
3  *       +------------------------------------+
4  *
5  *  InspIRCd: (C) 2002-2009 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 (!u->IsInvited(xname))
60                 {
61                         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());
62                         return CMD_FAILURE;
63                 }
64                 if (!c->HasUser(user))
65                 {
66                         user->WriteNumeric(492, "%s %s :You're not on that channel!",user->nick.c_str(), c->name.c_str());
67                         return CMD_FAILURE;
68                 }
69
70                 u->RemoveInvite(xname);
71                 user->WriteNumeric(494, "%s %s %s :Uninvited", user->nick.c_str(), c->name.c_str(), u->nick.c_str());
72                 u->WriteNumeric(493, "%s :You were uninvited from %s by %s", u->nick.c_str(), c->name.c_str(), user->nick.c_str());
73                 c->WriteChannelWithServ(ServerInstance->Config->ServerName, "NOTICE %s :*** %s uninvited %s.", c->name.c_str(), user->nick.c_str(), u->nick.c_str());
74
75                 return CMD_SUCCESS;
76         }
77
78         RouteDescriptor GetRouting(User* user, const std::vector<std::string>& parameters)
79         {
80                 return ROUTE_BROADCAST;
81         }
82 };
83
84 class ModuleUninvite : public Module
85 {
86         CommandUninvite cmd;
87
88  public:
89
90         ModuleUninvite() : cmd(this)
91         {
92                 ServerInstance->AddCommand(&cmd);
93         }
94
95         virtual ~ModuleUninvite()
96         {
97         }
98
99         virtual Version GetVersion()
100         {
101                 return Version("Provides the UNINVITE command which lets users un-invite other users from channels (!)", VF_VENDOR | VF_COMMON, API_VERSION);
102         }
103 };
104
105 MODULE_INIT(ModuleUninvite)
106