summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAttila Molnar <attilamolnar@hush.com>2014-04-02 12:50:04 +0200
committerAttila Molnar <attilamolnar@hush.com>2014-04-02 12:50:04 +0200
commit2465f88a587199a200cdde1a11e0ac7fbd51a0da (patch)
tree16fe1f66497f61a23f850592a5b31f450aa24e23
parenta6e68c0d346395630dee9dc69211a284360b6c62 (diff)
Move User::SendAll() into core_privmsg
This functionality is only used by the PRIVMSG and NOTICE handlers
-rw-r--r--include/users.h10
-rw-r--r--src/coremods/core_privmsg.cpp20
-rw-r--r--src/users.cpp13
3 files changed, 19 insertions, 24 deletions
diff --git a/include/users.h b/include/users.h
index c90d2f265..ed1abd37f 100644
--- a/include/users.h
+++ b/include/users.h
@@ -609,16 +609,6 @@ class CoreExport User : public Extensible
*/
bool ChangeNick(const std::string& newnick, bool force = false, time_t newts = 0);
- /** Send a command to all local users from this user
- * The command given must be able to send text with the
- * first parameter as a servermask (e.g. $*), so basically
- * you should use PRIVMSG or NOTICE.
- * @param command the command to send
- * @param text The text format string to send
- * @param ... Format arguments
- */
- void SendAll(const char* command, const char* text, ...) CUSTOM_PRINTF(3, 4);
-
/** Remove this user from all channels they are on, and delete any that are now empty.
* This is used by QUIT, and will not send part messages!
*/
diff --git a/src/coremods/core_privmsg.cpp b/src/coremods/core_privmsg.cpp
index fbabc4a5c..34953bbe8 100644
--- a/src/coremods/core_privmsg.cpp
+++ b/src/coremods/core_privmsg.cpp
@@ -31,6 +31,13 @@ class MessageCommandBase : public Command
ChanModeReference moderatedmode;
ChanModeReference noextmsgmode;
+ /** Send a PRIVMSG or NOTICE message to all local users from the given user
+ * @param user User sending the message
+ * @param msg The message to send
+ * @param mt Type of the message (MSG_PRIVMSG or MSG_NOTICE)
+ */
+ static void SendAll(User* user, const std::string& msg, MessageType mt);
+
public:
MessageCommandBase(Module* parent, MessageType mt)
: Command(parent, MessageTypeString[mt], 2, 2)
@@ -57,6 +64,17 @@ class MessageCommandBase : public Command
}
};
+void MessageCommandBase::SendAll(User* user, const std::string& msg, MessageType mt)
+{
+ const std::string message = ":" + user->GetFullHost() + " " + MessageTypeString[mt] + " $* :" + msg;
+ const LocalUserList& list = ServerInstance->Users->local_users;
+ for (LocalUserList::const_iterator i = list.begin(); i != list.end(); ++i)
+ {
+ if ((*i)->registered == REG_ALL)
+ (*i)->Write(message);
+ }
+}
+
CmdResult MessageCommandBase::HandleMessage(const std::vector<std::string>& parameters, User* user, MessageType mt)
{
User *dest;
@@ -87,7 +105,7 @@ CmdResult MessageCommandBase::HandleMessage(const std::vector<std::string>& para
FOREACH_MOD(OnText, (user, (void*)parameters[0].c_str(), TYPE_SERVER, text, 0, except_list));
if (InspIRCd::Match(ServerInstance->Config->ServerName, servermask, NULL))
{
- user->SendAll(MessageTypeString[mt], "%s", text);
+ SendAll(user, text, mt);
}
FOREACH_MOD(OnUserMessage, (user, (void*)parameters[0].c_str(), TYPE_SERVER, text, 0, except_list, mt));
return CMD_SUCCESS;
diff --git a/src/users.cpp b/src/users.cpp
index 40147b37d..28a8bd4ea 100644
--- a/src/users.cpp
+++ b/src/users.cpp
@@ -1129,19 +1129,6 @@ bool User::ChangeIdent(const std::string& newident)
return true;
}
-void User::SendAll(const char* command, const char* text, ...)
-{
- std::string textbuffer;
- VAFORMAT(textbuffer, text, text);
- const std::string message = ":" + this->GetFullHost() + " " + command + " $* :" + textbuffer;
-
- for (LocalUserList::const_iterator i = ServerInstance->Users->local_users.begin(); i != ServerInstance->Users->local_users.end(); i++)
- {
- if ((*i)->registered == REG_ALL)
- (*i)->Write(message);
- }
-}
-
/*
* Sets a user's connection class.
* If the class name is provided, it will be used. Otherwise, the class will be guessed using host/ip/ident/etc.