#include "users.h"
#include "channels.h"
#include "modules.h"
-#include "commands.h"
-#include "hashcomp.h"
#include "inspircd.h"
static bool kludgeme = false;
/* $ModDesc: Povides support for services +r user/chan modes and more */
+/** Channel mode +r - mark a channel as identified
+ */
class Channel_r : public ModeHandler
{
}
};
+/** User mode +r - mark a user as identified
+ */
class User_r : public ModeHandler
{
{
if ((kludgeme) || (ServerInstance->ULine(source->nick)) || (ServerInstance->ULine(source->server)) || (!*source->server || (strchr(source->nick,'.'))))
{
- ServerInstance->Log(DEBUG,"Allowing umode +r, server and nick are: '%s','%s'",source->nick,source->server);
- dest->SetMode('r',adding);
- return MODEACTION_ALLOW;
+ if ((adding && !dest->IsModeSet('r')) || (!adding && dest->IsModeSet('r')))
+ {
+ ServerInstance->Log(DEBUG,"Allowing umode +r, server and nick are: '%s','%s'",source->nick,source->server);
+ dest->SetMode('r',adding);
+ return MODEACTION_ALLOW;
+ }
+ return MODEACTION_DENY;
}
else
{
}
};
+/** Channel mode +R - registered users only
+ */
class Channel_R : public ModeHandler
{
public:
}
};
+/** User mode +R - only allow PRIVMSG and NOTICE from registered users
+ */
class User_R : public ModeHandler
{
public:
}
};
+/** Channel mode +M - only allow privmsg and notice to channel from registered users
+ */
class Channel_M : public ModeHandler
{
public:
{
if (channel->IsModeSet('M'))
{
- channel->SetMode('M',true);
+ channel->SetMode('M',false);
return MODEACTION_ALLOW;
}
}
}
};
+/** Dreamnforge-like services support
+ */
class ModuleServices : public Module
{
if (target_type == TYPE_USER)
{
userrec* u = (userrec*)dest;
- if ((u->IsModeSet('R')) && (user->IsModeSet('r')))
+ if ((u->IsModeSet('R')) && (!user->IsModeSet('r')))
{
if ((ServerInstance->ULine(user->nick)) || (ServerInstance->ULine(user->server)))
{
return OnUserPreMessage(user,dest,target_type,text,status);
}
- virtual int OnUserPreJoin(userrec* user, chanrec* chan, const char* cname)
+ virtual int OnUserPreJoin(userrec* user, chanrec* chan, const char* cname, std::string &privs)
{
if (chan)
{
if (chan->IsModeSet('R'))
{
- if (user->IsModeSet('r'))
+ if (!user->IsModeSet('r'))
{
if ((ServerInstance->ULine(user->nick)) || (ServerInstance->ULine(user->server)))
{
virtual ~ModuleServices()
{
+ kludgeme = true;
+ ServerInstance->Modes->DelMode(m1);
+ ServerInstance->Modes->DelMode(m2);
+ ServerInstance->Modes->DelMode(m3);
+ ServerInstance->Modes->DelMode(m4);
+ ServerInstance->Modes->DelMode(m5);
DELETE(m1);
DELETE(m2);
DELETE(m3);
virtual Version GetVersion()
{
- return Version(1,0,0,0,VF_STATIC|VF_VENDOR);
+ return Version(1,0,0,0,VF_COMMON|VF_VENDOR);
}
};