annotate faq.md @ 43:82badbee34d1

update for 4.0.0
author David Demelier <markand@malikania.fr>
date Thu, 03 Feb 2022 13:56:47 +0100
parents 3aaac1af65d5
children bf01db7f1017
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
31
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 % irccd - faq
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 % David Demelier <markand@malikania.fr>
43
82badbee34d1 update for 4.0.0
David Demelier <markand@malikania.fr>
parents: 38
diff changeset
3 % 2022-02-03
31
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
4
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 Frequently asked questions
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 ==========================
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
7
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 Is SSL supported?
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 -----------------
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
10
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 Yes.
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
12
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 Why plugins are not loaded per server?
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 --------------------------------------
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
15
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 This is a good question.
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
17
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
18 I thought a lot about using plugin per server at first, this will add more
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 flexibility about using different plugin configuration per server but will also
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 be a huge pain to maintain for the user. Because a lot of people will use an
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 only one irccd instance and server, I prefer to keep plugins globally and not
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 per server basis.
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
23
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 This also means that by default, all plugins will be enabled on all servers and
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 channels but it can be easily filtered with the irccd rule system.
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
26
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 Example:
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
28
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 # Create a whitelist for plugin 'xyz'.
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 [rule]
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 plugins = xyz
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 action = drop
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
33
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 # Re-enable 'xyz' on desired channels.
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 [rule]
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 servers = "myserver"
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 channels = "#mychannel"
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 plugins = xyz
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 action = accept
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
40
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 Why Javascript instead of (insert my favorite language here)?
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 -------------------------------------------------------------
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
43
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 Because Javascript is a very light language easy to embed. The irccd
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 implementation uses [duktape](http://duktape.org).
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
46
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 - Starting with version 3.0.0 you can write plugins in C++.
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 - Starting with version 3.1.0 you can write hooks in any language, but they are
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 less powerful than plugins though.
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
50
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 See also question below.
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
52
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 Do you plan to add (my language)?
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 ---------------------------------
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
55
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 No, there are plenty of bots which support your language.
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
57
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 Is it possible to combine commands like `!foo !bar`?
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 ----------------------------------------------------
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
60
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 Absolutely no, and will never. The special `onCommand` event is dedicated to
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 specific plugin.
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
63
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 Internally, when a user writes a message like `!stats hello` (assuming that
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 command char is '!'), then irccd will search for the plugin *stats* and pass the
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 trailing text to the plugin command.
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
67
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 In that way, the plugins will never conflict on `onCommand`. This security is
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 called plugin namespaces. By the way, this does not make sense and I don't know
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 many bot which support this "feature".
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
71
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 Remember, IRC plugins are not shell commands that you can pipe one to another.
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
73
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 Is it possible to integrate plugin dependencies?
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 ------------------------------------------------
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
76
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 No, plugins should be independant.
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
78
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 There are no ways to require a plugin. However, you can still verify if a plugin
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 is loaded via the `Irccd.Plugin.info` function and eventually load it using
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 `Irccd.Plugin.load`
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
82
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 Does irccd support DCC?
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 -----------------------
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
85
43
82badbee34d1 update for 4.0.0
David Demelier <markand@malikania.fr>
parents: 38
diff changeset
86 Nobody use DCC.
31
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
87
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 What if I use a specific encoding?
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 ----------------------------------
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
90
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 Irccd is encoding agnostic just as the IRC protocol. If the server send UTF-8
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 messages, then irccd will pass these UTF-8 encoded messages to the plugins.
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
93
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 The bot does not connect to the Freenode server!
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 ------------------------------------------------
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
96
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 Be sure to set a different identity (with different nickname **and** username)
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 because **irccd** is a registered nickname.
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
99
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 Isn't irccd bloat and against KISS/UNIX philosophies?
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 -----------------------------------------------------
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
102
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 The definition of bloat is quite subjective.
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
104
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 In some aspects it may be considered as a bit too complicated for an IRC bot but
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 is still quite minimal.
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
107
43
82badbee34d1 update for 4.0.0
David Demelier <markand@malikania.fr>
parents: 38
diff changeset
108 Because irccd offers a runtime controllable mechanism with lots of commands (32
38
3aaac1af65d5 lots of updates
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
109 at this time of writing), it increases the total number of lines of code. Please
3aaac1af65d5 lots of updates
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
110 also note that irccd is excessively tested. We could argue that a lots of these
3aaac1af65d5 lots of updates
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
111 command may be unneeded but I like that I can keep the daemon running for months
3aaac1af65d5 lots of updates
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
112 without having to shut it down and restart it to change its nickname.
3aaac1af65d5 lots of updates
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
113
3aaac1af65d5 lots of updates
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
114 The Javascript glue code also requires more than the half of the code base to
3aaac1af65d5 lots of updates
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
115 bind the C code to the Javascript interpreter. Disabling Javascript reduces the
3aaac1af65d5 lots of updates
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
116 total code by more than 60%.
31
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
117
38
3aaac1af65d5 lots of updates
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
118 But in other hand, irccd still follows the UNIX philosophy of doing minimal
3aaac1af65d5 lots of updates
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
119 things and be extended by the user externally through plugins. It also tries to
3aaac1af65d5 lots of updates
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
120 stick to POSIX and use as much as possible simple and clean code. By itself,
3aaac1af65d5 lots of updates
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
121 irccd's responsability is to poll IRC events, call plugins and hooks and that's
3aaac1af65d5 lots of updates
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
122 it.
3aaac1af65d5 lots of updates
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
123
3aaac1af65d5 lots of updates
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
124 Shouldn't irccdctl be named irccctl?
3aaac1af65d5 lots of updates
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
125 ------------------------------------
3aaac1af65d5 lots of updates
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
126
3aaac1af65d5 lots of updates
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
127 Yes, technically speaking UNIX daemons may have a name `bard` and an optional
3aaac1af65d5 lots of updates
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
128 utility `barctl` without the trailing 'd' to control the daemon. But since irccd
43
82badbee34d1 update for 4.0.0
David Demelier <markand@malikania.fr>
parents: 38
diff changeset
129 has already two 'c', irccctl would be annoying to type especially since having
38
3aaac1af65d5 lots of updates
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
130 three identical consecutive letter is unusual. So as an exception, the utility
3aaac1af65d5 lots of updates
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
131 is named `irccdctl` rather than `irccctl`.
31
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
132
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
133 What does irccd drink?
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
134 ----------------------
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
135
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
136 Irccd only drinks white beer and French cognac.
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
137
e902ab63f718 import faq from redmine
David Demelier <markand@malikania.fr>
parents:
diff changeset
138 [duktape]: http://duktape.org