/* $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 (dest->IsModeSet('r'))
{
/* user is registered */
- source->WriteServ("307 %s %s :is a registered nick", source->nick, dest->nick);
+ ServerInstance->SendWhoisLine(source, dest, 307, "%s %s :is a registered nick", source->nick, dest->nick);
}
}
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 Version GetVersion()
{
- return Version(1,0,0,0,VF_COMMON|VF_VENDOR);
+ return Version(1,1,0,0,VF_COMMON|VF_VENDOR,API_VERSION);
}
};