Kill the docs dir and add a README file.

This README file was started on Sep 15 and now finally gets its big moment!

This file includes proposals from Kuja and prozac, thanks.


git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@848 726aef4b-f618-498e-8847-2d620e286838
This commit is contained in:
psychon
2007-10-22 21:49:39 +00:00
parent dafa074b58
commit 7a157b26b3
10 changed files with 117 additions and 498 deletions

117
README Normal file
View File

@@ -0,0 +1,117 @@
ZNC - An advanced IRC bouncer
=============================
Table of contents:
- Minimal Requirements
- Optional Requirements
- Installing ZNC
- Setting up znc.conf
- Using ZNC
- File Locations
- ZNC's config file
- Writing own modules
- Further infos
Minimal Requirements
--------------------
Core:
- GNU make (try gmake if make fails)
- GCC 3 or later
Optional Requirements
---------------------
SSL support:
- openssl 0.9.7d or later (try installing openssl-dev or openssl-devel)
modperl:
- This needs perl and the bundled libperl
saslauth:
- This module needs cyrus-sasl2
Installing ZNC
--------------
Installation is done with the ./configure ; make ; make install commands.
You can use
./configure --help
if you want to get a list of options, though the defaults should be suiting
most needs. After you compiled it with make (or gmake if make doesnt work) you
can install it with
make install
though you don't need to as ZNC supports in-place execution.
Setting up znc.conf
-------------------
For setting up a configuration file in ~/.znc you can simply do
znc --makeconf
or
./znc --makeconf
for in-place execution.
If you are using SSL you should do
znc --makepem
Using ZNC
---------
Once you have started ZNC you can connect with your favorite IRC-client to ZNC.
You should use username:password as the server password (e.g. /pass user:pass).
Once you are connected you can do /msg *status help for some commands.
Every module you have loaded (/msg *status listmods) additionally gets
/msg *modulename help
File Locations
--------------
In its data dir (~/.znc is default) ZNC saves most of its data. The only
exception are modules, which are saved in <prefix>/libexec and the znc binary
itself. More modules (e.g. if you install some later) can be saved in
<data dir>/modules (-> ~/.znc/modules).
In the datadir are only two files:
znc.pid - The pid of the currently running ZNC instance.
znc.pem - This is the server certificate ZNC uses for listening and is created
with znc --makepem.
These directories are also in there:
configs - Contains znc.conf (ZNC's config file) and backups of older configs.
modules - ZNC also looks in here for a module.
moddata - Global modules save their settings here.
(e.g. webadmin saves the current skin name in here)
users - This is per-user data and mainly contains just a moddata directory.
ZNC's config file
-----------------
This file shouldn't be too hard too understand. An explanation of all the
items can be found here: http://en.znc.in/wiki/index.php/Configuration
Currently it is NOT possible to rehash the config file so you better use
webadmin or the admin module to change settings on-the-fly.
Writing own modules
-------------------
You can write your own modules in either C++ or perl.
C++ modules are compiled by either saving them in the modules source dir and
running make or with the znc-buildmod shell script.
For additional info look in the wiki:
http://en.znc.in/wiki/index.php/WritingModules
http://en.znc.in/wiki/index.php/ModuleHooks
Perl modules are loaded through the global module modperl.
See http://en.znc.in/wiki/index.php/Modperl
Further infos
-------------
Please visit http://znc.sf.net or #znc on EFNet if you still have questions.
You can get the latest development version with subversion:
svn checkout https://znc.svn.sourceforge.net/svnroot/znc/trunk znc

View File

@@ -1,62 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="robots" content="index,follow" />
<meta name="language" content="en" />
<title>ZNC - Configuration</title>
</head>
<body bgcolor="#FFFFFF" text="#000000" alink="#993333" link="#333399" vlink="#666666">
[<a href="index.php">Home</a>]
-
[<a href="http://sourceforge.net/projects/znc">Project Page</a>]
<hr noshade>
<p />
<h2>
File Locations
</h2>
<ul>
<li> <strong>Config</strong> - ZNC gets its configuration by reading the file ~/.znc/znc.conf. See znc --help and znc --makeconf.
<li> <strong>Misc</strong> - Other files are also stored in the ~/.znc directory such as the SSL cert (znc.pem) and PidFile (znc.pid).
<li> <strong>Local Modules</strong> - Stored in ~/.znc/modules. ZNC will look in the local module dir first when trying to load a module.
<li> <strong>Global Modules</strong> - Stored in /usr/share/znc/modules by default.
<li> <strong>Binaries</strong> - znc, znc-config and znc-buildmod are stored in /usr/bin by default. You can change this when you configure by using <em>./configure --prefix=/whatever/path/you/want</em>
</ul>
<h2>
Config File - (~/.znc/znc.conf)
</h2>
<ul>
<li> <strong>Listen</strong> - The port that ZNC will listen on. If the port is prepended with a '+' then ZNC listens using ssl. If you want to listen on a specific ip, use the address as first argument and the port as second.
<li> <strong>Listen6</strong> - The same as Listen, but uses IPv6 instead of IPv4.
<li> <strong>ISpoofFile</strong> - ZNC will write the ident of the user trying to connect to this file. Very useful if your shell supports oidentd.
<li> <strong>PidFile</strong> - The pid file that is created when znc starts.
<li> <strong>StatusPrefix</strong> - The prefix for the status and module queries.
<li> <strong>User</strong> - The user definition, you can have more than one..
<ul>
<li> <strong>Pass</strong> - Used by the client to connect to ZNC. Can be a hash generated by <em>znc --makepass</em>
<li> <strong>Nick, AltNick, Ident, RealName, VHost</strong> - Setup your IRC user info.
<li> <strong>ChanModes</strong> - Default modes ZNC will set when you join an empty channel.
<li> <strong>KeepNick</strong> - Will keep trying to regain your primary nick if it is in use.
<li> <strong>QuitMsg</strong> - The default quit message znc will use when you jump servers or call shutdown.
<li> <strong>VersionReply</strong> - The reply sent to CTCP version requests while you are detached.
<li> <strong>AutoCycle</strong> - Set this to false if you don't want ZNC to part/join a channel when you are the last user left and not opped.
<li> <strong>Buffer</strong> - This is the amount of lines that the playback buffer will store before dropping off the oldest line.
<li> <strong>KeepBuffer</strong> - Buffer channels while you are attached and play the whole buffer back to you each time you connect.
<li> <strong>Server</strong> - Adds a server to the list of servers ZNC will connect to.
<li> <strong>LoadModule</strong> - Load a module on startup
<li> <strong>Chan</strong> - Channels you want ZNC to join when first launched.
<ul>
<li> <strong>Key</strong> - Key for the channel.
<li> <strong>Modes</strong> - Modes to override ChanModes.
<li> <strong>Buffer</strong> - You can set this to override the Buffer size set in the User section.
<li> <strong>KeepBuffer</strong> - You can set this to override the KeepBuffer option set in the User section.
<li> <strong>AutoCycle</strong> - You can set this to override the AutoCycle option set in the User section.
<li> <strong>Detached</strong> - If true, znc will join this channel as detached so that the IRC client will not be bothered by it.
</ul>
</ul>
</ul>
</body>
</html>

View File

@@ -1,31 +0,0 @@
package Example;
use strict;
#
# Create a constructor for the module
sub new
{
my ( $classname ) = @_;
my $self = {};
bless( $self, $classname );
return( $self );
}
#
# we're going to hook this call back
sub OnChanMsg
{
my ( $me, $nick, $chan, $msg ) = @_;
ZNC::PutTarget( $chan, "WTF!?, you said [$msg]\n" );
return( ZNC::CONTINUE );
}
sub OnShutdown
{
my ( $me ) = @_;
}
1;

View File

@@ -1,95 +0,0 @@
package SampleSock;
use base 'ZNCSocket';
sub OnConnect
{
my ( $me ) = @_;
ZNC::PutTarget( $me->{SamChan}, "I have FD [$me->{fd}]" );
}
sub OnReadLine
{
my ( $me, $line ) = @_;
$line =~ s/\r?\n$//;
ZNC::PutTarget( $me->{SamChan}, "I have a line [$line]" );
$me->Write( "WHAAAAA!?\n" );
}
sub OnSockDestroy
{
my ( $me ) = @_;
ZNC::PutTarget( $me->{SamChan}, "Ahhhh we be closed :(" );
}
sub OnSockDestroy
{
ZNC::PutTarget( $me->{SamChan}, "destructor called, he wants his money back" );
}
sub OnNewSock
{
my ( $me, $newfd ) = @_;
ZNC::PutTarget( $me->{SamChan}, "new created fd $newfd" );
my $obj = new SampleSock( $me->{modobj}, $newfd );
$obj->{SamChan} = $me->{SamChan};
$obj->AddSock();
}
1;
package ExampleWithSock;
use strict;
sub new
{
my ( $classname ) = @_;
my $self = {};
bless( $self, $classname );
print STDERR "WOOOF!\n";
return( $self );
}
sub OnChanMsg
{
my ( $me, $nick, $chan, $msg ) = @_;
$nick =~ s/^(.+?)!.*/$1/;
ZNC::PutTarget( $chan, "$nick, you said [$msg]?" );
if ( $msg =~ /^go\s+(.+?)\s+(.+)/i )
{
my $obj = new SampleSock( $me );
$obj->{SamChan} = $chan;
if ( $obj->Connect( $1, $2, 10, 1 ) )
{
$obj->AddSock();
}
}
elsif ( $msg =~ /^listen\s+([0-9]+)/ )
{
my $obj = new SampleSock( $me );
$obj->{SamChan} = $chan;
if ( $obj->Listen( $1, "", 1 ) )
{
$obj->AddSock();
}
else
{
ZNC::PutTarget( $chan, "Failed to setup listener!" );
}
}
return( ZNC::CONTINUE );
}
sub OnShutdown
{
print STDERR "HERE I AM!!!!!\n";
}
1;

View File

@@ -1,27 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="robots" content="index,follow" />
<meta name="language" content="en" />
<title>ZNC - Installation</title>
</head>
<body bgcolor="#FFFFFF" text="#000000" alink="#993333" link="#333399" vlink="#666666">
[<a href="index.php">Home</a>]
-
[<a href="http://sourceforge.net/projects/znc">Project Page</a>]
<hr noshade>
<p />
<ol>
<li> <a href="http://sourceforge.net/project/showfiles.php?group_id=115828&package_id=125745">Download Tarball</a>
<li> tar -xzvf znc*.*gz
<li> cd znc*
<li> ./configure (use --prefix=/path/to/shell/znc) if you don't want a system wide installation or simply don't have root
<li> make
<li> make install
</ol>
</body>
</html>

View File

@@ -1,54 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="robots" content="index,follow" />
<meta name="language" content="en" />
<title>ZNC - Module Hooks</title>
</head>
<body bgcolor="#FFFFFF" text="#000000" alink="#993333" link="#333399" vlink="#666666">
[<a href="index.php">Home</a>]
-
[<a href="http://sourceforge.net/projects/znc">Project Page</a>]
<hr noshade>
<p />
<pre>
virtual bool OnLoad(const string&amp; sArgs);
virtual bool OnBoot();
virtual void OnUserAttached();
virtual void OnUserDetached();
virtual void OnIRCDisconnected();
virtual void OnIRCConnected();
</pre>
<pre>
virtual bool OnDCCUserSend(const CNick&amp; RemoteNick, unsigned long uLongIP, unsigned short uPort, const string&amp; sFile, unsigned long uFileSize);
</pre>
<pre>
virtual void OnOp(const CNick&amp; OpNick, const CNick&amp; Nick, const CChan&amp; Channel, bool bNoChange);
virtual void OnDeop(const CNick&amp; OpNick, const CNick&amp; Nick, const CChan&amp; Channel, bool bNoChange);
virtual void OnVoice(const CNick&amp; OpNick, const CNick&amp; Nick, const CChan&amp; Channel, bool bNoChange);
virtual void OnDevoice(const CNick&amp; OpNick, const CNick&amp; Nick, const CChan&amp; Channel, bool bNoChange);
virtual void OnRawMode(const CNick&amp; OpNick, const CChan&amp; Channel, const string&amp; sModes, const string&amp; sArgs);
</pre>
<pre>
virtual bool OnUserRaw(string&amp; sLine);
virtual bool OnRaw(string&amp; sLine);
</pre>
<pre>
virtual bool OnStatusCommand(const string&amp; sCommand);
virtual void OnModCommand(const string&amp; sCommand);
virtual void OnModNotice(const string&amp; sMessage);
virtual void OnModCTCP(const string&amp; sMessage);
</pre>
<pre>
virtual void OnQuit(const CNick&amp; Nick, const string&amp; sMessage, const vector<CChan*>&amp; vChans);
virtual void OnNick(const CNick&amp; Nick, const string&amp; sNewNick, const vector<CChan*>&amp; vChans);
virtual void OnKick(const CNick&amp; Nick, const string&amp; sOpNick, const CChan&amp; Channel, const string&amp; sMessage);
virtual void OnJoin(const CNick&amp; Nick, const CChan&amp; Channel);
virtual void OnPart(const CNick&amp; Nick, const CChan&amp; Channel);
</pre>
</body>
</html>

View File

@@ -1,41 +0,0 @@
Requires the global module g_modperl.so
- oopish perl modules (man perlobj, also see Example.pm)
- Has all the same callbacks as c++ code, with the same arguments
- special destructor should be used instead of perl DESTROY
- OnShutdown, reason for this is during that destructor the user object
inside g_modperl is available for use
- Builting Sockets -
- includes builtin sock support (see ExampleWithSocks.pm)
- can be used two methods
- method one is directly in your module itself, the sock fd is passed
around for your reference. The sock fd is ALWAYS the first argument
- method two is to instantiate in a new perl class (as used in
ExampleWithSocks.pm)
- methods receiving callbacks are:
- OnSockDestroy() -- when this sock is being destroyed
- OnConnect( iParentFD ) -- called on the inbound/outbound socket, if this
is created from a listening socket, iParentFD will be > -1
- OnConnectionFrom( sRemoteHost, iRemotePort ) -- called on the listening
socket when an inbound connection is coming in. If you return anything but
ZNC::CONTINUE, the connection will be denied.
- OnError( iErrorNum ) -- called when an error occurs. errno.h contains valid
error codes
- OnConnectionRefused() -- called when an outbound connection is refused
- OnTimeout() -- called when a connection times out
- OnDisconnect() -- called when a connection is closed
- ReadData( data, len ) -- called when data comes in, len contains the length
of the data being sent in
- ReadLine( line ) -- called when a line (ended by \n) comes down. You must
enable readline when the socket is creatd (via connect or listen)
NOTE: all of the socket stuff is a basic wrapper around Csocket, and full
documentation can be found at http://csocket.net/docs/annotated.html

View File

@@ -1,63 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="robots" content="index,follow" />
<meta name="language" content="en" />
<title>ZNC - Using Commands</title>
</head>
<body bgcolor="#FFFFFF" text="#000000" alink="#993333" link="#333399" vlink="#666666">
[<a href="index.php">Home</a>]
-
[<a href="http://sourceforge.net/projects/znc">Project Page</a>]
<hr noshade>
<p />
<h2>
Commands
</h2>
<p>
Commands are given to ZNC by messaging the virtual user *status. Likewise, modules are communicated to by messaging *modname as well.
</p>
<h3>
Example: /msg *status listmods
</h3>
<pre>
&lt;prozac&gt; listmods
&lt;*status&gt; +---------+------------------------------------------------------+
&lt;*status&gt; | Name | Description |
&lt;*status&gt; +---------+------------------------------------------------------+
&lt;*status&gt; | email | Monitors Email activity on local disk /var/mail/user |
&lt;*status&gt; | shell | Gives shell access. |
&lt;*status&gt; | schat | Secure cross platform (:P) chat system |
&lt;*status&gt; +---------+------------------------------------------------------+
</pre>
<p>
The prefix for these virtual users can be changed from * in the znc.conf file. It is wise to use a character that is illegal to use on IRC so that you don't lose the ability to talk to a real person who happens to be using the same prefix on their IRC nick.
</p>
<h2>
Command List
</h2>
<pre>
&lt;zncuser&gt; help
&lt;*status&gt; +-----------+---------------------+-------------------------------------+
&lt;*status&gt; | Command | Arguments | Description |
&lt;*status&gt; +-----------+---------------------+-------------------------------------+
&lt;*status&gt; | ListDCCs | | List all active DCCs |
&lt;*status&gt; | ListMods | | List all loaded modules |
&lt;*status&gt; | ListChans | | List all channels |
&lt;*status&gt; | ListNicks | &lt;#chan&gt; | List all nicks on a channel |
&lt;*status&gt; | Topics | | Show topics in all channels |
&lt;*status&gt; | SetBuffer | &lt;#chan&gt; [linecount] | Set the buffer count for a channel |
&lt;*status&gt; | Jump | | Jump to the next server in the list |
&lt;*status&gt; | Send | &lt;nick&gt; &lt;file&gt; | Send a shell file to a nick on IRC |
&lt;*status&gt; | Get | &lt;file&gt; | Send a shell file to yourself |
&lt;*status&gt; | LoadMod | &lt;module&gt; | Load a module |
&lt;*status&gt; | UnloadMod | &lt;module&gt; | Unload a module |
&lt;*status&gt; | ReloadMod | &lt;module&gt; | Reload a module |
&lt;*status&gt; +-----------+---------------------+-------------------------------------+
</pre>
</body>
</html>

View File

@@ -1,75 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="robots" content="index,follow" />
<meta name="language" content="en" />
<title>ZNC - Writing Modules</title>
</head>
<body bgcolor="#FFFFFF" text="#000000" alink="#993333" link="#333399" vlink="#666666">
[<a href="index.php">Home</a>]
-
[<a href="http://sourceforge.net/projects/znc">Project Page</a>]
<hr noshade>
<p />
<h2>
Overview
</h2>
<ul>
<li> Create your own module.cpp file
<li> #include &lt;main.h&gt; and &lt;Modules.h&gt;
<li> Create a new class derived from CModule overriding any <a href="ModuleHooks.html">ModuleHooks</a> that you need
<li> Be sure to add the macro call <em>MODULEDEFS(CYourClass)</em> at the END of the file
<li> Compile your module into a shared object (.so file)
<ul>
<li> The easy way to compile is to use the znc-buildmod script as long as your module is a single .cpp file
<ul>
<li> <em>znc-buildmod example.cpp</em>
</ul>
<li> alternative is to manually compile using znc-config to ensure that you are using the same flags and libs that the znc engine was compiled with
<ul>
<li> <em>g++ `znc-config --cflags` `znc-config --include` `znc-config --libs` -shared -o example.so example.cpp</em>
</ul>
</ul>
<li> Place the .so file into your ~/.znc/modules directory. You can load it with <em>/msg *status loadmod foo</em>. If you overwrite a .so file while znc has it loaded it can crash znc, <em>/msg *status unloadmod foo</em> first!
</ul>
<h2>
Code
</h2>
<pre>
#include &lt;main.h&gt;
#include &lt;Modules.h&gt;
</pre>
<pre>
class CExampleMod : public CModule {
public:
MODCONSTRUCTOR(CExampleMod) {}
virtual ~CExampleMod() {}
</pre>
<pre>
virtual void OnModCommand(const string&amp; sCommand) {
if (strcasecmp(sCommand.c_str(), "HELP") == 0) {
PutModule("I'd like to help, but I am just an example");
} else {
PutModule("Unknown command, try HELP");
}
}
};
</pre>
<pre>
MODULEDEFS(CExampleMod)
</pre>
<h2>
Output
</h2>
<pre>
&lt;zncuser&gt; test
&lt;*example&gt; Unknown command, try HELP
&lt;zncuser&gt; help
&lt;*example&gt; I'd like to help, but I am just an example
</pre>
</body>
</html>

View File

@@ -1,50 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="robots" content="index,follow" />
<meta name="language" content="en" />
<title>ZNC - Front Page</title>
</head>
<body bgcolor="#FFFFFF" text="#000000" alink="#993333" link="#333399" vlink="#666666">
[<a href="index.html">Home</a>]
-
[<a href="http://sourceforge.net/projects/znc">Project Page</a>]
<hr noshade>
<p />
<h1>
ZNC - An advanced IRC bouncer
</h1>
<h2>
Main Features
</h2>
<ul>
<li> <strong>Detaching</strong> - ZNC will stay on IRC even while you are offline.
<li> <strong>Multiple Users</strong> - You can add additional users under one running process. Useful for public shells that limit background processes.
<li> <strong>Playback Buffers</strong> - Stay up-to-date with what happened while you were detached.
<li> <strong>SSL</strong> - Encryption for both the listen port and connecting to IRC servers.
<li> <strong>DCC Bouncing</strong> - Transparent bouncing for DCC anonymity.
<li> <strong>C++ Modules</strong> - Dynamically loaded shared objects. Just derive from CModule and overload any needed functions such as OnPrivMsg(). IRC scripting in C++, what could be better than that?
<ul>
<li> <strong>shell</strong> - Have your unix shell in a query window right inside of your IRC client.
<li> <strong>savebuff</strong> - Saves your channel buffers into an encrypted file so they can survive restarts and reboots.
<li> <strong>email</strong> - Monitors email activity on local disk /var/mail/user
<li> <strong>schat</strong> - SSL (encrypted) DCC chats.
<li> <strong>watch</strong> - Monitor activity for specific text patterns from specific users and have the text sent to a special query window.
<li> <strong>custom</strong> - Write your own modules to do whatever you want.
</ul>
</ul>
<h2>
Using ZNC
</h2>
<ul>
<li> <a href="Installation.html">Installation</a>
<li> <a href="Configuration.html">Configuration</a>
<li> <a href="UsingCommands.html">UsingCommands</a>
<li> <a href="WritingModules.html">WritingModules</a>
</ul>
</body>
</html>