I_OnPostLocalTopicChange, I_OnEvent, I_OnRequest, I_OnOperCompre, I_OnGlobalOper, I_OnPostConnect, I_OnAddBan, I_OnDelBan,
I_OnRawSocketAccept, I_OnRawSocketClose, I_OnRawSocketWrite, I_OnRawSocketRead, I_OnChangeLocalUserGECOS, I_OnUserRegister,
I_OnOperCompare, I_OnChannelDelete, I_OnPostOper, I_OnSyncOtherMetaData, I_OnSetAway, I_OnCancelAway, I_OnUserList,
- I_OnPostCommand, I_OnPostJoin, I_OnWhoisLine, I_OnBuildExemptList, I_OnRawSocketConnect, I_OnGarbageCollect, I_OnBufferFlushed };
+ I_OnPostCommand, I_OnPostJoin, I_OnWhoisLine, I_OnBuildExemptList, I_OnRawSocketConnect, I_OnGarbageCollect, I_OnBufferFlushed,
+ I_OnText };
/** Base class for all InspIRCd modules
* This class is the base class for InspIRCd modules. All modules must inherit from this class,
*/
virtual void OnUserNotice(User* user, void* dest, int target_type, const std::string &text, char status, const CUList &exempt_list);
+ /** Called immediately before any NOTICE or PRIVMSG sent from a user, local or remote.
+ * The dest variable contains a User* if target_type is TYPE_USER and a Channel*
+ * if target_type is TYPE_CHANNEL.
+ * The difference between this event and OnUserPreNotice/OnUserPreMessage is that delivery is gauranteed,
+ * the message has already been vetted. In the case of the other two methods, a later module may stop your
+ * message. This also differs from OnUserMessage which occurs AFTER the message has been sent.
+ * @param user The user sending the message
+ * @param dest The target of the message
+ * @param target_type The type of target (TYPE_USER or TYPE_CHANNEL)
+ * @param text the text being sent by the user
+ * @param status The status being used, e.g. NOTICE @#chan has status== '@', 0 to send to everyone.
+ */
+ virtual void OnText(User* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list);
+
/** Called after every MODE command sent from a user
* The dest variable contains a User* if target_type is TYPE_USER and a Channel*
* if target_type is TYPE_CHANNEL. The text variable contains the remainder of the
parameters[1] = temp.c_str();
// notice to server mask
const char* servermask = parameters[0] + 1;
+ FOREACH_MOD(I_OnText,OnText(user,(void*)parameters[0],TYPE_SERVER,parameters[1],0,exempt_list));
if (match(ServerInstance->Config->ServerName,servermask))
{
user->SendAll("NOTICE", "%s", parameters[1]);
return CMD_FAILURE;
}
+ FOREACH_MOD(I_OnText,OnText(user,chan,TYPE_CHANNEL,parameters[1],status,except_list));
+
if (status)
{
if (ServerInstance->Config->UndernetMsgPrefix)
}
parameters[1] = (char*)temp.c_str();
+ FOREACH_MOD(I_OnText,OnText(user,dest,TYPE_USER,parameters[1],0,exempt_list));
+
if (IS_LOCAL(dest))
{
// direct write, same server
parameters[1] = temp.c_str();
// notice to server mask
const char* servermask = parameters[0] + 1;
+ FOREACH_MOD(I_OnText,OnText(user,(void*)parameters[0],TYPE_SERVER,parameters[1],0,except_list));
if (match(ServerInstance->Config->ServerName,servermask))
{
user->SendAll("PRIVMSG", "%s", parameters[1]);
return CMD_FAILURE;
}
+ FOREACH_MOD(I_OnText,OnText(user,chan,TYPE_CHANNEL,parameters[1],status,except_list));
+
if (status)
{
if (ServerInstance->Config->UndernetMsgPrefix)
}
parameters[1] = (char*)temp.c_str();
+ FOREACH_MOD(I_OnText,OnText(user,dest,TYPE_USER,parameters[1],0,except_list));
+
if (IS_LOCAL(dest))
{
// direct write, same server
void Module::OnBuildExemptList(MessageType, Channel*, User*, char, CUList&, const std::string&) { }
void Module::OnGarbageCollect() { }
void Module::OnBufferFlushed(User*) { }
+void Module::OnText(User*, void*, int, std::string&, char, CUList&) { }
ModuleManager::ModuleManager(InspIRCd* Ins)
}
}
- int OnUserPreMessage(User* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list)
+ void OnText(User* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list)
{
if (target_type != TYPE_CHANNEL)
- return 0;
+ return;
Channel* channel = (Channel*) dest;
if (!user->GetExt(std::string("delayjoin_")+channel->name))
- return 0;
+ return;
/* Display the join to everyone else (the user who joined got it earlier) */
channel->WriteAllExcept(user, false, 0, exempt_list, "JOIN %s", channel->name);
*/
for (UCListIter f = user->chans.begin(); f != user->chans.end(); f++)
if (f->first->IsModeSet('D'))
- return 0;
+ return;
user->Shrink("delayjoin");
-
- return 0;
- }
-
- int OnUserPreNotice(User* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list)
- {
- return OnUserPreMessage(user, dest, target_type, text, status, exempt_list);
}
};