Skip to content

Change Log#

Overview of significant script changes between versions.


This page is useful to identify new features, command usage changes, and new configuration settings.

Updating Armour is best handled through the Updater feature from v4.x, which also handles configuration files merges to retain existing settings and insert new ones from a new script version.

To inquire about any changes, report a bug, or to request new features, please see the Contact page.



Upcoming v4.1 Release

Preview of what is coming in the next release

Change Description
Enhancement Added file logger to ./armour/logs directory with configurable log level via cfg(log:level)
Enhancement Performance improvements in floodnet detection & response
Enhancement Allow bot to send all possible actions via channel services (excl. invite and channel lock/unlock modes)
Enhancement The usearch command now matches search string against network account as well as bot user
Enhancement Add bot install and config info to conf info and status commands
Enhancement Streamlined Armour initialisation by providing instructions as soon as eggdrop password is set with pass command, using that password for the first Armour user
Enhancement Allow update install command to apply local update that was already installed form another bot in the same install directory
Enhancement Added seen plugin to identify when users were last seen (and how). Uses command: seen
Enhancement Added speak plugin for text-to-speech capabilities

- Supports OpenAI and Elevenlabs text-to-speech (TTS)
- Configurable voices in both services
- Literal TTS via speak command or spoken output when prefixing AI requests with speak
Enhancement Added ninjas plugin for fun commands courtesy of

- joke: output a random joke
- dad: output a random Dad Joke
- cocktail: output mixing instructions for a searched cocktail
- chuck: output a random Chuck Norris joke
- history: output a random event from 'this day in history', optionally relating to a search term
- fact: output a random fact
Enhancement Added humour plugin for fun commands courtesy of

- gif: output a random GIF from a given search phrase
- praise: give words of praise to a given nick with a given prompt
- insult: insult a given nick with a given prompt
Enhancement Allow settings to be changed with conf command (without rehash)
Enhancement Completed IPv6 support

- Support for IPv6 CIDR notation in whitelists and blacklists
- Support for IPv6 in DNSBL lookups (incl. scanrbl command)
- Support for IPv6 in port scanner (incl. scanport command)
- Support for IPv6 in resolver for hostname lookups
- Support for IPv6 in asn and country commands
Enhancement Added support for autotopic channel setting

- Check periodically (every cfg(atopic:period) mins)
- Apply autotopic if current topic is different to channel description and optional URL
- Uses channel settings desc and url to form automatic topics
Enhancement Added support for floatlim channel setting

- Implement management of floating channel limit with channel mode +l
- Reduces risk of disruption from large floodnets or Excess Floods
- floatperiod: the frequency (in seconds) to periodically check for channel limit changes
- floatmargin: set channel limit to margin count above current channel user count
- floatgrace: only change chanenl limit if the difference between current users and chanenl limit is within the floatgrace
- Use default values for floatperiod, floatmargin, and floatgrace when floatlim is initially turned on
- floatlim will be enabled for newly registered channels unless cfg(float:auto) is disabled
Enhancement New config option cfg(list:host:convert) to determine if hosts get converted to IPs when using add command (default: no)
Enhancement Set new sensible defaults in

New Defaults:
- eggdrop altnick to <nick>-
- eggdrop username to the user running
- eggdrop vhost4 address to first IP on primary NIC
- eggdrop servers address based on network value (for Undernet, DALnet, IRCnet, EFnet, Quakenet)
Enhancement Added deploy command to spawn new bots from IRC

- usage: deploy <bot> [setting1=value1 setting2=value2 settingN=valueN...]
- configure eggdrop
- configure Armour
- start eggdrop
- allow custom settings as per deployment *.ini syntax
- use existing settings from current bot if setting overrides not provided
Improvement Removed dependency on md5 or md5sum binaries
Improvement Remove duplicate settings from armour.conf.sample
Improvement Unbind commands if not enabled in configuration file: openai (ask, askmode, image), speak (speak), captcha, trakka (ack, nudge, score), ninjas (joke, dad, cocktail, chuck, history, fact), humour (gif, praise, insult)
Fixed Bug Don't send duplicate notes about the same revision when updates are detected
Fixed Bug Fix script for BSD and macOS systems
Fixed Bug Fix cronjob to periodically delete unvoted and unquoted AI files more than cfg(ask:expire) days old
Fixed Bug Fixes for DB migration from Armour v3.x



