mirror of
git://git.acid.vegas/unrealircd.git
synced 2025-04-06 08:38:23 +00:00
60 lines
1.4 KiB
C
60 lines
1.4 KiB
C
/*
|
|
* usermode +D: makes it so you cannot receive private messages/notices
|
|
* except from opers, U-lines and servers. -- Syzop
|
|
*/
|
|
|
|
#include "unrealircd.h"
|
|
|
|
ModuleHeader MOD_HEADER
|
|
= {
|
|
"usermodes/privdeaf",
|
|
"1.2",
|
|
"Private Messages Deaf (+D) -- by Syzop",
|
|
"UnrealIRCd Team",
|
|
"unrealircd-5",
|
|
};
|
|
|
|
static long UMODE_PRIVDEAF = 0;
|
|
static Umode *UmodePrivdeaf = NULL;
|
|
|
|
int privdeaf_can_send_to_user(Client *client, Client *target, char **text, char **errmsg, SendType sendtype);
|
|
|
|
MOD_INIT()
|
|
{
|
|
MARK_AS_OFFICIAL_MODULE(modinfo);
|
|
UmodePrivdeaf = UmodeAdd(modinfo->handle, 'D', UMODE_GLOBAL, 0, umode_allow_all, &UMODE_PRIVDEAF);
|
|
if (!UmodePrivdeaf)
|
|
{
|
|
/* I use config_error() here because it's printed to stderr in case of a load
|
|
* on cmd line, and to all opers in case of a /rehash.
|
|
*/
|
|
config_error("privdeaf: Could not add usermode 'D': %s", ModuleGetErrorStr(modinfo->handle));
|
|
return MOD_FAILED;
|
|
}
|
|
|
|
HookAdd(modinfo->handle, HOOKTYPE_CAN_SEND_TO_USER, 0, privdeaf_can_send_to_user);
|
|
|
|
return MOD_SUCCESS;
|
|
}
|
|
|
|
MOD_LOAD()
|
|
{
|
|
return MOD_SUCCESS;
|
|
}
|
|
|
|
MOD_UNLOAD()
|
|
{
|
|
return MOD_SUCCESS;
|
|
}
|
|
|
|
int privdeaf_can_send_to_user(Client *client, Client *target, char **text, char **errmsg, SendType sendtype)
|
|
{
|
|
if ((target->umodes & UMODE_PRIVDEAF) && !IsOper(client) &&
|
|
!IsULine(client) && !IsServer(client) && (client != target))
|
|
{
|
|
*errmsg = "User does not accept private messages";
|
|
return HOOK_DENY;
|
|
}
|
|
return HOOK_CONTINUE;
|
|
}
|