*/
#include "inspircd.h"
-#include "users.h"
-#include "channels.h"
-#include "modules.h"
-#include "hashcomp.h"
/* $ModDesc: Provides the NICKLOCK command, allows an oper to chage a users nick and lock them to it until they quit */
/** Handle /NICKLOCK
*/
-class cmd_nicklock : public command_t
+class CommandNicklock : public Command
{
char* dummy;
public:
- cmd_nicklock (InspIRCd* Instance) : command_t(Instance,"NICKLOCK", 'o', 2)
+ CommandNicklock (InspIRCd* Instance) : Command(Instance,"NICKLOCK", 'o', 2)
{
this->source = "m_nicklock.so";
syntax = "<oldnick> <newnick>";
+ TRANSLATE3(TR_NICK, TR_TEXT, TR_END);
}
- CmdResult Handle(const char** parameters, int pcnt, userrec *user)
+ CmdResult Handle(const char** parameters, int pcnt, User *user)
{
- userrec* source = ServerInstance->FindNick(parameters[0]);
+ User* source = ServerInstance->FindNick(parameters[0]);
irc::string server;
irc::string me;
if (!source->ForceNickChange(parameters[1]))
{
// ugh, nickchange failed for some reason -- possibly existing nick?
- userrec::QuitUser(ServerInstance, source, "Nickname collision");
+ User::QuitUser(ServerInstance, source, "Nickname collision");
}
// give them a lock flag
/** Handle /NICKUNLOCK
*/
-class cmd_nickunlock : public command_t
+class CommandNickunlock : public Command
{
public:
- cmd_nickunlock (InspIRCd* Instance) : command_t(Instance,"NICKUNLOCK", 'o', 1)
+ CommandNickunlock (InspIRCd* Instance) : Command(Instance,"NICKUNLOCK", 'o', 1)
{
this->source = "m_nicklock.so";
syntax = "<locked-nick>";
}
- CmdResult Handle (const char** parameters, int pcnt, userrec *user)
+ CmdResult Handle (const char** parameters, int pcnt, User *user)
{
- userrec* source = ServerInstance->FindNick(parameters[0]);
+ User* source = ServerInstance->FindNick(parameters[0]);
if (source)
{
source->Shrink("nick_locked");
class ModuleNickLock : public Module
{
- cmd_nicklock* cmd1;
- cmd_nickunlock* cmd2;
+ CommandNicklock* cmd1;
+ CommandNickunlock* cmd2;
char* n;
public:
ModuleNickLock(InspIRCd* Me)
: Module(Me)
{
- cmd1 = new cmd_nicklock(ServerInstance);
- cmd2 = new cmd_nickunlock(ServerInstance);
+ cmd1 = new CommandNicklock(ServerInstance);
+ cmd2 = new CommandNickunlock(ServerInstance);
ServerInstance->AddCommand(cmd1);
ServerInstance->AddCommand(cmd2);
+ Implementation eventlist[] = { I_OnUserPreNick, I_OnUserQuit, I_OnCleanup };
+ ServerInstance->Modules->Attach(eventlist, this, 3);
}
virtual ~ModuleNickLock()
List[I_OnUserPreNick] = List[I_OnUserQuit] = List[I_OnCleanup] = 1;
}
- virtual int OnUserPreNick(userrec* user, const std::string &newnick)
+ virtual int OnUserPreNick(User* user, const std::string &newnick)
{
+ if (isdigit(newnick[0])) /* allow a switch to a UID */
+ return 0;
+
if (user->GetExt("nick_locked", n))
{
user->WriteServ("447 %s :You cannot change your nickname (your nick is locked)",user->nick);
return 0;
}
- virtual void OnUserQuit(userrec* user, const std::string &reason, const std::string &oper_message)
+ virtual void OnUserQuit(User* user, const std::string &reason, const std::string &oper_message)
{
user->Shrink("nick_locked");
}
{
if(target_type == TYPE_USER)
{
- userrec* user = (userrec*)item;
+ User* user = (User*)item;
user->Shrink("nick_locked");
}
}