Overhaul for the send_raw module in extra. Mostly done by zynox, big thanks for that.

Changes in detail:
- send_raw is now a user module. It can only be loaded by admin users.
- by prepending "in" or "out" to the /msg *send_raw command, e.g.
/msg *send_raw testuser in :znc!znc@znc PRIVMSG #chan :Hello dude, only you can see this (znc user=testuser!)
you can now also send raw IRC lines to the connected clients instead of just to the IRC server.
- Fixed a spelling mistake.


git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@1697 726aef4b-f618-498e-8847-2d620e286838
This commit is contained in:
cflakes
2010-01-09 23:27:34 +00:00
parent 72b782d93e
commit fdb16bb170
2 changed files with 28 additions and 13 deletions

View File

@@ -23,3 +23,4 @@ cnu - master of destruction (security issues)
Ingmar "KiNgMaR" Runge <mail@irsoft.de>
Michael "Svedrin" Ziegler <diese-addy@funzt-halt.net>
Robert Lacroix (http://www.robertlacroix.com)
zynox

View File

@@ -9,34 +9,48 @@
#include "User.h"
#include "znc.h"
class CSendRaw_Mod: public CGlobalModule {
class CSendRaw_Mod: public CModule {
public:
GLOBALMODCONSTRUCTOR(CSendRaw_Mod) {}
MODCONSTRUCTOR(CSendRaw_Mod) {}
virtual ~CSendRaw_Mod() {
}
virtual void OnModCommand(const CString& sLine) {
CString sUser = sLine.Token(0);
CString sSend = sLine.Token(1, true);
CUser *pUser;
virtual bool OnLoad(const CString& sArgs, CString& sErrorMsg) {
if (!m_pUser->IsAdmin()) {
PutModule("You must have admin privileges to use this");
return;
sErrorMsg = "You must have admin privileges to load this module";
return false;
}
pUser = CZNC::Get().FindUser(sUser);
return true;
}
virtual void OnModCommand(const CString& sLine) {
const CString sUser = sLine.Token(0);
const CString sDirection = sLine.Token(1);
CUser *pUser = CZNC::Get().FindUser(sUser);
if (!pUser) {
PutModule("User not found");
PutModule("The expected format is: <user> <line to send>");
PutModule("The expected format is: <user> [<in|out>] <line to send>");
PutModule("Out (default): The line will be sent to the user's IRC server");
PutModule("In: The line will be sent to the user's IRC client");
return;
}
pUser->PutIRC(sSend);
if (!sDirection.CaseCmp("in")) {
pUser->PutUser(sLine.Token(2, true));
} else if (!sDirection.CaseCmp("out")) {
pUser->PutIRC(sLine.Token(2, true));
} else {
/* The user did not supply a direction, let's send the line out.
We do this to preserve backwards compatibility. */
pUser->PutIRC(sLine.Token(1, true));
}
PutModule("done");
}
};
GLOBALMODULEDEFS(CSendRaw_Mod, "Let's you send some raw IRC lines as someone else");
MODULEDEFS(CSendRaw_Mod, "Lets you send some raw IRC lines as/to someone else");