[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] |