Sending to nick URLs is now supported.
[irker.git] / irkerd.xml
1 <!DOCTYPE refentry PUBLIC 
2    "-//OASIS//DTD DocBook XML V4.1.2//EN"
3    "docbook/docbookx.dtd">
4 <refentry id='irkerd.8'>
5 <refmeta>
6 <refentrytitle>irkerd</refentrytitle>
7 <manvolnum>8</manvolnum>
8 <refmiscinfo class='date'>Aug 27 2012</refmiscinfo>
9 <refmiscinfo class='source'>irker</refmiscinfo>
10 <refmiscinfo class='product'>irker</refmiscinfo>
11 <refmiscinfo class='manual'>Commands</refmiscinfo>
12 </refmeta>
13 <refnamediv id='name'>
14 <refname>irkerd</refname>
15 <refpurpose>relay for shipping notifications to IRC servers</refpurpose>
16 </refnamediv>
17 <refsynopsisdiv id='synopsis'>
18
19 <cmdsynopsis>
20   <command>irkerd</command>
21      <arg>-d <replaceable>debuglevel</replaceable></arg>
22      <arg>-V</arg>
23 </cmdsynopsis>
24 </refsynopsisdiv>
25
26 <refsect1 id='description'><title>DESCRIPTION</title>
27
28 <para><application>irkerd</application> is a specialized write-only IRC
29 client intended to be used for shipping notification messages to IRC
30 channels. The use case in mind when it was designed was broadcasting
31 notifications from commit hooks in version-control systems.</para>
32
33 <para><application>irkerd</application> is a socket server that
34 listens on for UDP or TCP packets on port 6659 for textual request
35 lines containing JSON objects and terminated by a newline. Each JSON
36 object must have two members: "to" specifying a destination or
37 destination list, and "privmsg" specifying the message text.
38 Examples:
39
40 <programlisting>
41 {"to":"irc://chat.freenode.net/git-ciabot", "privmsg":"Hello, world!"}
42 {"to":["irc://chat.freenode.net/#git-ciabot","irc://chat.freenode.net/#gpsd"],"privmsg":"Multichannel test"}
43 {"to":"irc://chat.hypothetical.net:6668/git-ciabot", "privmsg":"Hello, world!"}
44 </programlisting></para>
45
46 <para>If the channel part of the URL does not have one of the prefix
47 characters <quote>#</quote>, <quote>&amp;</quote>, or
48 <quote>+</quote>, a <quote>#</quote> will be prepended to it before
49 shipping - <emphasis>unless</emphasis>the channel part has the suffix
50 ",isnick" (which is unconditionally removed).</para>
51
52 <para>The host part of the URL may have a port-number suffix separated by a
53 colon, as shown in the third example; otherwise
54 <application>irkerd</application> sends messages to the the default 6667 IRC
55 port of each server.</para>
56 </refsect1>
57
58 <refsect1 id='options'><title>OPTIONS</title>
59
60 <para><application>irkerd</application> takes the following options:</para>
61
62 <variablelist>
63 <varlistentry>
64 <term>-d</term>
65 <listitem><para>Takes a following value, setting the debugging level from
66 it. This option will generally only be of interest to developers;
67 consult the source code for details.</para></listitem>
68 </varlistentry>
69 <varlistentry>
70 <term>-V</term>
71 <listitem><para>Write the program version to stdout and
72 terminate.</para></listitem>
73 </varlistentry>
74 </variablelist>
75
76 </refsect1>
77
78 <refsect1 id='limitations'><title>LIMITATIONS</title>
79 <para>Requests via UDP optimizes for lowest latency and network load
80 by avoiding TCP connection setup time; the cost is that delivery is
81 not reliable in the face of packet loss.</para>
82
83 <para>An <application>irkerd</application> instance with a
84 publicly-accessible request socket could complicate blocking of IRC
85 spam by making it easy for spammers to submit while hiding their IP
86 addresses; the better way to deploy, then, is on places like
87 project-hosting sites where the <application>irkerd</application>
88 socket can be visible from commit-hook code but not exposed to the
89 outside world. Priming your firewall with blocklists of IP addresses
90 known to spew spam is always a good idea.</para>
91
92 <para>The absence of any option to set the service port is deliberate.
93 If you think you need to do that, you have a problem better solved at
94 your firewall.</para>
95
96 <para>IRC has a message length limit of 510 bytes generate your privmsg attribute values with appropriate care.</para>
97
98 <para>IRC ignores any text after an embedded newline. Be aware that
99 <application>irkerd</application> will turn payload strungs with
100 embedded newlines into multiple IRC sends to avoid having message data
101 discarded. </para>
102 </refsect1>
103
104 <refsect1 id='authors'><title>AUTHOR</title>
105 <para>Eric S. Raymond <email>esr@snark.thyrsus.com</email>.  See the
106 project page at <ulink
107 url='http://www.catb.org/~esr/irker'>http://www.catb.org/~esr/irker</ulink>
108 for updates and other resources, including an installable repository
109 hook script. The implementation uses the Python IRC library by Joe
110 Rosdahl and Jason R. Coombs.</para>
111 </refsect1>
112 </refentry>
113