Change Description
Enhancement Installation script supports bot additions through deployment files with -f <file>
Enhancement Allow invite command to be used for unregistered cfg(chan:report) channel for global level >=450 users
Enhancement Add eggdrop memory usage to status command output
Improvement Disable channel mode +D/+d/-D/-d handling for non-ircu server ircds
Fixed Bug Command mod not working unless channel was specified
FIxed Bug Command showlog flooded bot when -max 0 specified


Change Description
Enhancement Installation script now handles eggdrop configuration, startup, and rehash
Improvement Removed redundant eggdrop sample db files
Improvement Use botname specific DB file names isntead of old ./db/armour.db default
Fixed Bug Fix floodnet bug not setting bans
Fixed Bug Wrong channel name could appear in mod command output
Fixed Bug The cfg(chan:nocmd) channels were not searched space delimited


Change Description
Enhancement Added script to add additional bots to an existing Armour installation
Enhancement Added act command shortcut to say -a for bot actions (/me)
Improvement Created helpful error messages in image command if file path does not exist or is unwritable
Improvement Ensure image and speak files don't get overwritten from random file name generator
Improvement Automatically load command shortcuts without needing to specify them in armour.conf
Improvement Updated default web CAPTCHA kick messages
Fixed Bug OpenAI image plugin was not working without the currently-private speak plugin being loaded
Fixed Bug Added config value cfg(ban:full:modes) for handling when channel banlist is full
Fixed Bug Added uservar handler for manually configured eggdrops


Change Description
Fixed Bug Allow stats command to work when channels contain upper case characters
Fixed Bug Delete user settings when user is deleted from deluser command


Change Description
Enhancement Added ability for script update notes to include reference to changelog URL. Available with future updates after revision 2024030100
Enhancement Updated openai plugin

- Added image creation with DALL-E
- Supports text overlay with image generation prompts when ImageMagick binary convert is installed
- Support regular random image output with imagerand channel setting
- Preserve image files via quote reference and image votes
- Added support for optional blacklisted ask string masks (and included match channels)
Enhancement Added optional web CAPTCHA support during secure mode

- Requires armour-verify web application (yet to be released)
- Supports configurable rate limiting
- Supports denial based on kick history
- Supports log and status cecall via captcha command
Enhancement Added kicklock channel setting to allow temporary channel lock

- Setting parameter takes X:Y:<modes>:T to lock channel with <modes> for T mins when X kicks occur within Y seconds
Enhancement Added whitelist & blacklist onlynew flag to only match clients that have newly joined the channel (within cfg(time:newjoin) secs)
Enhancement Added whitelist continue flag to allow matching to continue, allowing a blacklist match to override specific whitelist matches
Enhancement Prevent secret (+s) channels from displaying in public command output for info and userlist commands
Enhancement Remove temporary channel lock triggerered from bull banlist, after banlist is no longer full
Improvement Prevent superfluous DNS lookups for IP country and ASN
Improvement Automatically join cfg(chan:report) when Armour is initialised
Improvement Log CTCP VERSION requests to cfg(chan:report)
Improvement Improved parameter validation with newuser command, to provide more helpful errors from incorrect command usage
Fixed Bug Prevent floodnet trigger when a client joins multiple bot channels in quick succession
Fixed Bug Prevent CAPTCHA edge case where a client can be kicked from a previous CAPTCHA attempt after joining a second time and being voiced
Fixed Bug Prevented occasional incorrect bans being set against mask *!*


