- public:
- cmd_uninvite () : command_t("UNINVITE", 0, 2)
- {
- this->source = "m_uninvite.so";
- }
-
- void Handle (char **parameters, int pcnt, userrec *user)
- {
- userrec* u = Find(parameters[0]);
- chanrec* c = FindChan(parameters[1]);
-
- if ((!c) || (!u))
- {
- if (!c)
- {
- WriteServ(user->fd,"401 %s %s :No such nick/channel",user->nick, parameters[1]);
- }
- else
- {
- WriteServ(user->fd,"401 %s %s :No such nick/channel",user->nick, parameters[0]);
- }
-
- return;
- }
-
- if (c->binarymodes & CM_INVITEONLY)
- {
- if (cstatus(user,c) < STATUS_HOP)
- {
- WriteServ(user->fd,"482 %s %s :You must be at least a half-operator to change modes on this channel",user->nick, c->name);
- return;
- }
- }
-
- irc::string xname(c->name);
-
- if (!u->IsInvited(xname))
- {
- WriteServ(user->fd,"491 %s %s %s :Is not invited to channel %s",user->nick,u->nick,c->name,c->name);
- return;
- }
- if (!has_channel(user,c))
- {
- WriteServ(user->fd,"492 %s %s :You're not on that channel!",user->nick, c->name);
- return;
- }
-
- u->RemoveInvite(xname);
- WriteServ(user->fd,"494 %s %s %s :Uninvited",user->nick,c->name,u->nick);
- WriteServ(u->fd,"493 %s :You were uninvited from %s by %s",u->nick,c->name,user->nick);
- WriteChannel(c,user,"NOTICE %s :*** %s uninvited %s.",c->name,user->nick,u->nick);
- }