1
0
mirror of https://github.com/anope/anope.git synced 2026-07-02 15:13:13 +02:00
Files
anope/src/core/cs_invite.c
T
Adam- 0ed0fa4af6 Rewrote how Anope stores channel status modes on users.
This allows 3rd party modules to add and track their own status mode.
Additionally we now store a users status in both the UserContainer and ChannelContainer.
This also fixes the ModeStacker to not send any mode strings unnecessarially and shuffles some code
around so we don't have to manually remove channels from users lists everywhere.

git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2775 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-21 06:31:17 +00:00

99 lines
2.1 KiB
C

/* ChanServ core functions
*
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
* $Id$
*
*/
/*************************************************************************/
#include "module.h"
class CommandCSInvite : public Command
{
public:
CommandCSInvite() : Command("INVITE", 1, 3)
{
}
CommandReturn Execute(User *u, const std::vector<ci::string> &params)
{
const char *chan = params[0].c_str();
Channel *c;
ChannelInfo *ci;
User *u2;
if (!(c = findchan(chan)))
{
notice_lang(Config.s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
return MOD_CONT;
}
ci = c->ci;
if (!u || !check_access(u, ci, CA_INVITE))
{
notice_lang(Config.s_ChanServ, u, ACCESS_DENIED);
return MOD_CONT;
}
if (params.size() == 1)
u2 = u;
else
{
if (!(u2 = finduser(params[1].c_str())))
{
notice_lang(Config.s_ChanServ, u, NICK_X_NOT_IN_USE, params[1].c_str());
return MOD_CONT;
}
}
if (c->FindUser(u2))
notice_lang(Config.s_ChanServ, u, CHAN_INVITE_ALREADY_IN, c->name.c_str());
else
{
ircdproto->SendInvite(whosends(ci), chan, u2->nick.c_str());
notice_lang(whosends(ci)->nick, u, CHAN_INVITE_OTHER_SUCCESS, u2->nick.c_str(), c->name.c_str());
notice_lang(whosends(ci)->nick, u2, CHAN_INVITE_SUCCESS, c->name.c_str());
}
return MOD_CONT;
}
bool OnHelp(User *u, const ci::string &subcommand)
{
notice_help(Config.s_ChanServ, u, CHAN_HELP_INVITE);
return true;
}
void OnSyntaxError(User *u, const ci::string &subcommand)
{
syntax_error(Config.s_ChanServ, u, "INVITE", CHAN_INVITE_SYNTAX);
}
};
class CSInvite : public Module
{
public:
CSInvite(const std::string &modname, const std::string &creator) : Module(modname, creator)
{
this->SetAuthor("Anope");
this->SetVersion("$Id$");
this->SetType(CORE);
this->AddCommand(CHANSERV, new CommandCSInvite());
ModuleManager::Attach(I_OnChanServHelp, this);
}
void OnChanServHelp(User *u)
{
notice_lang(Config.s_ChanServ, u, CHAN_HELP_CMD_INVITE);
}
};
MODULE_INIT(CSInvite)