Change Description
Enhancement Support for eggdrop 1.9.0
Enhancement Introduced arm namespace to improve compatibility with 3rd party eggdrop scripts
Enhancement Added support for multiple channels
Enhancement Implement automatic database upgrade from v3.5.x to v4.0
Enhancement Add inituser command to automate the creation of the initial bot user after initial script deployment
Enhancement Add operop channels setting to automatically op IRC Operators
Enhancement Allow login to achieve autologin based on network ACCOUNT
Enhancement Allow register command to automatically send note to global bot admins
Enhancement Allow idle command to display a user's channel idle time
Enhancement Create special handling in the jump command when a ZNC bouncer is used, via cfg(znc) setting
Enhancement Add whitelist type reply to make the bot respond with channel text when a client speaks matching strings
Enhancement Enhance whitelist and blacklist entries with new list flags:

- Add depends to allow list entries to depend on other entries before a match is determined. Supports chaining multiple entries.
- Add onlysecure to only match whent he channel is in secure mode
- Add onlynew to only match when teh client joined the channel in less than cfg(time:newjoin) secs ago
- Add silent to not send opnotices when a list match is found
- Add captcha to always send and expect a CAPTCHA challenge before voicing users
- Add disabled to disable a lsit entry until re-enabled by setting disabled to 0
Enhancement Allow newly registred users via register or newuser commands to receive a configable global level
Enhancement Allow last in latest
Enhancement Added chanlist command to view registered channels
Enhancement Added new lang command to display user clients.
Enhancement Added strictop command to prevent users level <100 from being opped
Enhancement Added strictvoice command to prevent users level <25 from being oppe
Enhancement Allow DNSBLs to be configured to be used with scalrbl command but not channel join scanner
Enhancement trakka (plugin): add ack command to increase a score just as voicing or opping the client does
Enhancement Allow users to create their own bot username using the register command if cfg(register) is enabled
Enhancement Allow info command to lookup users and channels
Enhancement Add note command to support sending, reading, and deleting of notes between users
Enhancement Add support for IPv6 host values in whitelist and blacklist entries
Enhancement Allow hostnames to be specified in asn command
Enhancement Add support for challenge CAPTCHA when channel mode is secure
Enhancement Add 'text' type for whitelist and blacklist entries to trigger on wildcard matched text strings.

whitelist: respond back to the channel user with reason serving as tet reply
blacklist: kickban user with given reason
Improvement Removed legacy support for flat file databases


  • 2020-02-05: New release of Armour v3.5.1
Change Description
Enhancement New feature to automatically remove blacklist entries when matching ban is recently removed. Note that user must have access to rem command and ban must have been placed within the configured arm(cfg.idunban.time) period (default 1 hr).

