[SithNet-Patches] [CVS] Module gnuworld-sithnet: Change committed
Brought to you by:
darthsidious_
From: Tim I. <dar...@us...> - 2003-10-24 21:06:44
|
Committer : Tim Ireland <dar...@us...> CVSROOT : /cvsroot/sithnet-dev Module : gnuworld-sithnet Commit time: 2003-10-24 21:03:59 UTC Added files: mod.uworld/ACCESSCommand.cc mod.uworld/ADDUSERCommand.cc mod.uworld/AGLCommand.cc mod.uworld/BADCHANCommand.cc mod.uworld/CHANINFOCommand.cc mod.uworld/CHECKNETCommand.cc mod.uworld/CLEARCHANCommand.cc mod.uworld/COPYING mod.uworld/ChangeLog mod.uworld/DEAUTHCommand.cc mod.uworld/DELSERVERCommand.cc mod.uworld/FDEAUTHCommand.cc mod.uworld/GLINECommand.cc mod.uworld/GLOBALNOTCommand.cc mod.uworld/HELPCommand.cc mod.uworld/INVITECommand.cc mod.uworld/INVMECommand.cc mod.uworld/JOINCommand.cc mod.uworld/LASTCOMMCommand.cc mod.uworld/LEARNNETCommand.cc mod.uworld/LICENSE mod.uworld/LISTCommand.cc mod.uworld/LOGINCommand.cc mod.uworld/MODECommand.cc mod.uworld/MODUSERCommand.cc mod.uworld/Makefile.am mod.uworld/Makefile.in mod.uworld/NEWPASSCommand.cc mod.uworld/OMSGCommand.cc mod.uworld/OPCHANCommand.cc mod.uworld/PARTCommand.cc mod.uworld/QUOTECommand.cc mod.uworld/REMBADCHANCommand.cc mod.uworld/REMGLINECommand.cc mod.uworld/REMUSERCommand.cc mod.uworld/SAYCommand.cc mod.uworld/SCANCommand.cc mod.uworld/SERVLISTCommand.cc mod.uworld/SHUTDOWNCommand.cc mod.uworld/STATUSCommand.cc mod.uworld/SUSPENDCommand.cc mod.uworld/TRANSLATECommand.cc mod.uworld/UNSUSPENDCommand.cc mod.uworld/UPTIMECommand.cc mod.uworld/WALLOPSCommand.cc mod.uworld/WHOISCommand.cc mod.uworld/constants.h mod.uworld/glineConstants.h mod.uworld/levels.h mod.uworld/uwAGL.cc mod.uworld/uwAGL.h mod.uworld/uwGline.cc mod.uworld/uwGline.h mod.uworld/uwLog.cc mod.uworld/uwLog.h mod.uworld/uwServer.cc mod.uworld/uwServer.h mod.uworld/uwUser.cc mod.uworld/uwUser.h mod.uworld/uworld.cc mod.uworld/uworld.h mod.uworld/uworldCommands.cc mod.uworld/uworldCommands.h Log message: Initial Import of mod.uworld ---------------------- diff included ---------------------- Index: gnuworld-sithnet/mod.uworld/ACCESSCommand.cc diff -u /dev/null gnuworld-sithnet/mod.uworld/ACCESSCommand.cc:1.1 --- /dev/null Fri Oct 24 14:03:59 2003 +++ gnuworld-sithnet/mod.uworld/ACCESSCommand.cc Fri Oct 24 14:03:49 2003 @@ -0,0 +1,67 @@ +/* + * ACCESSCommand.cc + * + * Shows all the users that has access to the bot + */ + +#include <string> +#include <sstream> +#include <cstdlib> + +#include "StringTokenizer.h" +#include "uworld.h" +#include "uworldCommands.h" +#include "constants.h" + +const char ACCESSCommand_cc_rcsId[] = "$Id: ACCESSCommand.cc,v 1.1 2003/10/24 21:03:49 darthsidious_ Exp $"; + +namespace gnuworld +{ + +using std::string ; +using std::endl ; +using std::stringstream ; +using std::ends ; + +namespace uwrld +{ + +bool ACCESSCommand::Exec( iClient* theClient, const string& Message) +{ + +StringTokenizer st( Message ) ; + + +bool PrivMsg = bot->SendPrivmsg(theClient); + +string Uname; +if(st.size() > 1) + { + if(st[1].size() > 64) + { + bot->SendTo(theClient, PrivMsg,"User name can't be more than 64 chars"); + return false; + } + Uname = string_lower(st[1]); + } +else + { + Uname = ""; + } + +bot->listUsers(theClient, PrivMsg, Uname); + + +string username = "notLoggedIn"; +uwUser* theUser = bot->IsAuth(theClient); +if(theUser) username = theUser->getUserName(); +bot->addLog(username, theClient, "ACCESS %s", st.assemble(1).c_str()); + +// no msgchanlog here! + +return true; +} + +} + +} // namespace gnuworld Index: gnuworld-sithnet/mod.uworld/ADDUSERCommand.cc diff -u /dev/null gnuworld-sithnet/mod.uworld/ADDUSERCommand.cc:1.1 --- /dev/null Fri Oct 24 14:03:59 2003 +++ gnuworld-sithnet/mod.uworld/ADDUSERCommand.cc Fri Oct 24 14:03:49 2003 @@ -0,0 +1,106 @@ +/* + * ADDUSERCommand.cc + * + * Author: Matthias Crauwels <ult...@wo...> + * Date: 29-06-2002 + * + */ + +#include <string> +#include <iomanip> +#include <sstream> + +#include <cstdlib> + +#include "uworldCommands.h" +#include "StringTokenizer.h" +#include "levels.h" +#include "uworld.h" + +const char ADDUSERCommand_cc_rcsId[] = "$Id: ADDUSERCommand.cc,v 1.1 2003/10/24 21:03:49 darthsidious_ Exp $"; + +namespace gnuworld +{ + +using std::string ; +using std::endl ; +using std::stringstream ; +using std::ends ; + +namespace uwrld +{ + +bool ADDUSERCommand::Exec( iClient* theClient, const string& Message ) +{ + +// adduser <nick> <level> <pass> +StringTokenizer st( Message ) ; + +bool PrivMsg = bot->SendPrivmsg(theClient); + +unsigned short int operLevel = bot->getOperLevel(theClient); +if(operLevel < levels::adduser) + { + bot->SendTo(theClient, PrivMsg, "This command requires access level %d!", levels::adduser); + return false; + } + +if( st.size() < 4 ) + { + Usage(theClient); + return true; + } + +if(st[1].size() > 64) + { + bot->SendTo(theClient, PrivMsg, "User name can't be more than 64 chars"); + return false; + } + +uwUser* tmpUser = bot->GetUser(bot->removeSqlChars(st[1])); +if( tmpUser ) + { + bot->SendTo(theClient, PrivMsg, "This user allready exists!!"); + return false; + } + +int level = atoi(st[2].c_str()); +if( level >= bot->getOperLevel(theClient)) + { + bot->SendTo(theClient, PrivMsg, "You can NOT add users with access higher or equal to your own!"); + return false; + } + +if( (level < 0) || (level > 1000) ) + { + bot->SendTo(theClient, PrivMsg, "An access level has to been between 0 and 1000"); + return false; + } + +string pass = bot->CryptPass(st[3]).c_str(); + + +uwUser* newUser = new (std::nothrow) uwUser(bot->SQLDb); +assert( newUser != 0 ) ; + +newUser->setUserName(bot->removeSqlChars(st[1])); +newUser->setAccess(level); +newUser->setPassword(pass); +newUser->Insert(); +bot->addUser(newUser); + +bot->SendTo(theClient, PrivMsg, "Added %s with level %d", bot->removeSqlChars(st[1]).c_str(), level); + +uwUser* theUser = bot->IsAuth(theClient); +if(!theUser) return false; +bot->addLog(theUser, theClient, "ADDUSER %s %s", st[1].c_str(), st[2].c_str()); +bot->MsgChanLog("%s ( %s ) added user %s with access %d", theClient->getNickName().c_str(), + theClient->getNickUserHost().c_str(), newUser->getUserName().c_str(), newUser->getAccess()); + + +return true; +} + +} // uwrld + +} // gnuworld Index: gnuworld-sithnet/mod.uworld/AGLCommand.cc diff -u /dev/null gnuworld-sithnet/mod.uworld/AGLCommand.cc:1.1 --- /dev/null Fri Oct 24 14:03:59 2003 +++ gnuworld-sithnet/mod.uworld/AGLCommand.cc Fri Oct 24 14:03:49 2003 @@ -0,0 +1,169 @@ +/* + * AGLCommand.cc + * + * AUTO-GLINE handler + * + * $Id: AGLCommand.cc,v 1.1 2003/10/24 21:03:49 darthsidious_ Exp $ + */ + +#include <string> +#include <cstdlib> +#include <iomanip> + +#include "uworld.h" +#include "uworldCommands.h" +#include "StringTokenizer.h" +#include "levels.h" +#include "Network.h" + +namespace gnuworld +{ + +using std::string ; + +namespace uwrld +{ + +bool AGLCommand::Exec( iClient* theClient, const string& Message ) +{ + +StringTokenizer st( Message ) ; +bool PrivMsg = bot->SendPrivmsg(theClient); +short int operLevel = bot->getOperLevel(theClient); + +if( st.size() < 2 ) + { + // send help + Usage( theClient ) ; + return false ; + } + +string command = string_upper(st[1]); + +uwUser* theUser = bot->IsAuth(theClient); +if(!theUser) return false; +bot->addLog(theUser, theClient, "AGL %s", st.assemble(1).c_str()); +bot->MsgChanLog("%s ( %s ) - AGL %s", theUser->getUserName().c_str(), + theClient->getNickUserHost().c_str(), st.assemble(1).c_str()); + +if(command == "LIST") + { + if(operLevel < levels::agl::list) + { + bot->SendTo(theClient, PrivMsg, "This command requires access level %d!", levels::agl::list); + return false; + } + bot->listAGL(theClient, PrivMsg); + return true; + } + +if(command == "ADD") + { + if(operLevel < levels::agl::add) + { + bot->SendTo(theClient, PrivMsg, "This command requires access level %d!", levels::agl::add); + return false; + } + + uwAGL* theAGL = bot->findAGL(st[2]); + if(theAGL) + { + bot->SendTo(theClient, PrivMsg, "This entry allready exists! Use AGL UPDATE <host>"); + return false; + } + + if(atoi(st[3].c_str()) < 1) + { + bot->SendTo(theClient, PrivMsg, "The minimum connections you have allow is 1"); + return false; + } + + string hostname; + + iClient* targetClient = Network->findNick(st[2]); + if(targetClient) + hostname = targetClient->getRealInsecureHost(); + else + { + string::size_type atPos = st[ 2 ].find_first_of( '@' ) ; + if( string::npos == atPos ) + hostname = st[2]; + else + hostname = st[2].substr( atPos + 1 ); + } + + theAGL = new (std::nothrow) uwAGL(bot->SQLDb); + assert( theAGL != 0 ) ; + + theAGL->setAGLHost(hostname); + theAGL->setNumberConn(atoi(st[3].c_str())); + theAGL->setAddedBy(theUser->getUserName()); + theAGL->setAddedOn(::time(0)); + theAGL->Insert(); + + bot->addAGL(theAGL); + + bot->SendTo(theClient, PrivMsg, "I added a new AGL-entry for %s allowing %d connections", + theAGL->getAGLHost().c_str(), theAGL->getNumberConn()); + return true; + } + +if(command == "UPDATE") + { + if(operLevel < levels::agl::update) + { + bot->SendTo(theClient, PrivMsg, "This command requires access level %d!", levels::agl::del); + return false; + } + uwAGL* theAGL = bot->findAGL(st[2]); + if(!theAGL) + { + bot->SendTo(theClient, PrivMsg, "This entry does NOT exist!"); + return false; + } + + if(atoi(st[3].c_str()) < 1) + { + bot->SendTo(theClient, PrivMsg, "The minimum connections you have allow is 1"); + return false; + } + + theAGL->setNumberConn(atoi(st[3].c_str())); + theAGL->setAddedBy(theUser->getUserName()); + theAGL->setAddedOn(::time(0)); + theAGL->Update(); + bot->updateAGL(theAGL); + + bot->SendTo(theClient, PrivMsg, "I updated the AGL-entry for %s now allowing %d connections", + theAGL->getAGLHost().c_str(), theAGL->getNumberConn()); + return true; + } +if(command == "DEL") + { + if(operLevel < levels::agl::del) + { + bot->SendTo(theClient, PrivMsg, "This command requires access level %d!", levels::agl::del); + return false; + } + uwAGL* theAGL = bot->findAGL(st[2]); + if(!theAGL) + { + bot->SendTo(theClient, PrivMsg, "This entry does NOT exist!"); + return false; + } + theAGL->Delete(); + bot->remAGL(theAGL); + bot->SendTo(theClient, PrivMsg, "I deleted the AGL-entry for %s", theAGL->getAGLHost().c_str()); + delete theAGL; + return true; + } + + + +Usage( theClient ); +return true; +} + +} +} + Index: gnuworld-sithnet/mod.uworld/BADCHANCommand.cc diff -u /dev/null gnuworld-sithnet/mod.uworld/BADCHANCommand.cc:1.1 --- /dev/null Fri Oct 24 14:03:59 2003 +++ gnuworld-sithnet/mod.uworld/BADCHANCommand.cc Fri Oct 24 14:03:49 2003 @@ -0,0 +1,133 @@ +/* + * BADCHANCommand.cc + * $Id: BADCHANCommand.cc,v 1.1 2003/10/24 21:03:49 darthsidious_ Exp $ + * + */ + +#include <string> + +#include "StringTokenizer.h" +#include "uworld.h" +#include "levels.h" +#include "Network.h" +#include "uwGline.h" + +namespace gnuworld +{ +using std::string ; + +namespace uwrld +{ + +bool BADCHANCommand::Exec( iClient* theClient, const string& Message ) +{ + +StringTokenizer st( Message ) ; +bool PrivMsg = bot->SendPrivmsg(theClient); + +if( st.size() < 3 ) + { + Usage(theClient); + return true; + } + +unsigned short int operLevel = bot->getOperLevel(theClient); +if(operLevel < levels::gline::channel) + { + bot->SendTo(theClient, PrivMsg, "This command requires access level %d!", levels::gline::channel); + return false; + } + +int gLength = 0; +string reason = "No reason added for some reason"; +int requiredLevel = levels::gline::channel; + +Channel* theChan = Network->findChannel(st[1]); +if(!theChan) + { + bot->SendTo(theClient, PrivMsg, "You need to badchan an existing channel!"); + return false; + } + +string length; +length.assign(st[2]); +int len = strlen(st[2].c_str()); +const char unit = st[2][len-1]; + +if(!isdigit(unit)) + length = length.substr( 0, length.length() - 1 ); + +if(!IsNumeric(length)) + { + reason = st.assemble(2); + requiredLevel = levels::gline::permchannel; + } +else + { + if( st.size() < 4 ) + { + Usage(theClient); + return true; + } + + reason = st.assemble(3); + if(unit == 'd') + gLength = (atoi(length.c_str()) * 3600 * 24); + else if(unit == 'h') + gLength = (atoi(length.c_str()) * 3600); + else if(unit == 'm') + { + gLength = (atoi(length.c_str()) * 60); + } + else + gLength = (atoi(length.c_str())); + } + +if(gLength > 3600 * 24 * 2) + { + if( requiredLevel < levels::gline::longterm ) + requiredLevel = levels::gline::longterm; + } + +if(operLevel < requiredLevel) + { + bot->SendTo(theClient, PrivMsg, "This gline requires access level %d!", requiredLevel); + return false; + } + +uwGline* newGline = bot->findGline(theChan->getName()); +if(!newGline) +{ + newGline = new (std::nothrow) uwGline(bot->SQLDb); + assert (newGline != NULL); + + newGline->setAddedBy(theClient->getRealNickUserHost().c_str()); + newGline->setAddedOn(::time(0)); + newGline->setHost(theChan->getName()); + newGline->setAddedLevel(requiredLevel); + newGline->setReason(reason); + if(gLength != 0) + newGline->setExpires(::time(0) + gLength ); + else + newGline->setExpires(0); + newGline->Insert(); + + //need to load the id + newGline->loadData(newGline->getHost()); + bot->addGline(newGline); + bot->SendTo(theClient, PrivMsg, "Badchan for %s added.", newGline->getHost().c_str()); + uwUser* theUser = bot->IsAuth(theClient); + if(!theUser) return false; + bot->addLog(theUser, theClient, "BADCHAN %s", st.assemble(1).c_str()); + + bot->MsgChanLog("%s ( %s ) badchanned %s untill %s", theUser->getUserName().c_str(), theClient->getNickUserHost().c_str(), + newGline->getHost().c_str(), (newGline->getExpires() == 0) ? "PERMANENT" : bot->convertToAscTime(newGline->getExpires()) ); + + server->setGline(server->getName(), newGline->getHost(), reason, (gLength == 0) ? (3600*24*500) : gLength); + +} +return true; +} //badchancmd + +} // namespace uwrld +} // namespace gnuworld. Index: gnuworld-sithnet/mod.uworld/CHANINFOCommand.cc diff -u /dev/null gnuworld-sithnet/mod.uworld/CHANINFOCommand.cc:1.1 --- /dev/null Fri Oct 24 14:03:59 2003 +++ gnuworld-sithnet/mod.uworld/CHANINFOCommand.cc Fri Oct 24 14:03:49 2003 @@ -0,0 +1,72 @@ +/* + * CHANINFOCommand.cc + * + * Shows information about a channel + * + * $Id: CHANINFOCommand.cc,v 1.1 2003/10/24 21:03:49 darthsidious_ Exp $ + * + */ +#include <string> +//#include <cstdlib> +//#include <iomanip> + +#include "Network.h" +#include "uworld.h" +#include "StringTokenizer.h" +#include "levels.h" + + +namespace gnuworld +{ + +using std::string ; + +namespace uwrld +{ + +bool CHANINFOCommand::Exec( iClient* theClient, const string& Message ) +{ +StringTokenizer st( Message ); +bool PrivMsg = bot->SendPrivmsg(theClient); + +if( st.size() < 2 ) + { + Usage(theClient); + return true; + } + +short int operLevel = bot->getOperLevel(theClient); +if(operLevel < levels::chaninfo) + { + bot->SendTo(theClient, PrivMsg, "This command requires access level %d!", levels::opchan); + return false; + } + +Channel* theChan = Network->findChannel(st[1]); +if(!theChan) + { + bot->SendTo(theClient, PrivMsg, "Unable to find channel %s", st[1].c_str()); + return true; + } + +bot->SendTo(theClient, PrivMsg, "Channel %s is mode %s", st[1].c_str(), theChan->getModeString().c_str()); +bot->SendTo(theClient, PrivMsg, "Created at time: %s", bot->convertToAscTime(theChan->getCreationTime())); +bot->SendTo(theClient, PrivMsg, "Number of channel users: %d", theChan->size()); + +#ifdef TOPIC_TRACK + bot->SendTo(theClient, PrivMsg, "Topic: %s", theChan->getTopic().c_str()); +#endif + +string username = "notLoggedIn"; +uwUser* theUser = bot->IsAuth(theClient); +if(theUser) username = theUser->getUserName(); +bot->addLog(username, theClient, "CHANINFO %s", st[1].c_str()); +bot->MsgChanLog("%s ( %s ) - CHANINFO %s", username.c_str(), + theClient->getNickUserHost().c_str(), st[1].c_str()); + + +return true ; +} + +} +} // namespace gnuworld Index: gnuworld-sithnet/mod.uworld/CHECKNETCommand.cc diff -u /dev/null gnuworld-sithnet/mod.uworld/CHECKNETCommand.cc:1.1 --- /dev/null Fri Oct 24 14:03:59 2003 +++ gnuworld-sithnet/mod.uworld/CHECKNETCommand.cc Fri Oct 24 14:03:49 2003 @@ -0,0 +1,51 @@ +/* + * CHECKNETCommand.cc + * $Id: CHECKNETCommand.cc,v 1.1 2003/10/24 21:03:49 darthsidious_ Exp $ + * + */ + +#include <string> + +#include "StringTokenizer.h" +#include "uworld.h" +#include "levels.h" + +namespace gnuworld +{ +using std::string ; + +namespace uwrld +{ + +bool CHECKNETCommand::Exec( iClient* theClient, const string& Message ) +{ + +StringTokenizer st( Message ) ; +bool PrivMsg = bot->SendPrivmsg(theClient); + +if( st.size() < 1 ) + { + Usage(theClient); + return true; + } + +unsigned short int operLevel = bot->getOperLevel(theClient); +if(operLevel < levels::checknet) + { + bot->SendTo(theClient, PrivMsg, "This command requires access level %d!", levels::checknet); + return false; + } + +bot->SendTo(theClient, PrivMsg, "Listing missing servers..."); +bot->listMissingServers(theClient, PrivMsg); + +uwUser* theUser = bot->IsAuth(theClient); +if(!theUser) return false; +bot->addLog(theUser, theClient, "CHECKNET"); +bot->MsgChanLog("%s ( %s ) - CHECKNET", theUser->getUserName().c_str(), theClient->getNickUserHost().c_str() ); + +return true; +} + +} // namespace uwrld +} // namespace gnuworld. Index: gnuworld-sithnet/mod.uworld/CLEARCHANCommand.cc diff -u /dev/null gnuworld-sithnet/mod.uworld/CLEARCHANCommand.cc:1.1 --- /dev/null Fri Oct 24 14:03:59 2003 +++ gnuworld-sithnet/mod.uworld/CLEARCHANCommand.cc Fri Oct 24 14:03:49 2003 @@ -0,0 +1,238 @@ +/* + * CLEARCHANCommand.cc + * + * Clears all/some channel modes + * + */ + +#include <string> +#include <cstdlib> +#include <iomanip> +#include "Network.h" +#include "uworld.h" +#include "uworldCommands.h" +#include "StringTokenizer.h" +#include "levels.h" + +const char CLEARCHANCommand_cc_rcsId[] = "$Id: CLEARCHANCommand.cc,v 1.1 2003/10/24 21:03:49 darthsidious_ Exp $"; + +namespace gnuworld +{ + +using std::string ; +using std::vector ; +using gnuworld::iClient; + +namespace uwrld +{ + +bool CLEARCHANCommand::Exec( iClient* theClient, const string& Message ) +{ +StringTokenizer st( Message ) ; +bool Desynch = false; +bool PrivMsg = bot->SendPrivmsg(theClient); + +short int operLevel = bot->getOperLevel(theClient); +if(operLevel < levels::clearchan) + { + bot->SendTo(theClient, PrivMsg, "This command requires access level %d!", levels::clearchan); + return false; + } + +if( st.size() < 2 ) + { + Usage( theClient ) ; + return true ; + } + + +Channel* theChan = Network->findChannel( st[ 1 ] ) ; +if( NULL == theChan ) + { + bot->Notice( theClient, "Unable to find channel %s", + st[ 1 ].c_str() ) ; + return true ; + } + +string doModes; //This holds the modes the user asked to be removed +string remModes = ""; //Holds the modes that we are removing +string args = ""; //Holds the arguments for the remModes + +uwUser* theUser = bot->IsAuth(theClient); +if(!theUser) return false; +bot->addLog(theUser, theClient, "CLEARCHAN %s", theChan->getName().c_str()); +bot->MsgChanLog("%s ( %s ) - CLEARCHAN %s", theUser->getUserName().c_str(), + theClient->getNickUserHost().c_str(), st.assemble(1).c_str()); + +//Check if the user specified the modes, if not assume he ment all of the modes +if(st.size() == 2) + doModes = "OBKLIM"; +else if(!strcasecmp(string_upper(st[ 2 ]).c_str(),"ALL")) + doModes = "OBKLINMSPT"; +else if(!strcasecmp(string_upper(st [ 2]).c_str(),"-D")) + Desynch = true; +else + doModes = string_upper(st [ 2 ]); + +if(Desynch) + { + vector<iClient*> KickVec; + bot->Join(theChan->getName(),"+i",0,true); + //bot->Mode(theChan,Channel::MODE_I); + for( Channel::const_userIterator ptr = theChan->userList_begin(); + ptr != theChan->userList_end() ; ++ptr ) + { + + if ( !ptr->second->getClient()->getMode(iClient::MODE_SERVICES) ) + { + KickVec.push_back(ptr->second->getClient()); + } + else + { + /* + its a +k user, need to make sure its not us + */ + if(strcmp(ptr->second->getClient()->getCharYYXXX().c_str(), + bot->getCharYYXXX().c_str())) + { + bot->Message(ptr->second->getClient(),"OPERPART %s" + ,theChan->getName().c_str()); + } + } + } + if(KickVec.size() > 0) + { + string reason = "Desynch clearing"; + bot->Kick(theChan,KickVec,reason); + } + bot->Part(theChan->getName()); + return true; + } + +for( string::size_type modePos = 0 ; modePos < doModes.size() ; ++modePos ) + { + switch( doModes[ modePos ] ) + { + case 'B': //Ban? + { + string ban; + string modes = "-"; + string args = ""; + Channel::banListSizeType end = theChan->banList_size(); + Channel::banIterator ptr = theChan->banList_begin() ; + for(Channel::banListSizeType i=0; i != end ;i++) + { + ban = *ptr; + ptr++; + args += ban + ' '; + modes+= "b"; + theChan->removeBan(ban); + if(modes.size() > 5) //if we got more than 5 , set the mode and continue + { + bot->ModeAsServer( theChan, modes + ' ' + args ) ; + modes = "-"; + args = ""; + } + } + if(!args.empty()) + bot->ModeAsServer( theChan, modes + ' ' + args ) ; + break; + } + case 'O': //Chanops? + { + string modes = "-"; + string args = ""; + for( Channel::const_userIterator ptr = theChan->userList_begin(); + ptr != theChan->userList_end() ; ++ptr ) + { + if( ptr->second->getMode(ChannelUser::MODE_O)) + { + /* Don't deop +k things */ + if ( !ptr->second->getClient()->getMode(iClient::MODE_SERVICES) ) + { + modes+= 'o'; + args+= ptr->second->getCharYYXXX() + " "; + ptr->second->removeMode(ChannelUser::MODE_O); + } + } // If opped. + if(modes.size() > 5) //if we got more than 5 , set the mode and continue + { + bot->ModeAsServer( theChan, modes + ' ' + args ) ; + modes = "-"; + args = ""; + } + } + if(!args.empty()) + bot->ModeAsServer(theChan,modes + " " + args); + } + break; + case 'K': //Key? + if(theChan->getMode(Channel::MODE_K)) + { + theChan->removeMode(Channel::MODE_K); + remModes+= "k"; + args+= theChan->getKey() + " "; + theChan->setKey(""); + } + break; + case 'I': //Invite? + if(theChan->getMode(Channel::MODE_I)) + { + theChan->removeMode(Channel::MODE_I); + remModes+= "i"; + } + break; + case 'L': //Limit? + if(theChan->getMode(Channel::MODE_L)) + { + theChan->removeMode(Channel::MODE_L); + remModes+= "l"; + //args+= theChan->getLimit() + " "; + } + break; + case 'P': //Private? + if(theChan->getMode(Channel::MODE_P)) + { + theChan->removeMode(Channel::MODE_P); + remModes+= "p"; + } + break; + case 'S': //Secret? + if(theChan->getMode(Channel::MODE_S)) + { + theChan->removeMode(Channel::MODE_S); + remModes+= "s"; + } + break; + case 'M': //Moderated? + if(theChan->getMode(Channel::MODE_M)) + { + theChan->removeMode(Channel::MODE_M); + remModes+= "m"; + } + break; + case 'N': //No External Messages? + if(theChan->getMode(Channel::MODE_N)) + { + theChan->removeMode(Channel::MODE_N); + remModes+= "n"; + } + break; + case 'T': //Topic? + if(theChan->getMode(Channel::MODE_T)) + { + theChan->removeMode(Channel::MODE_T); + remModes+= "t"; + } + break; + default:; + } } +if(!remModes.empty()) + bot->ModeAsServer(theChan,"-" + remModes + " " + args); + + +return true; +} + +} +} Index: gnuworld-sithnet/mod.uworld/COPYING diff -u /dev/null gnuworld-sithnet/mod.uworld/COPYING:1.1 --- /dev/null Fri Oct 24 14:04:00 2003 +++ gnuworld-sithnet/mod.uworld/COPYING Fri Oct 24 14:03:49 2003 @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + 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 + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. Index: gnuworld-sithnet/mod.uworld/ChangeLog diff -u /dev/null gnuworld-sithnet/mod.uworld/ChangeLog:1.1 --- /dev/null Fri Oct 24 14:04:00 2003 +++ gnuworld-sithnet/mod.uworld/ChangeLog Fri Oct 24 14:03:49 2003 @@ -0,0 +1,17 @@ +2002-06-29 Jochen Meesters <Den...@pa...> + + * Added logging of commands to consolechan + * Levelcheck on commands added by ULtimaTe_ (the one who is to lazy to use this ChangeLog + * QUOTECommand and SAYCommand added + * Same goes for JOINCommand and PARTCommand + * And HELPCommand + +2002-06-28 Jochen Meesters <Den...@pa...> + + * ChangeLog: Erm, added one :-) + * WHOISCommand.cc: Guess what? Yeah, added. + * SCANCommand.cc: Hmmz, added (duh). + * TRANSLATECommand.cc: Sigh, why even ask? + * SERVLISTCommand.cc: bleh. + * CLEARCHANCommand.cc: bleh² + * INVITECommand.cc: ' ' (left blank on purpose) Index: gnuworld-sithnet/mod.uworld/DEAUTHCommand.cc diff -u /dev/null gnuworld-sithnet/mod.uworld/DEAUTHCommand.cc:1.1 --- /dev/null Fri Oct 24 14:04:00 2003 +++ gnuworld-sithnet/mod.uworld/DEAUTHCommand.cc Fri Oct 24 14:03:49 2003 @@ -0,0 +1,47 @@ +/* + * DEAUTHCommand.cc + */ + +//#include <string> + +#include "StringTokenizer.h" +#include "uworld.h" +#include "levels.h" + +namespace gnuworld +{ +using std::string ; + +namespace uwrld +{ + +bool DEAUTHCommand::Exec( iClient* theClient, const string& Message ) +{ + +StringTokenizer st( Message ) ; +bool PrivMsg = bot->SendPrivmsg(theClient); + +if( st.size() < 1 ) + { + Usage(theClient); + return true; + } + +uwUser* theUser = bot->IsAuth(theClient); +if(!theUser) + { + bot->SendTo(theClient, PrivMsg, "You have to be logged in before you can DEAUTH"); + return false; + } + +bot->addLog(theUser, theClient, "DEAUTH"); +bot->MsgChanLog("%s ( %s ) - DEAUTH %s", theUser->getUserName().c_str(), + theClient->getNickUserHost().c_str(), st.assemble(1).c_str()); + +bot->deAuthUser(theClient->getCharYYXXX()); +bot->SendTo(theClient, PrivMsg, "You have successfully been deauthed! Cya!"); +return true; +} + +} // namespace uwrld +} // namespace gnuworld. Index: gnuworld-sithnet/mod.uworld/DELSERVERCommand.cc diff -u /dev/null gnuworld-sithnet/mod.uworld/DELSERVERCommand.cc:1.1 --- /dev/null Fri Oct 24 14:04:00 2003 +++ gnuworld-sithnet/mod.uworld/DELSERVERCommand.cc Fri Oct 24 14:03:49 2003 @@ -0,0 +1,68 @@ +/* + * DELSERVERCommand.cc + * $Id: DELSERVERCommand.cc,v 1.1 2003/10/24 21:03:49 darthsidious_ Exp $ + * + */ + +#include <string> + +#include "StringTokenizer.h" +#include "uworld.h" +#include "levels.h" +#include "Network.h" + +namespace gnuworld +{ +using std::string ; + +namespace uwrld +{ + +bool DELSERVERCommand::Exec( iClient* theClient, const string& Message ) +{ + +StringTokenizer st( Message ) ; +bool PrivMsg = bot->SendPrivmsg(theClient); + +if( st.size() < 2 ) + { + Usage(theClient); + return true; + } + +unsigned short int operLevel = bot->getOperLevel(theClient); +if(operLevel < levels::delserver) + { + bot->SendTo(theClient, PrivMsg, "This command requires access level %d!", levels::delserver); + return false; + } + +uwServer* remServer = bot->findServer(st[1]); +if(!remServer) + { + bot->SendTo(theClient, PrivMsg, "No such server"); + return false; + } + +iServer* netServer = Network->findServerName(st[1]); +if(netServer) + { + bot->SendTo(theClient, PrivMsg, "Would you delink this server first please!"); + return false; + } + +bot->remServer(remServer); +bot->SendTo(theClient, PrivMsg, "Removed %s from my memory!", st[1].c_str()); + +uwUser* theUser = bot->IsAuth(theClient); +if(!theUser) return false; +bot->addLog(theUser, theClient, "DELSERVER %s", st[1].c_str()); +bot->MsgChanLog("%s ( %s ) - DELSERVER %s", theUser->getUserName().c_str(), + theClient->getNickUserHost().c_str(), st[1].c_str()); + + +return true; +} + +} // namespace uwrld +} // namespace gnuworld. Index: gnuworld-sithnet/mod.uworld/FDEAUTHCommand.cc diff -u /dev/null gnuworld-sithnet/mod.uworld/FDEAUTHCommand.cc:1.1 --- /dev/null Fri Oct 24 14:04:00 2003 +++ gnuworld-sithnet/mod.uworld/FDEAUTHCommand.cc Fri Oct 24 14:03:49 2003 @@ -0,0 +1,70 @@ +/* + * FDEAUTHCommand.cc + */ + +#include <string> + +#include "StringTokenizer.h" +#include "uworld.h" +#include "levels.h" +#include "Network.h" + +namespace gnuworld +{ +using std::string ; + +namespace uwrld +{ + +bool FDEAUTHCommand::Exec( iClient* theClient, const string& Message ) +{ + +StringTokenizer st( Message ) ; +bool PrivMsg = bot->SendPrivmsg(theClient); + +if( st.size() < 2 ) + { + Usage(theClient); + return true; + } + +short int operLevel = bot->getOperLevel(theClient); +if(operLevel < levels::fdeauth) + { + bot->SendTo(theClient, PrivMsg, "This command requires access level %d!", levels::fdeauth); + return false; + } + +iClient* targetClient = Network->findNick(st[1]); +if(!targetClient) + { + bot->SendTo(theClient, PrivMsg, "Can't find nick %s", st[1].c_str()); + return false; + } + +short int targetLevel = bot->getOperLevel(targetClient); +if(operLevel < targetLevel) + { + bot->SendTo(theClient, PrivMsg, "You can not deauthenticate users with access higher than your own!"); + return false; + } + +const uwUser* authUser = bot->IsAuth(targetClient); +if(!authUser) + { + bot->SendTo(theClient, PrivMsg, "User %s is not authed", st[1].c_str()); + return false; + } + +uwUser* theUser = bot->IsAuth(theClient); +if(!theUser) return false; +bot->addLog(theUser, theClient, "FDEAUTH %s", st[1].c_str()); +bot->MsgChanLog("%s ( %s ) - FDEAUTH %s", theUser->getUserName().c_str(), + theClient->getNickUserHost().c_str(), st.assemble(1).c_str()); + +bot->deAuthUser(targetClient->getCharYYXXX()); +return true; +} + +} // namespace uwrld +} // namespace gnuworld. Index: gnuworld-sithnet/mod.uworld/GLINECommand.cc diff -u /dev/null gnuworld-sithnet/mod.uworld/GLINECommand.cc:1.1 --- /dev/null Fri Oct 24 14:04:00 2003 +++ gnuworld-sithnet/mod.uworld/GLINECommand.cc Fri Oct 24 14:03:49 2003 @@ -0,0 +1,304 @@ +/* + * GLINECommand.cc + * $Id: GLINECommand.cc,v 1.1 2003/10/24 21:03:49 darthsidious_ Exp $ + * + */ + +#include <string> + +#include "StringTokenizer.h" +#include "uworld.h" +#include "levels.h" +#include "Network.h" +#include "uwGline.h" + +namespace gnuworld +{ +using std::string ; + +namespace uwrld +{ + +bool GLINECommand::Exec( iClient* theClient, const string& Message ) +{ + +StringTokenizer st( Message ) ; +bool PrivMsg = bot->SendPrivmsg(theClient); + +if( st.size() < 3 ) + { + Usage(theClient); + return true; + } + +unsigned short int operLevel = bot->getOperLevel(theClient); +if(operLevel < levels::gline::standard) + { + bot->SendTo(theClient, PrivMsg, "This command requires access level %d!", levels::gline::standard); + return false; + } + +StringTokenizer::size_type pos = 1 ; +string username; +string hostname; +int gLength = 3600; +string reason = "No reason added for some reason"; +bool nickname = false; +bool channel = false; + +if(st[1][0] == '#') + channel = true; + +if(!channel) +{ + +string::size_type atPos = st[ pos ].find_first_of( '@' ) ; +if( string::npos == atPos ) + { + // specified nickname + iClient* targetClient = Network->findNick(st[1]); + if (targetClient) + { + nickname = true; + hostname = targetClient->getRealInsecureHost(); + username = targetClient->getUserName(); + } + } +else + { + username = st[ pos ].substr( 0, atPos ) ; + hostname = st[ pos ].substr( atPos + 1 ) ; + } + +int requiredLevel = levels::gline::standard; + +if(!nickname) +{ + int parseRes = bot->parseHost(hostname); + switch (parseRes) + { + case 0: // standard + requiredLevel = levels::gline::standard; + break; + case 1: // ablock + requiredLevel = levels::gline::ablock; + break; + case 2: // bblock + requiredLevel = levels::gline::bblock; + break; + case 3: // cblock + requiredLevel = levels::gline::cblock; + break; + case 4: // tld + requiredLevel = levels::gline::tld; + break; + case 5: // isp + requiredLevel = levels::gline::isp; + break; + + + case 20: // err_illegalhost + bot->SendTo(theClient, PrivMsg, "I don't think that would be a valid hostname!"); + return false; + + } //switch +} // if(!nickname) + +string length; +length.assign(st[2]); +int len = strlen(st[2].c_str()); +const char unit = st[2][len-1]; + +if(!isdigit(unit)) + length = length.substr( 0, length.length() - 1 ); + +if(!IsNumeric(length)) + { + reason = st.assemble(2); + } +else + { + if( st.size() < 4 ) + { + Usage(theClient); + return true; + } + + reason = st.assemble(3); + if(unit == 'd') + gLength = (atoi(length.c_str()) * 3600 * 24); + else if(unit == 'h') + gLength = (atoi(length.c_str()) * 3600); + else if(unit == 'm') + { + gLength = (atoi(length.c_str()) * 60); + } + else + gLength = (atoi(length.c_str())); + } + +if(gLength > 3600 * 24 * 2) + { + if( requiredLevel < levels::gline::longterm ) + requiredLevel = levels::gline::longterm; + } + +if(operLevel < requiredLevel) + { + bot->SendTo(theClient, PrivMsg, "This gline requires access level %d!", requiredLevel); + return false; + } + +int matches = Network->countMatchingUserHost(username + "@" + hostname); +char theReason[255]; +sprintf(theReason, "[%d] %s", matches, reason.c_str()); + +/* debugging stuff +bot->MsgChanLog("DEBUG: username = %s", username.c_str()); +bot->MsgChanLog("DEBUG: hostname = %s (%s IP) and has %d dots", hostname.c_str(), bot->isIP(hostname) ? "IS" : "is GEEN", + bot->CountDots(hostname) ); +bot->MsgChanLog("DEBUG: length = %s%c", length.c_str(), unit); +bot->MsgChanLog("DEBUG: gLength = %d", gLength); +bot->MsgChanLog("DEBUG: reason = %s", reason.c_str()); +bot->MsgChanLog("DEBUG: matches = %d", matches); +*/ + +uwGline* newGline = bot->findGline(username + "@" + hostname); +if(!newGline) +{ + newGline = new (std::nothrow) uwGline(bot->SQLDb); + assert (newGline != NULL); + + newGline->setAddedBy(theClient->getRealNickUserHost().c_str()); + newGline->setAddedOn(::time(0)); + newGline->setHost(username + "@" + hostname); + newGline->setAddedLevel(requiredLevel); + newGline->setReason(theReason); + newGline->setExpires(::time(0) + gLength ); + newGline->Insert(); + + //need to load the id + newGline->loadData(newGline->getHost()); + bot->addGline(newGline); + bot->SendTo(theClient, PrivMsg, "Gline %s added.", newGline->getHost().c_str()); + uwUser* theUser = bot->IsAuth(theClient); + if(!theUser) return false; + bot->addLog(theUser, theClient, "GLINE %s", st.assemble(1).c_str()); + bot->MsgChanLog("%s ( %s ) added gline %s untill %s", theUser->getUserName().c_str(), theClient->getNickUserHost().c_str(), + newGline->getHost().c_str(), bot->convertToAscTime(newGline->getExpires())); + + server->setGline(server->getName(), newGline->getHost(), theReason, gLength); + +} +return true; +} // if(!channel) + +// wel een channel-gline +if(operLevel < levels::gline::channel) + { + bot->SendTo(theClient, PrivMsg, "This command requires access level %d!", levels::gline::channel); + return false; + } + +Channel* theChan = Network->findChannel(st[1]); +if(!theChan) + { + bot->SendTo(theClient, PrivMsg, "Can NOT gchan a non-existing channel"); + return false; + } + +bool longterm = false; +string length; +length.assign(st[2]); +int len = strlen(st[2].c_str()); +const char unit = st[2][len-1]; + +if(!isdigit(unit)) + length = length.substr( 0, length.length() - 1 ); + +if(!IsNumeric(length)) + { + reason = st.assemble(2); + } +else + { + if( st.size() < 4 ) + { + Usage(theClient); + return true; + } + + reason = st.assemble(3); + if(unit == 'd') + gLength = (atoi(length.c_str()) * 3600 * 24); + else if(unit == 'h') + gLength = (atoi(length.c_str()) * 3600); + else if(unit == 'm') + { + gLength = (atoi(length.c_str()) * 60); + } + else + gLength = (atoi(length.c_str())); + } + +if(gLength > 3600 * 24 * 2) + { + if( operLevel < levels::gline::longterm ) + { + bot->SendTo(theClient, PrivMsg, "This command requires access level %d!", levels::gline::longterm); + return false; + } + longterm = true; + } + +uwGline* tmpGline; +iClient* tmpClient; +int affected = 0; +for( Channel::const_userIterator ptr = theChan->userList_begin() ; ptr != theChan->userList_end() ; ++ptr ) + { + tmpClient = ptr->second->getClient(); + if( !tmpClient->isOper() && !tmpClient->getMode(iClient::MODE_SERVICES) && !bot->IsAuth(tmpClient) ) + { + hostname = tmpClient->getRealInsecureHost(); + username = tmpClient->getUserName(); + if(username.substr(0,1) == "~") username = "~*"; + + int matches = Network->countMatchingUserHost(username + "@" + hostname); + char theReason[255]; + sprintf(theReason, "[%d] %s", matches, reason.c_str()); + + tmpGline = bot->findGline(username + "@" + hostname); + if(!tmpGline) + { + tmpGline = new (std::nothrow) uwGline(bot->SQLDb); + assert (tmpGline != NULL); + + tmpGline->setAddedBy(theClient->getRealNickUserHost().c_str()); + tmpGline->setAddedOn(::time(0)); + tmpGline->setHost(username + "@" + hostname); + tmpGline->setAddedLevel(longterm ? (levels::gline::longterm) : (levels::gline::channel)); + tmpGline->setReason(theReason); + tmpGline->setExpires(::time(0) + gLength ); + tmpGline->Insert(); + + //need to load the id + tmpGline->loadData(tmpGline->getHost()); + bot->addGline(tmpGline); + server->setGline(server->getName(), tmpGline->getHost(), theReason, gLength); + affected++; + } + } + } + +bot->SendTo(theClient, PrivMsg, "Gline for channel %s added. (%d users affected)", theChan->getName().c_str(), affected); +uwUser* theUser = bot->IsAuth(theClient); +if(!theUser) return false; +bot->addLog(theUser, theClient, "GLINE %s", st.assemble(1).c_str()); + bot->MsgChanLog("%s ( %s ) added gline for channel %s affecting %d users", theUser->getUserName().c_str(), + theClient->getNickUserHost().c_str(), theChan->getName().c_str(), affected); + +return true; +} //glinecmd + +} // namespace uwrld +} // namespace gnuworld. Index: gnuworld-sithnet/mod.uworld/GLOBALNOTCommand.cc diff -u /dev/null gnuworld-sithnet/mod.uworld/GLOBALNOTCommand.cc:1.1 --- /dev/null Fri Oct 24 14:04:00 2003 +++ gnuworld-sithnet/mod.uworld/GLOBALNOTCommand.cc Fri Oct 24 14:03:49 2003 @@ -0,0 +1,73 @@ +/* + * GLOBALCommand.cc + * $Id: + * + */ + +#include <string> + +#include "StringTokenizer.h" +#include "uworld.h" +#include "levels.h" +#include "iServer.h" +#include "Network.h" +#include "server.h" + + +namespace gnuworld +{ +using std::string ; + +namespace uwrld +{ + +bool GLOBALCommand::Exec( iClient* theClient, const string& Message ) +{ + +StringTokenizer st( Message ) ; +bool PrivMsg = bot->SendPrivmsg(theClient); + +if( st.size() < 2 ) + { + Usage(theClient); + return true; + } + +unsigned short int operLevel = bot->getOperLevel(theClient); +if(operLevel < levels::global) + { + bot->SendTo(theClient, PrivMsg, "This command requires access level %d!", levels::global); + return false; + } + +xNetwork::serverIterator ptr = Network->server_begin(); +xNetwork::serverIterator end = Network->server_end(); + +for( ; ptr != end ; ptr++ ) + { + iServer* CurServer = ptr->second ; + if( NULL == CurServer) + { + continue ; + } + + if(!server->isJuped(CurServer)) + { + bot->Write("%s%s O $%s : \002%s\002 %s", + bot->getCharYY(), bot->getCharXXX(), + CurServer->getName().c_str(), "-=GLOBAL NOTICE=-", st.assemble(1).c_str()); + } + } + +uwUser* theUser = bot->IsAuth(theClient); +if(!theUser) return false; +bot->addLog(theUser, theClient, "GLOBALNOTICE %s", st.assemble(1).c_str()); +bot->MsgChanLog("%s ( %s ) - GLOBALNOTICE %s", theUser->getUserName().c_str(), + theClient->getNickUserHost().c_str(), st.assemble(1).c_str()); + + +return true; +} + +} // namespace uwrld +} // namespace gnuworld. Index: gnuworld-sithnet/mod.uworld/HELPCommand.cc diff -u /dev/null gnuworld-sithnet/mod.uworld/HELPCommand.cc:1.1 --- /dev/null Fri Oct 24 14:04:00 2003 +++ gnuworld-sithnet/mod.uworld/HELPCommand.cc Fri Oct 24 14:03:49 2003 @@ -0,0 +1,98 @@ +/* + * HELPCommand.cc + */ + +#include <string> +#include <sstream> +#include <cstdlib> + +#include "StringTokenizer.h" +#include "uworld.h" +#include "uworldCommands.h" +#include "constants.h" + +const char HELPCommand_cc_rcsId[] = "$Id: HELPCommand.cc,v 1.1 2003/10/24 21:03:49 darthsidious_ Exp $"; + +namespace gnuworld +{ + +using std::string ; +using std::endl ; +using std::stringstream ; +using std::ends ; + +namespace uwrld +{ + +bool HELPCommand::Exec( iCli... [truncated message content] |