gnuworld/mod.cservice/SHOWCOMMANDSCommand.cc

147 lines
4.8 KiB
C++

/**
* SHOWCOMMANDSCommand.cc
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
*
* $Id: SHOWCOMMANDSCommand.cc,v 1.40 2012/05/08 20:02:09 Seven Exp $
*/
#include <string>
#include "StringTokenizer.h"
#include "ELog.h"
#include "cservice.h"
#include "levels.h"
#include "responses.h"
const char SHOWCOMMANDSCommand_cc_rcsId[] = "$Id: SHOWCOMMANDSCommand.cc,v 1.40 2012/05/08 20:02:09 Seven Exp $" ;
namespace gnuworld
{
using std::string ;
static const char* lvl_1000_cmds = "\002Level 1000\002: anything";
static const char* lvl_900_cmds = "\002Level 900\002: shutdown rehash";
static const char* lvl_800_cmds = "\002Level 800\002: say servnotice";
static const char* lvl_750_cmds = "\002Level 750\002: accept reject register purge removeall";
static const char* lvl_600_cmds = "\002Level 600\002: remignore addcomment scanhost scanuname scanemail";
static const char* lvl_500_cmds = "\002Level 500\002: part";
static const char* lvl_450_cmds = "\002Level 450\002: join set%s*";
static const char* lvl_400_cmds = "\002Level 400\002: adduser clearmode* modinfo+ remuser";
static const char* lvl_100_cmds = "\002Level 100\002: op deop invite suspend unsuspend";
static const char* lvl_75_cmds = "\002Level 75\002: ban* unban*";
static const char* lvl_50_cmds = "\002Level 50\002: kick%s topic";
static const char* lvl_42_cmds = "\002Level 42\002: PANIC";
static const char* lvl_25_cmds = "\002Level 25\002: voice devoice";
static const char* lvl_1_cmds = "\002Level 1\002: banlist status%s";
static const char* lvl_adm_cmds = "\002Level *\002: force unforce stats";
static const char* lvl_0_cmds = "\002Level 0\002: access chaninfo info object help* lbanlist login motd* newpass showcommands showignore verify suspendme";
#ifdef USE_OPERPARTJOIN
static const char* lvl_oper_cmds = "\002Level Oper\002: operjoin* operpart*";
#else
static const char* lvl_oper_cmds = "\002Level Oper\002: ";
#endif
bool SHOWCOMMANDSCommand::Exec( iClient* theClient, const string& Message )
{
bot->incStat("COMMANDS.SHOWCOMMANDS");
StringTokenizer st( Message ) ;
if( st.size() < 2)
{
bot->Notice(theClient, lvl_0_cmds);
if(theClient->isOper())
{
bot->Notice(theClient, lvl_oper_cmds);
}
// bot->Notice(theClient, cmdFooter);
return true;
}
/*
* Fetch the sqlUser record attached to this client. If there isn't one,
* they aren't logged in - tell them they should be.
*/
sqlUser* theUser = bot->isAuthed(theClient, false);
if (!theUser)
{
bot->Notice(theClient, lvl_0_cmds);
if(theClient->isOper())
{
bot->Notice(theClient, lvl_oper_cmds);
}
// bot->Notice(theClient, cmdFooter);
return true;
}
/*
* Check the channel is actually registered.
*/
sqlChannel* theChan = bot->getChannelRecord(st[1]);
if (!theChan)
{
bot->Notice(theClient,
bot->getResponse(theUser, language::chan_not_reg).c_str(),
st[1].c_str());
return false;
}
/*
* Fetch the users access level.
*/
int level = bot->getEffectiveAccessLevel(theUser, theChan, true);
int admin = bot->getAdminAccessLevel(theUser);
if (level >= 1000) bot->Notice(theClient, lvl_1000_cmds);
if (level >= 900) bot->Notice(theClient, lvl_900_cmds);
if (level >= 800) bot->Notice(theClient, lvl_800_cmds);
if (level >= 750) bot->Notice(theClient, lvl_750_cmds);
if (level >= 600) bot->Notice(theClient, lvl_600_cmds);
if (level >= 500) bot->Notice(theClient, lvl_500_cmds);
if (level >= 450) bot->Notice(theClient, lvl_450_cmds,
(level>=500) ? "+" : "");
if (level >= 400) bot->Notice(theClient, lvl_400_cmds);
if (level >= 100) bot->Notice(theClient, lvl_100_cmds);
if (level >= 75) bot->Notice(theClient, lvl_75_cmds);
if (level >= 50) bot->Notice(theClient, lvl_50_cmds,
(level>=200) ? "+" : "");
if (level == 42) bot->Notice(theClient, lvl_42_cmds);
if (level >= 25) bot->Notice(theClient, lvl_25_cmds);
if (level >= 1) bot->Notice(theClient, lvl_1_cmds,
(level>=200||admin>0||theClient->isOper()) ? "+" : "");
if (admin >= level::force)
{
bot->Notice(theClient, lvl_adm_cmds);
}
bot->Notice(theClient, lvl_0_cmds);
if (theClient->isOper())
{
bot->Notice(theClient, lvl_oper_cmds);
}
// bot->Notice(theClient, cmdFooter);
return true ;
}
} // namespace gnuworld