- /* XXX: Yes, this is right. We dont want to propogate the
- * actual SAMODE command, just the MODE command generated
- * by the send_mode_explicit
- */
- return CMD_FAILURE;
+ if (result == CMD_SUCCESS)
+ {
+ // If lastparse is empty and the MODE command handler returned CMD_SUCCESS then
+ // the client queried the list of a listmode (e.g. /SAMODE #chan b), which was
+ // handled internally by the MODE command handler.
+ //
+ // Viewing the modes of a user or a channel can also result in CMD_SUCCESS, but
+ // that is not possible with /SAMODE because we require at least 2 parameters.
+ const std::string& lastparse = ServerInstance->Modes.GetLastParse();
+ ServerInstance->SNO->WriteGlobalSno('a', user->nick + " used SAMODE: " + (lastparse.empty() ? irc::stringjoiner(parameters) : lastparse));