1 /* +------------------------------------+
2 * | Inspire Internet Relay Chat Daemon |
3 * +------------------------------------+
5 * InspIRCd: (C) 2002-2008 InspIRCd Development Team
6 * See: http://www.inspircd.org/wiki/index.php/Credits
8 * This program is free but copyrighted software; see
9 * the file COPYING for details.
11 * ---------------------------------------------------
16 /* $ModDesc: Adds user mode +c, which if set, users must be on a common channel with you to private message you */
18 /** Handles user mode +c
20 class PrivacyMode : public ModeHandler
23 PrivacyMode(InspIRCd* Instance) : ModeHandler(Instance, 'c', 0, 0, false, MODETYPE_USER, false) { }
25 ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string ¶meter, bool adding, bool)
29 if (!dest->IsModeSet('c'))
31 dest->SetMode('c',true);
32 return MODEACTION_ALLOW;
37 if (dest->IsModeSet('c'))
39 dest->SetMode('c',false);
40 return MODEACTION_ALLOW;
44 return MODEACTION_DENY;
48 class ModulePrivacyMode : public Module
52 ModulePrivacyMode(InspIRCd* Me) : Module(Me)
54 pm = new PrivacyMode(ServerInstance);
55 if (!ServerInstance->Modes->AddMode(pm))
56 throw ModuleException("Could not add new modes!");
57 Implementation eventlist[] = { I_OnUserPreMessage, I_OnUserPreNotice };
58 ServerInstance->Modules->Attach(eventlist, this, 2);
62 virtual ~ModulePrivacyMode()
64 ServerInstance->Modes->DelMode(pm);
68 virtual Version GetVersion()
70 return Version(1,2,0,0, VF_COMMON|VF_VENDOR, API_VERSION);
73 virtual int OnUserPreMessage(User* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list)
75 if (target_type == TYPE_USER)
77 User* t = (User*)dest;
78 if (!IS_OPER(user) && (t->IsModeSet('c')) && (!ServerInstance->ULine(user->server)) && !user->SharesChannelWith(t))
80 user->WriteNumeric(531, "%s %s :You are not permitted to send private messages to this user (+c set)", user->nick, t->nick);
87 virtual int OnUserPreNotice(User* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list)
89 return OnUserPreMessage(user, dest, target_type, text, status, exempt_list);
94 MODULE_INIT(ModulePrivacyMode)