mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-12 20:19:02 -04:00
Backport: Add m_commonchans.so (documented in example conf, no wiki yet) resolves bug #342 feature request by Casey
git-svn-id: http://svn.inspircd.org/repository/branches/1_1_stable@7833 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
parent
0e3b15b0f1
commit
2e84958e19
@ -1360,6 +1360,12 @@
|
||||
# command is issued, use with care.
|
||||
#<module name="m_clones.so">
|
||||
|
||||
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
|
||||
# Common channels module: Adds user mode +c, which, when set, requires
|
||||
# that users must share a common channel with you to PRIVMSG or NOTICE
|
||||
# you.
|
||||
#<module name="m_commonchans.so">
|
||||
|
||||
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
|
||||
# Conn-Join: Allows you to force users to join one or more channels
|
||||
# automatically upon connecting to the server.
|
||||
|
102
src/modules/m_commonchans.cpp
Normal file
102
src/modules/m_commonchans.cpp
Normal file
@ -0,0 +1,102 @@
|
||||
/* +------------------------------------+
|
||||
* | Inspire Internet Relay Chat Daemon |
|
||||
* +------------------------------------+
|
||||
*
|
||||
* InspIRCd: (C) 2002-2007 InspIRCd Development Team
|
||||
* See: http://www.inspircd.org/wiki/index.php/Credits
|
||||
*
|
||||
* This program is free but copyrighted software; see
|
||||
* the file COPYING for details.
|
||||
*
|
||||
* ---------------------------------------------------
|
||||
*/
|
||||
|
||||
#include "inspircd.h"
|
||||
#include <stdio.h>
|
||||
#include <string>
|
||||
#include "users.h"
|
||||
#include "channels.h"
|
||||
#include "modules.h"
|
||||
#include "configreader.h"
|
||||
|
||||
/* $ModDesc: Adds user mode +c, which if set, users must be on a common channel with you to private message you */
|
||||
|
||||
/** Handles user mode +c
|
||||
*/
|
||||
class PrivacyMode : public ModeHandler
|
||||
{
|
||||
public:
|
||||
PrivacyMode(InspIRCd* Instance) : ModeHandler(Instance, 'c', 0, 0, false, MODETYPE_USER, false) { }
|
||||
|
||||
ModeAction OnModeChange(userrec* source, userrec* dest, chanrec* channel, std::string ¶meter, bool adding)
|
||||
{
|
||||
if (adding)
|
||||
{
|
||||
if (!dest->IsModeSet('c'))
|
||||
{
|
||||
dest->SetMode('c',true);
|
||||
return MODEACTION_ALLOW;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (dest->IsModeSet('c'))
|
||||
{
|
||||
dest->SetMode('c',false);
|
||||
return MODEACTION_ALLOW;
|
||||
}
|
||||
}
|
||||
|
||||
return MODEACTION_DENY;
|
||||
}
|
||||
};
|
||||
|
||||
class ModulePrivacyMode : public Module
|
||||
{
|
||||
PrivacyMode* pm;
|
||||
public:
|
||||
ModulePrivacyMode(InspIRCd* Me) : Module(Me)
|
||||
{
|
||||
pm = new PrivacyMode(ServerInstance);
|
||||
if (!ServerInstance->AddMode(pm, 'c'))
|
||||
throw ModuleException("Could not add new modes!");
|
||||
}
|
||||
|
||||
void Implements(char* List)
|
||||
{
|
||||
List[I_OnUserPreMessage] = List[I_OnUserPreNotice] = 1;
|
||||
}
|
||||
|
||||
virtual ~ModulePrivacyMode()
|
||||
{
|
||||
ServerInstance->Modes->DelMode(pm);
|
||||
DELETE(pm);
|
||||
}
|
||||
|
||||
virtual Version GetVersion()
|
||||
{
|
||||
return Version(1,1,0,0, VF_COMMON|VF_VENDOR, API_VERSION);
|
||||
}
|
||||
|
||||
virtual int OnUserPreMessage(userrec* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list)
|
||||
{
|
||||
if (target_type == TYPE_USER)
|
||||
{
|
||||
userrec* t = (userrec*)dest;
|
||||
if (!IS_OPER(user) && (t->IsModeSet('c')) && (!ServerInstance->ULine(user->server)) && !user->SharesChannelWith(t))
|
||||
{
|
||||
user->WriteServ("531 %s %s :You are not permitted to send private messages to this user (+c set)", user->nick, t->nick);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual int OnUserPreNotice(userrec* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list)
|
||||
{
|
||||
return OnUserPreMessage(user, dest, target_type, text, status, exempt_list);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
MODULE_INIT(ModulePrivacyMode)
|
Loading…
x
Reference in New Issue
Block a user