view 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
line wrap: on
line source

% irccd - faq
% David Demelier <markand@malikania.fr>
% 2022-02-03

Frequently asked questions
==========================

Is SSL supported?
-----------------

Yes.

Why plugins are not loaded per server?
--------------------------------------

This is a good question.

I thought a lot about using plugin per server at first, this will add more
flexibility about using different plugin configuration per server but will also
be a huge pain to maintain for the user. Because a lot of people will use an
only one irccd instance and server, I prefer to keep plugins globally and not
per server basis.

This also means that by default, all plugins will be enabled on all servers and
channels but it can be easily filtered with the irccd rule system.

Example:

    # Create a whitelist for plugin 'xyz'.
    [rule]
    plugins = xyz
    action = drop
    
    # Re-enable 'xyz' on desired channels.
    [rule]
    servers = "myserver"
    channels = "#mychannel"
    plugins = xyz
    action = accept

Why Javascript instead of (insert my favorite language here)?
-------------------------------------------------------------

Because Javascript is a very light language easy to embed. The irccd
implementation uses [duktape](http://duktape.org).

- Starting with version 3.0.0 you can write plugins in C++.
- Starting with version 3.1.0 you can write hooks in any language, but they are
  less powerful than plugins though.

See also question below.

Do you plan to add (my language)?
---------------------------------

No, there are plenty of bots which support your language.

Is it possible to combine commands like `!foo !bar`?
----------------------------------------------------

Absolutely no, and will never. The special `onCommand` event is dedicated to
specific plugin.

Internally, when a user writes a message like `!stats hello` (assuming that
command char is '!'), then irccd will search for the plugin *stats* and pass the
trailing text to the plugin command.

In that way, the plugins will never conflict on `onCommand`. This security is
called plugin namespaces. By the way, this does not make sense and I don't know
many bot which support this "feature".

Remember, IRC plugins are not shell commands that you can pipe one to another.

Is it possible to integrate plugin dependencies?
------------------------------------------------

No, plugins should be independant.

There are no ways to require a plugin. However, you can still verify if a plugin
is loaded via the `Irccd.Plugin.info` function and eventually load it using
`Irccd.Plugin.load`

Does irccd support DCC?
-----------------------

Nobody use DCC.

What if I use a specific encoding?
----------------------------------

Irccd is encoding agnostic just as the IRC protocol. If the server send UTF-8
messages, then irccd will pass these UTF-8 encoded messages to the plugins.

The bot does not connect to the Freenode server!
------------------------------------------------

Be sure to set a different identity (with different nickname **and** username)
because **irccd** is a registered nickname.

Isn't irccd bloat and against KISS/UNIX philosophies?
-----------------------------------------------------

The definition of bloat is quite subjective.

In some aspects it may be considered as a bit too complicated for an IRC bot but
is still quite minimal.

Because irccd offers a runtime controllable mechanism with lots of commands (32
at this time of writing), it increases the total number of lines of code. Please
also note that irccd is excessively tested. We could argue that a lots of these
command may be unneeded but I like that I can keep the daemon running for months
without having to shut it down and restart it to change its nickname.

The Javascript glue code also requires more than the half of the code base to
bind the C code to the Javascript interpreter. Disabling Javascript reduces the
total code by more than 60%.

But in other hand, irccd still follows the UNIX philosophy of doing minimal
things and be extended by the user externally through plugins. It also tries to
stick to POSIX and use as much as possible simple and clean code. By itself,
irccd's responsability is to poll IRC events, call plugins and hooks and that's
it.

Shouldn't irccdctl be named irccctl?
------------------------------------

Yes, technically speaking UNIX daemons may have a name `bard` and an optional
utility `barctl` without the trailing 'd' to control the daemon. But since irccd
has already two 'c', irccctl would be annoying to type especially since having
three identical consecutive letter is unusual. So as an exception, the utility
is named `irccdctl` rather than `irccctl`.

What does irccd drink?
----------------------

Irccd only drinks white beer and French cognac.

[duktape]: http://duktape.org