Automatisms of Eggdrop
Preface
Eggdrop was created as a channel management IRC bot. Without any configuration or scripts, it will do a few things that may annoy you, or the IRC operator.
As the owner of an Eggdrop, you are responsible for the behavior of your bot. This page should help you understand those automatism, and give you hints on how to configure your Eggdrop in such a way that it suits its mission. Often it is enough to follow one of the suggestions.
irc module
keep-nick
If the keep-nick
setting is enabled (the default), Eggdrop will regularly try to change its nick to the contents of the nick
setting if the current nick is different.
This can go wrong if:
Services enforcer (NickServ)
When Eggdrop fails to identify with NickServ and has their nick forcibly changed to Guest12345. This often leads to a loop where Eggdrop will change their nick back once it has been released, and then NickServ changing the nick back to Guest12345 in an endless loop.
Suggestions:
- Setup SASL in the Eggdrop config (if the network supports it)
- Disable the enforcer for the bot nick (often through a command like
.msg NickServ SET ENFORCE OFF
) - Install a script that authenticates to NickServ when NickServ complains. (Only needed if SASL is not supported)
- Disable
keep-nick
in the config
/SANICK
and similar shenanigans
Channel module
Eggdrop & Channels
Unlike most IRC clients, Eggdrop knows which channels it wants to be in, and where it does not want to be in.
Eggdrop wants to be in the channels that have been added and are not set to +inactive
Eggdrop will regularly try to join every channel it is not in but wants to be in. Eggdrop will also leave all channels it does not want to be in.
Where this can go wrong:
Network autojoin channels
Some networks have a channel every new client will join after they connect.
Suggestions:
- Ask for an exception for your bot.
- Add the channel to eggdrop, so it won't leave it.
- Leave things as-is - Eggdrop will join the channel on connect and then part it.
Channel Forwards
Many networks support features to forward a client when it can not join a channel. This will forward Eggdrop to that channel, then Eggdrop will part the channel because it does not want to be in that channel, which is repeated every minute. (This will annoy a lot of people)
Suggestions:
- If your network has a no-forward usermode, set it. On libera, this usermode is
+Q
.
The config has an example that sets and unsets some usermodes on connect.
- Use a script to set the channel Eggdrop has been forwarded from to
+inactive
Auto-rejoin after a kick
Even after a kick, Eggdrop wants to be in the channel, so it will join it again. Some consider this rude or do not like it.
Suggestion:
- Use a script to set a channel to
+inactive
after it has been kicked.
Need ops
Eggdrop wants to be a channel operator in all channels it is in (and complain if it does not have ops)
Eggdrop will trigger the need
binds/need-ops
setting once every minute, so if you have scripts that work on those, it might be a good idea not to flood services or other means
Ban/Invex/Exempt lists
Eggdrop has an internal ban, invex and exempt list. In the default configuration, Eggdrop will expire bans after 120 minutes, and invites/exempts after 60 minutes. Depending on the setting, eggdrop may also reapply a ban that just has been removed if it is on the internal ban list.
The relevant channel settings for bans are:
ban-time
: Default ban time. Can be set to0
to not expire bans.dynamic-bans
If enabled, Eggdrop will only place bans on the internal ban list when needed (someone with a matching host is in the channel)
Also, Eggdrop will expire user bans after ban-time
If disabled, Eggdrop will place all bans in its internal ban list in the channel and reapply it if it was removed.
user-bans
If disabled, eggdrop will remove bans set by users.
invex/exempt have similar settings.
Suggestions:
- Disable
dynamic-bans
- this is usually a good approach, but makes the internal ban list less useful, as you are now limited by the maximum number of bans you can have on a channel. - Set
ban-time
to0
- then eggdrop won't expire bans by default, but bans it places as retaliation also do not expire.
Mode lock
Eggdrop has a mode-lock channel setting. It will try to keep those modes on the channel. If the network channel service has a conflicting mode-lock, Eggdrop may fight with the Services over the channel modes.
Suggestion:
- Set
mode-lock
to nothing and use the network channel service to enforce modes.
Cycle
By default, Eggdrop will leave an empty channel where it does not have channel operator status and immediately rejoins it to gain channel operator status (cycling). This can go wrong if the channel is registered - as the services will remove the channel operator status immediately. This also won't work if Eggdrop is on a restricted connection or the server is in split-mode (not granting operator status in new channels).
Suggestion:
- Disable the
cycle
channel setting.
Flood
By default, eggdrop has some sane default for the flood settings. You may want to change those.
Stopnethack & nodesynch
Stopnethack tries to prevent "server ops" - a server giving someone ops. Nodesynch tries to prevent non-ops from doing things only channel ops can.
How it can go wrong:
Net rejoin after wait-split
If a netsplit goes on for longer than wait-split
seconds, Eggdrop considers the rejoin to be a new join, triggering stopnethack.
Suggestions:
- Increase
wait-split
- Set
-stopnethack
on all channels
Oper override
Oper override triggers a desynch. Messing with ircops is a good way to get banned from the network.
Suggestion:
- Set
+nodesynch
on all channels.
Services joining the channel
Services usually join the channel with server ops (nethack). On other networks, it appears that the Services give themself ops (desynch).
Suggestion for nethack type networks:
- Add a handle with the
+e
(nethack-exempt) flag for the services. - Set all channels to
-stopnethack
Suggestion for desync type networks:
- Set all channels to
+nodesynch
Other operator modes (+q and +a)
Eggdrop does not recognize other prefixes as operator, so giving someone +q or +a without +o makes Eggdrop believe that the user is not a channel operator. When that user then does something only channel operators can do (/kick, /mode...), it will trigger a desync.
Suggestion:
- Set all channels to
+nodesynch
Revenge & bitch
Those options are disabled by default.
CTCP module
By default, Eggdrop will answer CTCP requests. That behavior can be changed in the config.