New Config:
arm( whether to carry out automatic removals


  • 2020-02-03: New release of Armour v3.5.0
Change Description
Enhancement New blacklist entry type text -- supporting wildcard and regular expression matching of channelt ext, including cumulative time based matching.

New Config Settings:
arm(cfg.text.exempt.op): whether to exempt opped users from the text matching
arm(cfg.text.exempt.voice): whether to exempt voiced users from the text matching
arm(cfg.text.newcomer): whether the text matches only apply to newly joined users
arm(cfg.text.autoblack): whether to automatically add blacklist entries upon match
arm(cfg.text.autoblack.reason): the automatic blacklist entry reason to use
arm(cfg.text.warn): whether to warn a user on first match (where threshold >1)
arm(cfg.text.warn.type): notc: warn via /notice; chan: warn via channel
arm(cfg.text.warn.msg): the warning message to display (channel will prefix with nick)
Enhancement Support to manage channel line floods -- for a single client; or entire channel.

New Config Settings:
arm(cfg.lineflood.nicks): number of lines per secs to allow for single client (lines:secs)
arm(cfg.lineflood.chan): number of lines per secs to allow for whole channel (lines:secs)
arm(cfg.lineflood.chan.mode): modes to temporarily set during channel lineflood
arm(cfg.lineflood.chan.lock): temporary lockdown time when during channel lineflood
arm(cfg.lineflood.exempt.op): whether to exempt opped users
arm(cfg.lineflood.exempt.voice): whether to exempt voiced users
arm(cfg.lineflood.newcomer): whether to only count lines for newly joined users
arm(cfg.lineflood.reason): kick reason to use for kickban when user reaches limit
arm(cfg.lineflood.autoblack): whether to automatically add blacklist entries on match
arm(cfg.lineflood.autoblack.reason): the automatic blacklist entry to reason to use
Enhancement Allow automatic removal of recent bans by upon blacklist removal by ID.

New Config Settings:
arm(cfg.idunban.time): time to allow automatic removal of recent bans by specifying id
Enhancement Improved support for other networks using GNUWorld services.

New Config Settings:
arm(cfg.auth.user): renamed from arm(auth.user)
arm(cfg.auth.pass): renamed from arm(auth.pass)
arm(cfg.auth.hide): renamed from arm(auth.hide)
arm(cfg.gnuworld.nick): the nickname of the mod.cservice GNUWorld service
arm( the authentication hostname of the mod.cservice GNUWorld service
arm(cfg.xhost.ext): the non-regex extension for umode+x users
Improvement Prevent secure mode if ircd does not support it (ie. IRCnet/EFnet)
Enhancement New command conf to retrieve configuration setting values.

Ensure to add set addcmd(conf) line in configuration file.
Enhancement New onjoin channel greeting setting for users (set with set or moduser commands).

New Config Settings:
arm(cfg.greet.self): whether users can set their own greetings (via 'set' command)


  • 2020-02-01: New release of Armour v3.4.5
Change Description
Enhancement Added support for other ircds without extended WHO response (raw 354), such as IRCnet.

New Config Settings:
  • 1: ircu (Undernet/Quakenet)
  • 2: IRCnet/EFnet
Enhancement New config parameter for hostname of service clients, to better support networks other than Undernet. br>
New Config Settings:
arm(cfg.servicehost): hostname
Enhancement New config parameter for umode +x to achieve autologin on networks other than Undernet.

New Config Settings:
arm(cfg.xregex): regex pattern
Enhancement trakka plugin: new config parameter for umode +x hosts, to better support other networks.

New Config Settings:
trakka(cfg.xhost): regex pattern
Fixed Bug Adaptive floodnet detection not working for patterns: nick!ident/rname, ident/rname, nick/rname
Enhancement Ensure plugins also only send syntax via /notice if arm( var is enabled
Fixed Bug Floodnet scans wrongfully detecting umode +x as being two channel joins
Fixed Bug Regex blacklist and whitelist patterns:
  • not saving correctly for some patterns
  • not reporting correctly when a match is made
  • not adding correctly when bot is commanded by botnick
Enhancement Generate temporary random password when adding users, for non-ircu derived ircds.

New Config Settings:
arm(cfg.randpass): length of generated password string
Enhancement Remove use of 'xuser' for ircds without ACCOUNT
Improvement Safely unload vars on reload, to avoid script warnings
Fixed Bug Command syntax broken for msg and dcc command usage
Fixed Bug Commands not working in DCC partyline


  • 2020-01-17: New release of Armour v3.4.4
Change Description
Fixed Bug DNS lookups not working properly with scanrbl command
Enhancement Allow help and syntax responses from public commands, to be sent via /notice.

New Config Settings:
arm( whether to send responses via /notice


  • 2020-01-16: New release of Armour v3.4.3


  • 2020-01-15: New release of Armour v3.4.2
Change Description
Enhancement adduser no longer requires temporary password
Enhancement tell plugin context fixes and improvements
Enhancement Alert users upon autologin when no password is set.

New Config Settings:
arm(cfg.alert.nopass): enabled or disabled


  • 2020-01-05: New release of Armour v3.4.1
Change Description
Fixed Bug Autologout when using sqlite, not working
FIxed Bug Autologin not working first time for a new user
Fixed Bug Newpass not working
Enhancement Changed userline separator from : to | to support IPv6 hosts
Enhancement Command cmdlog now logs to report channel


  • 2019-03-17: New release of Armour v3.4.0
Change Description
Fixed Bug Issues with secure mode preventing stable operation
Enhancement Allow 'country' blacklist entries to be ignored when user has resolved ident.

New Config Settings:
arm( enabled or disabled


  • 2019-01-21: New release of Armour v3.3.3
Change Description
Fixed Bug Scans halting from clients with nicks or realnames using special chars


  • 2014-10-06: New release of Armour v3.3.2
Change Description
Fixed Bug Various small fixes


  • 2014-09-29: New release of Armour v3.3.1
Change Description
Enhancement Support for email and languages user attributes


  • 2014-09-28: New release of Armour v3.3.0
Change Description
Enhancement Support optional sqlite3 databases.

New Config Settings:
arm(method): file or sqlite


  • 2013-02-15: New release of Armour v3.2.2
Change Description
Fixed Bug Invalid references to paranoid(scanlist) var
Fixed Bug Invalid references to scanlist var
Fixed Bug arm:db:write was duplicating timers
Enhancement Command save now saves userdb and white & black lists, providing stats on both
Enhancement Comamnd load now loads userdb and white & black lists, providing stats on both
Enhancement Allow channel name visibility in channel blacklist kick reason to be configurable.

New Config Settings:
arm(cfg.bchan.reason): enabled or disabled


  • 2011-12-26: New release of Armour v3.2.1.2
Change Description
Fixed Bug Mode secure could cause infinite scan loops


  • 2011-12-06: New release of Armour v3.2.1.1
Change Description
Enhancement Allow user specific automode actions (none, voice, op).
  • Modified commands: adduser, moduser, whois


  • 2011-11-22: New release of Armour v3.2.1.0
Change Description
New Command moduser: Modifies an existing users username, level, xuser or password
New Command userlist: Views entire userlist
New Command die: Kills the bot entirely
New Command say: Has the bot send a message to a channel, all channels or a given nickname. optionally can be an action.
Enhancement Command whois can now lookup via nickname with = prefix (a la Undernet's X)

Examplewhois =nick will check if nick is logged in and if so, execute whois on that username
Fixed Bug IPv6 IP space was breaking scan results
Fixed Bug Nicks with special characters breaking scanner
Fixed Bug No whitelist action being taken for channel entries
Fixed Bug Autologout anomaly
Fixed Bug Nickname change anomaly
Enhancement Allow nickname and global command character prefixes.

New Config Settings:
arm(cfg.char.nick): whether to allow nickname as command prefix
arm( whether nick completion is required (with tailing : char on nickname)
arm(cfg.char.glob): whether global command prefix char * can be used to control all bots in a channel
Enhancement Control whether or not command shortcuts are enabled.

New Config Settings:
arm(cfg.cmd.short): enabled or disabled


  • 2011-03-17: New release of Armour v3.2.0.6
Change Description
New Plugin DroneBL. Support for libdronebl (add, remove & view dronebl submissions).

Note: RPC2 key is required from and you are responsible for your own submissions.

New Config Settings:
arm(cfg.dronebl.lvl): level required for DroneBL submission
arm(cfg.donrebl.type): default DroneBL submit type
Enhancement Introduced additional metrics to help determine which clients to voice when in mode secure:
  • clones (IP or host)
  • signon age
  • trakka plugin score (optional)
New Config Settings:
arm(cfg.paranoid.clone): number of clones to mark for manual review (no autovoice)
arm(cfg.paranoid.signon): server connection time must be older than N seconds for autovoice
arm(cfg.paranoid.trakka): minimum trakka score (if plugin loaded) to gain


  • 2011-02-19: New release of Armour v3.2.0.4
Change Description
Enhancement Ability to specify which G-Line patterns will not add blacklist entry.

New Config Settings:
arm(cfg.gline.nomask): wildcard pattern for G-Lines not to add
Fixed Bug Command help was only working for level 500 users


  • 2011-01-30: New release of Armour v3.2.0.3
Change Description
Fixed Bug Command stats not always working
Enhancement Commands add, rem, and view now support comma delimited values for multiple entries.

Example: b add black user1,user2,user3,user4 ban abuse is not tolerated!


  • 2011-01-15: New release of Armour v3.2.0.1
Change Description
Enhancement Introduce TCL 8.6 coroutines for asynchronous:
  • DNSBL lookups
  • port scans
  • geo lookups
  • ASN lookups

Big performance gains!
New Command restart: saves db & restarts bot
New Command status: retrieves current bot status, uptime, traffic usage
New Command jump: Jumps bot server
New Command rehash: Saves database & rehashes bot


  • 2010-09-18: New release of Armour v3.1.2.1
Change Description
Improvement Tidied idents from double space -> tabs
Enhancement Allow for different md5 binaries.

New Config Settings:
arm(cfg.md5): either md5 (bsd) or md5sum (linux)
Enhancement Tracking of recently joined hosts, for fast blacklist additions.

New Config Settings:
arm(cfg.lasthosts): how many recent hosts to hold in memory
Enhancement Added last method when adding whitelist & blacklists. Using last <N> will add the last N entries to the blacklist/whitelist either type host or user (if umode +x).

New Config Settings:
arm(cfg.lasthosts): how many recent hosts to track
Enhancement Added /silence protection for bot.

New Config Settings:
arm(cfg.silence): list of silence masks (including exclusions) to set on server connection
Enhancement Add automatic bans on blacklist entry (host/user).

New Config Settings:
arm( whether to add automatic entries or not
Enhancement Ability to automatically unban upon blacklist removal (host/user)
Enhancement Prevent a blacklist entry being added for a value that is whitelisted
Enhancement Prevent a whitelist entry being added for a value that is blacklisted
Enhancement Configurable default exempt time via 'exempt' command.

New Config Settings:
arm(cfg.exempt.time): default time in minutes a nick is exempt from scans upon channel join
Enhancement Added extra [mins] parameter to exempt command to override the above default

Usage: exempt \<nick> [mins]
Enhancement Added Armour plugin support
  • trakka: tracks regulars and notifies channel when clients join
  • smsbot: basic SMS gateway with ACL supported phonebook
  • tell: tell users certain things based on time, timers, or activity
Enhancement New modular help topics using individual help files
Enhancement Complete rewrite of command binds. Every command can now be enabled/disabled individually with a unique level for public, privmsg, and DCC binds as desired.

New Config Settings Removed:
  • arm(
  • arm(cfg.cmd.msg)
  • arm(cfg.cmd.dcc)

New Config Section Added: Use set addcmd to toggle commands and ACL
Enhancement Added optional ?chan? arg to commands: op, deop, kick, voice, devoice
New Command invite to invite users to channel.

Example:invite: invite ?chan? [nick1] [nick2] [nick3] [nick4] [nick5] [nick6]....
Fixed Bug Autologin was not always starting after server jump
Enhancement Include list ID to DNSBL blacklist kick reasons
Improvement Removed 'NULL' from DNSBL blacklist kick reasons if no info was returned
Fixed Bug Command stats was not returning accurate information. Stats not being saved to DB file correctly.
FIxed Bug New ACL system was only allowing level 500 users to utilise privmsg commands.


  • 2010-09-18: New release of Armour v3.1.2
Change Description
Enhancement Statistical hit counts for blacklist & whitlist entries
New Script to upgrade existing DB files to allow new statistical hit field.

Note:This must be done manually before loading new code.

Usage:./ <dbfile>
Enhancement Integration proc redirection for external scripts after joining client passes scanner.

New Config Settings:
arm(cfg.integrate.procs): List of procs to send nick uhost hand chan to after passing scanner
Enhancement Now kicking any clients where host is matched during floodnet detection


  • 2010-09-09: New release of Armour v3.1.1
Change Description
Documentation Created UPDATING.txt file to assist in the knowledge of new features and config variables
Enhancement Automatic blacklist entry on G-Line.

New Config Settings:
arm( whether to add automatic blacklist entry on GLine
arm(cfg.gline.mask): optional G-Line reason pattern for above to apply
Enhancement Portscanner: Require a minimum number of open ports to be detected before kickban action.

New Config Settings:
arm(cfg.portscan.min): minimum open ports before kickban