· last year · May 21, 2024, 05:35 AM
1# ------------------------------------------------------------------------------------------------
2# armour.conf v5.0 - 2024-05-21
3# ------------------------------------------------------------------------------------------------
4# _
5# / \ _ __ _ __ ___ ___ _ _ _ __
6# / _ \ | '__| '_ ` _ \ / _ \| | | | '__|
7# / ___ \| | | | | | | | (_) | |_| | |
8# /_/ \_\_| |_| |_| |_|\___/ \__,_|_|
9#
10#
11# Abuse and channel management script for eggdrop bots on the IRC networks.
12#
13# https://armour.bot
14#
15# Armour automatic onjoin scanning be be placed in one of three modes:
16# ON : Automatic scans upon client channel /join
17# SECURE : Restricted channel modes (e.g., +Dm) with actions post-scan
18# OFF : Manual scans only
19#
20# ------------------------------------------------------------------------------------------------
21# SUPPORTING
22# ------------------------------------------------------------------------------------------------
23#
24# whitelists
25# blacklists
26# dnsbl scans : dnswl exemptions and remote 'bounce' bot supported
27# port scans : remote 'bounce' bot supported
28# onchan scans : remote 'bounce' bot supported
29#
30# ------------------------------------------------------------------------------------------------
31# WHITELIST & BLACKLIST TYPES:
32# ------------------------------------------------------------------------------------------------
33#
34# user : authenticated username
35# host : hostmask, hostname, IP and CIDR notation accepted
36# regex : nick!user@host/rname
37# text : channel text matches
38# country : geo location ip lookup
39# asn : autonomous system number lookup
40# chan : onchan #channel
41# rname : realname
42#
43# ------------------------------------------------------------------------------------------------
44# WHITELIST ACTIONS:
45# ------------------------------------------------------------------------------------------------
46#
47# A: Accept User (exempt scans) -- default
48# O: Op User
49# V: Voice User
50#
51# ------------------------------------------------------------------------------------------------
52# BLACKLIST ACTIONS
53# ------------------------------------------------------------------------------------------------
54#
55# B: KickBan User
56#
57# ------------------------------------------------------------------------------------------------
58#
59# Code by : Empus @ Undernet - empus@undernet.org
60# Last modified : 2024-05-20
61#
62# Please contact me should you need any assistence, but I hope most config options are explanatory.
63#
64# Documentation can be found at: https://armour.bot
65#
66# Contact me at #armour on Undernet
67#
68# ------------------------------------------------------------------------------------------------
69namespace eval arm {
70# ------------------------------------------------------------------------------------------------
71
72
73
74# ------------------------------------------------------------------------------------------------
75# GENERAL SETTINGS
76# ------------------------------------------------------------------------------------------------
77
78# -- bot name variable
79# -- used to automate db filename and assist script updates
80# -- ensure this *.conf file is named as BOTNAME.conf
81# -- if multiple Armour bots run from the same eggdrop directory, each MUST have a different value
82set cfg(botname) "kratos"
83
84# -- alert users if they don't have a password set? (0|1) - [0]
85set cfg(alert:nopass) 1
86
87# -- debug type? (putlog|putloglev) - [putloglev]
88# putlog will log everything to partyline (very verbose!)
89# putloglev allows debug levels to be used by enabling each level (1-5) with .console +N
90# .console +1
91# .console +2
92# .console +3
93# ... etc
94set cfg(debug:type) "putloglev"
95
96
97# -- file logging level (0-4) - [0]
98# -- data logged to ./armour/logs/<botname>.log
99# -- levels:
100# 0: most important information
101# 1: gentle verbosity
102# 2: extra information
103# 3: useful for debugging
104# 4: extremely verbose
105set cfg(log:level) ""
106
107
108# ------------------------------------------------------------------------------------------------
109# UPDATE SETTINGS
110# ------------------------------------------------------------------------------------------------
111
112# -- run hourly check for new script updates? (0|1) - [1]
113# -- notes are sent to global level 500 users when updates are found
114set cfg(update) "0"
115
116# -- send notes to global 500 users when new script versions are found? (0|1) - [1]
117set cfg(update:notes) 1
118
119# -- automatically update script when new updates are found? (0|1) - [0]
120# -- notes are sent to global level 500 users when updates are installed
121# -- requires cfg(update) to be enabled
122set cfg(update:auto) 0
123
124# -- github branch to check and apply updates from - [master]
125set cfg(update:branch) "master"
126
127# -- automatically remove old script backups after N days - [7]
128set cfg(update:flush) 7
129
130# -- enable debug mode to download and stage new updates but do not execute (0|1) - 0
131set cfg(update:debug) 0
132
133
134
135# ------------------------------------------------------------------------------------------------
136# USER REGISTRATION SETTINGS
137# ------------------------------------------------------------------------------------------------
138
139# -- allow users to self-register bot usernames? (0|1) - [1]
140set cfg(register) 1
141
142# -- if allowed, users must be in which channels to self-register usernames?
143# space delimited; can be empty to allow in all chans
144set cfg(register:inchan) ""
145
146# -- what global access level to give to newusers? - [1]
147# -- applies to 'newuser' command when no global level given, and to 'register' command
148set cfg(register:level) 1
149
150# -- send notes to global level 500 users when newuser is created with 'register' cmd? (0|1) - [1]
151set cfg(note:register) 1
152
153# -- random password string length
154set cfg(randpass) 10
155
156
157
158# ------------------------------------------------------------------------------------------------
159# NETWORK SETTINGS
160# ------------------------------------------------------------------------------------------------
161
162# -- ircd type [1-2] - [1]
163# 1: ircu/Unreal (e.g., Undernet, Quakenet)
164# 2: IRCnet/EFnet
165# 3: InspIRCd/Solanum/ircd-seven
166set cfg(ircd) 1
167
168# -- connected via ZNC bouncer? (0|1) - [0]
169# this changes 'jump' command behaviour
170set cfg(znc) 0
171
172# -- add automatic blacklist host entry upon g-line? (0|1) - [1]
173set cfg(gline:auto) 1
174
175# -- required G-Line reason mask for above to apply (wildcards) - [G-Lined *]
176set cfg(gline:mask) "G-Lined *"
177
178# -- mask for which G-Lines do NOT add blacklist entry (wildcard) - [AUTO *]
179set cfg(gline:nomask) "G-lined (AUTO *"
180
181# -- bot realname on IRC
182set cfg(realname) "Kratos"
183
184# -- hostname of services - [undernet.org]
185set cfg(servicehost) "undernet.org"
186
187
188
189# ------------------------------------------------------------------------------------------------
190# BOT SETTINGS
191# ------------------------------------------------------------------------------------------------
192
193# -- command prefix [c]
194# If prefix is a letter, command follows (i.e. c op <chan> <nick>)
195# If prefix is a control char, command is embedded (i.e. !op <chan> <nick>)
196# prefix cannot be *
197set cfg(prefix) "k"
198
199# -- allow use of nickname (with or without nick completion char :) as control char? (0|1) - [1]
200set cfg(char:nick) 1
201
202# -- require tab completion char ':' on nickname prefix? (0|1) - [1]
203set cfg(char:tab) 1
204
205# -- allow global prefix char '*' (0|1) - [0]
206set cfg(char:glob) 1
207
208# -- allow command shortcuts? (0|1) - [1]
209# k = kick kb = kickban b = black
210# a = add v = view r = rem
211# e = exempt s = stats t = topic
212# o = op d = deop u = userlist
213set cfg(cmd:short) 1
214
215# -- default mode on load? (on|off|secure) - [on]
216set cfg(mode) "secure"
217
218# -- automatically change mode based on changing of mode +D and -D? (0|1) - [1]
219set cfg(mode:auto) 1
220
221# -- allow jump command to specify server? (0|1) - [1]
222set cfg(jump) 1
223
224# -- send help and syntax responses from public commands via /notice? (0|1) - [0]
225set cfg(help:notc) 0
226
227# -- also sent web documentation links in help command responses? (0|1)? - [1]
228set cfg(help:web) 1
229
230# -- only output usage and web links in help responses? (0|1)? - [1]
231set cfg(help:webonly) 1
232
233# -- stack voice modes when in secure mode? - [0|1]
234# -- this will slow down voicing of new users, by the time set in cfg(stack:secs)
235set cfg(stackvoice) 1
236
237# -- stackvoice timer (secs) - [5]
238set cfg(stack:secs) 5
239
240# -- default whitelist reason - [regular]
241set cfg(def:wreason) "regular"
242
243# -- default blacklist reason - [abuse]
244set cfg(def:breason) "abuse"
245
246# -- auto add blacklist entries on floodnet?
247set cfg(auto:black) 1
248
249# -- netsplit memory timeout (mins) - [60]
250set cfg(split:mem) 60
251
252# -- lockdown eggdrop dcc commands? (0|1) - [1]
253set cfg(lockegg) 1
254
255# -- if locked egg, what flag is required for all commands? - [n]
256set cfg(lockegg:flag) "n"
257
258# -- default temporary exemptions last for how long? (mins) - [5]
259# - via 'exempt' command, time can be overriden
260set cfg(exempt:time) 5
261
262# -- allow users to set their own channel greetings? (0|1) - [1]
263set cfg(greet:self) 1
264
265
266
267# ------------------------------------------------------------------------------------------------
268# NOTE SETTINGS
269# ------------------------------------------------------------------------------------------------
270
271# -- allow user notes? (0|1) - [1]
272set cfg(note) 1
273
274# -- global command level to send notes to all users? - [450]
275set cfg(note:glob) 450
276
277# -- send users note read receipts? (0|1) - [1]
278set cfg(note:receipt) 1
279
280# -- send users notes when added to channels? (0|1) - [1]
281set cfg(note:adduser) 1
282
283# -- send users notes when removed from channels? (0|1) - [1]
284set cfg(note:remuser) 1
285
286# -- send users notes when channel level is modified? (0|1) - [1]
287set cfg(note:level) 1
288
289
290
291# ------------------------------------------------------------------------------------------------
292# CHANNEL SETTINGS
293# ------------------------------------------------------------------------------------------------
294
295# --- channels to NOT operate on. comma separated
296# -- command chans (comma delimited). leaeve empy to allow on all channels
297set cfg(chan:nocmd) ""
298
299# -- autologin /who cycle (secs) - [60]
300# -- how frequently to check the channel list for people who authenticated to X after joining
301# - only if enabled above
302set cfg(autologin:cycle) 60
303
304# -- default command chan (for applicable privmsg & dcc commands)
305set cfg(chan:def) "#usa"
306
307# -- reporting channel (backchan)
308# -- useful for command logging and other diagnostics
309set cfg(chan:report) "#BlkDragon"
310
311# -- how long to disable floodnet detection after chanmode '+d' (secs) - [60]
312# - will be automatically re-enabled on chanmode '-d' anyway
313set cfg(time:moded) 60
314
315# -- how many recently joined hostnames to track? (num) - [600]
316# - for fast blacklists using type 'last'
317set cfg(lasthosts) 600
318
319# -- append the username that set a topic, when set via bot? (0|1) - [1]
320set cfg(topic:who) 0
321
322# -- the frequency in mins to check if topic should be reset when 'autotopic' is enabled - [60]
323set cfg(atopic:period) 60
324
325
326
327# ------------------------------------------------------------------------------------------------
328# FLOAT LIMIT SETTINGS
329# ------------------------------------------------------------------------------------------------
330
331# -- automatically enable FLOATLIM with default values for new channels? (0|1) - [1]
332set cfg(float:auto) 1
333
334# -- the default frequency in seconds to check if limit should be adjusted - [60]
335# -- can be overridden with: modchan <chan> floatperiod <value>
336set cfg(float:period) 60
337
338# -- the default margin to set limit above currentUser count - [10]
339# -- can be overridden with: modchan <chan> floatmargin <value>
340set cfg(float:margin) 10
341
342# -- the grace limit to trigger limit adjustment - [3]
343# -- can be overridden with: modchan <chan> floatgrace <value>
344set cfg(float:grace) 3
345
346
347
348# ------------------------------------------------------------------------------------------------
349# SERVICE AUTHENTICATION SETTINGS
350# ------------------------------------------------------------------------------------------------
351
352# -- authentication username
353# leave blank if login not used or handled in another script
354# leave blank if using NickServ auth mechanism below
355set cfg(auth:user) "GodOfWar"
356
357# -- authentication password
358# leave blank if login not used or handled in another script
359set cfg(auth:pass) "eM1L0mlN"
360
361# -- TOTP (2FA) secret base32 key
362# leave blank to disable 2FA authentication
363# note that this currently requires 'oathtool' to be installed on the server
364set cfg(auth:totp) ""
365
366# -- mechanism for authentication (gnuworld|nickserv) - [gnuworld]
367# set to "gnuworld" for Undernet
368# set to "nickserv" for networks with NickServ
369set cfg(auth:mech) "gnuworld"
370
371# -- auth service nickname - [X]
372# set to "X" for Undernet
373# set to "NickServ" for networks with NickServ
374set cfg(auth:serv:nick) "X"
375
376# -- auth service host - [channels.undernet.org]
377# -- ie. /msg x@channels.undernet.org login <user> <pass>
378# leave blank if using NickServ auth mechanism
379set cfg(auth:serv:host) "channels.undernet.org"
380
381# -- extension for umode +x registered users - [users.undernet.org]
382# -- change with care to suit your own network
383set cfg(xhost:ext) "users.undernet.org"
384
385# -- use umode +x? (host hiding) (0|1) - [1]
386set cfg(auth:hide) 1
387
388# -- frequency for authentication retries (mins) - [5]
389set cfg(auth:retry) 5
390
391# -- use a random nickname until authenticated? (0|1) - 0
392set cfg(auth:rand) 0
393
394# -- wait to join channels until authenticated? (0|1) - 0
395set cfg(auth:wait) 0
396
397
398
399# ------------------------------------------------------------------------------------------------
400# KICKBAN SETTINGS
401# ------------------------------------------------------------------------------------------------
402
403# -- how to set channel kickbans? (chan|x) - [chan]
404# use "x" to set bans via GNUWorld's mod.cservice service (ie. Undernet's X)
405# otherwise, use 'chan' to set server kicks and bans
406set cfg(ban) "x"
407
408# -- X ban level (if using X) - [100]
409set cfg(ban:level) "100"
410
411# -- how long to set temp bans? - [3d]
412# units supported:
413# s = seconds
414# m = minutes
415# h = hours
416# d = days
417set cfg(ban:time) "3d"
418
419# -- autoban on blacklist entry addition? (0|1) - [1]
420set cfg(ban:auto) 1
421
422# -- include 'userid' in banmask where ~ not present in ident and user not authed to services? (0|1) - [1]
423# -- note that idents with ~ will still always ban as *!~*@host
424# 0: *!*@host
425# 1: *!user@host
426set cfg(ban:idents) 1
427
428# -- how long to set temp adaptive regex bans? - [7d]
429set cfg(ban:time:adapt) "7d"
430
431# -- channel modes to set when channel banlist is full - [+r]
432set cfg(ban:full:modes) "+Dmr"
433
434# -- how long (secs) to remember 'newcomers' for (for stringent public chatter rules) - [60]
435# -- stringent rules apply to newcomers after first joining channel:
436# - excessive word repeat
437# - profanity (badwords)
438# - spam (channels / website)
439# - coloured text
440set cfg(time:newjoin) "60"
441
442# -- badword masks for public chatter (space delimited with wildcards)
443# -- note: more powerful string now matching supported by 'text' type blacklist entries
444set cfg(badwords) ""
445
446# -- time to allow automatic removal of recent bans by specifying blacklist id (secs) - [3600]
447# - also provides memory used for optional blacklist removals based on unbans
448set cfg(id:unban:time) 3600
449
450# -- automatically remove blacklist entries when channel ban is removed? (0|1) - [1]
451# - user must have 'rem' access; unban must occur within cfg(id:unban:time) of ban
452set cfg(black:unban:rem) 1
453
454
455
456# ------------------------------------------------------------------------------------------------
457# SCANNER SETTINGS
458# ------------------------------------------------------------------------------------------------
459
460# -- include blacklist entry value in kick messages? (0|1) - [0]
461set cfg(black:kick:value) 0
462
463# -- include blacklist reason in kick messages? (0|1) - [1]
464set cfg(black:kick:reason) 1
465
466# -- auto convert hostnames to IP addresses when using 'add' command for type 'host'? (0|1) - [0]
467set cfg(list:host:convert) 0
468
469# -- run blacklist scans on type 'country' when user has resolved ident? - [0]
470# -- whitelist scans will always run
471set cfg(country:ident) 0
472
473# -- enable dnsbl scans? (0|1) - [1]
474set cfg(dnsbl) 1
475
476# -- enable botnet (remote) dnsbl scans? (0|1) - [1]
477set cfg(dnsbl:remote) 0
478
479# -- dnsbl, description and score
480# last parameter (0|1) determines if RBL is only used for manual scans (scanrbl cmd) or not
481# <rbl> {<desc> <score> <onlymanual>}
482# - score must be + or - with a score of >0 constituting a hit
483# - if 'onlymanual' is set, RBL is only checked when 'scanrbl' command is used but not in auto scans
484# format to add:
485# set addrbl(<rbl>) "{<description>} <score> <onlymanual>"
486set addrbl(rbl.ircbl.org) "IRCBL +1.0 1"
487set addrbl(sbl.cymru.com) "{Cymru SBL} +1.0 0"
488set addrbl(rbl.undernet.org) "{Undernet} +1.0 1"
489set addrbl(pbl.cymru.com) "{Cymru PBL} +1.0 0"
490set addrbl(dnsbl.dronebl.org) "DroneBL +1.0 0"
491set addrbl(mbl.cymru.com) "{Cymru MBL} +1.0 0"
492set addrbl(bbl.cymru.com) "{Cymru BBL} +1.0 0"
493set addrbl(rbl.evilnet.org) "{EvilNet BBL} +1.0 0"
494#set addrbl(zen.spamhaus.org) "{Spamhaus Zen} +1.0 0"; # -- auto scanner (and manual); must not use public nameservers
495
496# -- enable port scanner? (0|1) [1]
497set cfg(portscan) 1
498
499# -- port scan kick reason
500set cfg(portscan:reason) "Armour: possible insecure host unintended for IRC -- please install identd"
501
502# -- enable botnet (remote) port scans? (0|1) - [1]
503set cfg(portscan:remote) 0
504
505# -- scanports and description
506# -- add an 'addport' line for each port to scan, in the format of:
507# set addport(<port>) "<description>"
508set addport(80) "www"
509set addport(22) "ssh"
510set addport(10000) "webmin"
511set addport(31337) "31337/tcp"
512set addport(7070) "realserver"
513set addport(25) "smtp"
514set addport(21) "ftp"
515
516# -- minimum port match before action - [1]
517set cfg(portscan:min) 2
518
519# -- enable /whois lookups? (0|1) - [1]
520# - note: required for 'chan' list entries
521set cfg(whois) 1
522
523# -- enable botnet (remote) /whois lookups? (0|1) - [0]
524# - not required, but lowers server queue to improve response time on busy channels
525# - if enabled, remote bot mut be connected via botnet and have remotescan.tcl (only) loaded
526set cfg(whois:remote) 0
527
528# -- if any scanner enabled, scan all? (1) or only unresolved idents? (0) - [0]
529set cfg(scans:all) 0
530
531# -- botnet nick of remote bots, if enabled above
532# -- ensure this bot is connected to botnet
533set cfg(bot:remote:dnsbl) "remote-bot"
534set cfg(bot:remote:port) "remote-bot"
535set cfg(bot:remote:whois) "remote-bot"
536
537
538
539# ------------------------------------------------------------------------------------------------
540# CAPTCHA SETTINGS
541# -- requires channel mode to be 'secure'
542# -- web CAPTCHA requires 'armour-verify' web application @ https://github.com/empus/armour-verify
543# ------------------------------------------------------------------------------------------------
544# CAPTCHA used to help validate suspicious joining clients
545
546# -- enable CAPTCHA for suspicious clients? (0|1) - [1]
547set cfg(captcha) "1"
548
549# -- CAPTCHA type (web|text) - [text]
550set cfg(captcha:type) "text"
551
552# -- www.textcaptcha.com ID
553# -- only required if cfg(captcha:type) is "text"
554set cfg(captcha:id) "blizzardirc@gmail.com"
555
556# -- send an opnotice when a question is sent to a user? (0|1) - [1]
557set cfg(captcha:opnotc) 1
558
559# -- how long to wait (in secs) for CAPTCHA responses? - [300]
560set cfg(captcha:time) "300"
561
562# -- action to take for expired responses (manual|kick|kickban) - [kickban]
563set cfg(captcha:expired) "kickban"
564
565# -- bantime duration for expired responses - [1h]
566set cfg(captcha:expired:bantime) "1h"
567
568# -- kick message for expired responses
569set cfg(captcha:expired:kick) "Armour: your lack of CAPTCHA response is disturbing."
570
571# -- kick message from web CAPTCHA when kick history is identified
572set cfg(captcha:kick:kick) "Armour: you have a history of abuse."
573
574# -- kick message from web CAPTCHA when IP is rate-limited
575set cfg(captcha:ratelimit:kick) "Armour: you have been CAPTCHA rate-limited. Please come back later."
576
577# -- send notice to channel operators when a captcha expectation expires? (0|1) - 1
578set cfg(captcha:expired:ops) 1
579
580# -- how many incorrect attempts are allowed before action? - 1
581set cfg(captcha:wrong:attempts) 1
582
583# -- action to take for incorrect responses (manual|kick|kickban) - [kickban]
584# -- manual: send opnotice to ask ops for manual review
585set cfg(captcha:wrong) "kickban"
586
587# -- bantime duration for expired responses? - [10m]
588set cfg(captcha:wrong:bantime) "10m"
589
590# -- bantime duration for expired responses - [1h]
591set cfg(captcha:expired:bantime) "1h"
592
593# -- kick message for incorrect responses
594set cfg(captcha:wrong:kick) "Incorrect response! Please give it some more thought next time."
595
596# -- send acknowledgement for correct answers? (0|1) - [1]
597set cfg(captcha:ack) 1
598
599# -- what acknwledgement message to send?
600set cfg(captcha:ack:msg) "Correct! You can now speak in the channel."
601
602# -- send acknowledgement to channel ops from correct answers? (0|1) - [1]
603set cfg(captcha:ack:ops) 1
604
605
606# ------------------------------------------------------------------------------------------------
607# IP QUALITY SCORE SETTINGS
608# ------------------------------------------------------------------------------------------------
609# This section relates to the use of ipqualityscore.com lookups for potentially malicious clients
610
611# -- IPQS enable? (0|1) - [0]
612set cfg(ipqs) 0
613
614# -- IPQS API key
615set cfg(ipqs:key) "you-key-here"
616
617# -- IPQS only match clients with ~ in ident? (0|1) - [1]
618set cfg(ipqs:onlynoident) 1
619
620# -- IPQS minimum fraud score required before action is taken (0-100) - [85]
621set cfg(ipqs:minscore) 90
622
623# -- IPQS action (in mode=secure) -- kick|kickban|warn - [kick]
624set cfg(ipqs:action:secure) "kick"
625
626# -- IPQS action (in mode=on) -- kick|kickban|warn - [kickban]
627set cfg(ipqs:action:on) "kickban"
628
629# -- IPQS ban duration (secs) - [3600]
630set cfg(ipqs:duration) 3600
631
632
633# ------------------------------------------------------------------------------------------------
634# IRCBL INTEGRATION SETTINGS
635# ------------------------------------------------------------------------------------------------
636# This section relates to the use of IRCBL integration for for insertion & deletion
637
638# -- ircbl.org enable
639set cfg(ircbl) "0"
640
641# -- ircbl.org key
642set cfg(ircbl:key) "your-key-here"
643
644# -- ircbl.org default addition type - [11]
645set cfg(ircbl:type) "11"
646
647# -- ircbl.org generic comment
648set cfg(ircbl:add:comment) "IRC drone detected";
649
650# -- ircbl.org manual addition global level required
651set cfg(ircbl:lvl) "500"
652
653
654
655# ------------------------------------------------------------------------------------------------
656# TEXT MATCH BLACKLIST ENTRY SETTINGS
657# ------------------------------------------------------------------------------------------------
658# This section relates to blacklist entries matching channel text (wildcard or regex)
659
660# -- exempt from matching if they are opped? (0|1) - [1]
661set cfg(text:exempt:op) 1
662
663# -- exempt from matching if they are voiced? (0|1) - [0]
664set cfg(text:exempt:voice) 0
665
666# -- only match clients who have recently joined the channel? (0|1) - [0]
667# this relates to above variable cfg(time:newjoin)
668set cfg(text:newcomer) 0
669
670# -- add automatic blacklist entries for users who trigger text matches? (0|1) - [0]
671set cfg(text:autoblack) 0
672
673# -- if automatic blacklist entries are enabled, what reason to use?
674set cfg(text:autoblack:reason) "(auto) blacklisted from text match violation"
675
676# -- if threshold is >1, display warning to user on first occurrence? (0|1) - [0]
677set cfg(text:warn) 1
678
679# -- if warning is enabled, send via channel (chan) or /notice (notc)? (chan|notc) - [notc]
680set cfg(text:warn:type) "notc"
681
682# -- if warning is enabled, what should the message say?
683set cfg(text:warn:msg) "Please avoid using such language in #channel. Consider this a warning."
684
685# -- if sending report to ops/debugchan, what should it say?
686# substitution:
687# %N% nickname
688# %I% ID of entry
689set cfg(text:warn:report) "Armour: %N% has been warned about use of language. \[id: %I%\]"
690
691
692
693# ------------------------------------------------------------------------------------------------
694# LINE FLOOD SETTINGS
695# ------------------------------------------------------------------------------------------------
696# This section relates to line flood handling (from individual clients, or the entire channel)
697
698# -- how many lines to allow from a single client in how many seconds before acting? (lines:secs) - [5:2]
699# -- leave config value blank to disable nickname based line flood tracking
700set cfg(flood:line:nicks) "5:2"
701
702# -- how many lines to allow from the whole channel in how many seconds before acting? (lines:secs) - [10:2]
703# -- NOTE: this should be set based on the expected activity of the channel (to avoid false positives)
704# -- leave config value blank to disable channel based line flood tracking
705set cfg(flood:line:chan) "10:2"
706
707# -- modes to temporarily lockdown channel with, during entire channel lineflood - [+mr]
708set cfg(flood:line:chan:mode) "+r"
709
710# -- temporary lockdown time when whole channel encounters lineflood (secs) - [60]
711set cfg(flood:line:chan:lock) 60
712
713# -- exempt from matching if they are opped? (0|1) - [1]
714set cfg(flood:line:exempt:op) 1
715
716# -- exempt from matching if they are voiced? (0|1) - [1]
717set cfg(flood:line:exempt:voice) 1
718
719# -- only match clients who have recently joined the channel? (0|1) - [1]
720# this relates to above variable cfg(time:newjoin)
721set cfg(flood:line:newcomer) 1
722
723# -- kickban reason when user reaches line limit
724set cfg(flood:line:reason) "Armour: flood detected"
725
726# -- add automatic blacklist entries for users who trigger text matches? (0|1) - [0]
727set cfg(flood:line:autoblack) 0
728
729# -- if automatic blacklist entries are enabled, what reason to use?
730set cfg(flood:line:autoblack:reason) "(auto) blacklisted from line flood"
731
732
733
734# ------------------------------------------------------------------------------------------------
735# ADAPTIVE REGEX FLOODNET DETECTION
736# ------------------------------------------------------------------------------------------------
737
738# -- enable adaptive regex floodnet detection? - [1]
739set cfg(adapt) 1
740
741# -- adaptive regex types on join? (space delimited) - [n i]
742# n : nickname
743# ni : nick!ident
744# i : ident
745set cfg(adapt:types:join) "n i ni"
746
747# -- adaptive regex types after /who (space delimited) - [r]
748# -- used in secure mode or once rname known
749# n : nickname
750# ni : nick!ident
751# nir : nick!ident/rname
752# nr : nick/rname
753# i : ident
754# ir : ident/rname
755# r : rname
756#
757# use types involving rname and do not duplicate those done above in cfg(adapt:types:join)
758# this will prevent double handling for a given pattern (ie. false positives)
759set cfg(adapt:types:who) "nir nr r"
760
761# -- adaptive regex max join rate (clients:seconds:retain) - [2:1:5]
762# clients: client joins
763# seconds: .. in N seconds
764# retain: & retain common pattern for N seconds (for further joins)
765set cfg(adapt:rate) "2:2:5"
766
767
768
769# ------------------------------------------------------------------------------------------------
770# REPORT SETTINGS
771# ------------------------------------------------------------------------------------------------
772
773# -- include blacklist entry value in kick messages? (0|1) - [0]
774set cfg(report:value) 0
775
776# -- include blacklist entry reason in kick messages? (0|1) - [1]
777set cfg(report:reason) 1
778
779# -- send user notices for whitelist entries? (0|1) - [0]
780set cfg(notc:white) 0
781
782# -- send user notices for blacklist entries? (0|1) - [0]
783set cfg(notc:black) 0
784
785# -- send op notices for whitelist entries? (0|1) - [1]
786set cfg(opnotc:white) "0"
787
788# -- send op notices for blacklist entries? (0|1) - [1]
789set cfg(opnotc:black) 1
790
791# -- send op notices for IRC Operator autoops using channel operop setting? (0|1) - [1]
792set cfg(opnotc:operop) 1
793
794# -- send op notices for blacklist text warnings? (0|1) - [1]
795set cfg(opnotc:text) 1
796
797# -- send debug chan notices for whitelist entries? (0|1) - [1]
798set cfg(dnotc:white) 1
799
800# -- send debug chan notices for blacklist entries? (0|1) - [1]
801set cfg(dnotc:black) 1
802
803# -- send debug chan notices for blacklist text warnings? (0|1) - [1]
804set cfg(dnotc:text) 1
805
806# -- send debug chan notices for IRC Operator autoops using channel operop setting? (0|1) - [1]
807set cfg(dnotc:operop) 1
808
809
810
811# ------------------------------------------------------------------------------------------------
812# CUSTOM QUEUE SETTINGS
813# ------------------------------------------------------------------------------------------------
814
815# -- frequency (in secs) to find hidden users when in secure mode (chanmode +Dm) - [5]
816set cfg(queue:secure) "60"
817
818
819
820# ------------------------------------------------------------------------------------------------
821# FLOODNET SETTINGS
822# ------------------------------------------------------------------------------------------------
823
824# -- channel lock modes during floodnet - [+mr]
825set cfg(chanlock:mode) "+r"
826
827# -- channel lock time expiry (secs) - [5]
828# -- note: lock will still only be removed after server queue is cleared (ie. kicks)
829set cfg(chanlock:time) "60"
830
831
832
833# ------------------------------------------------------------------------------------------------
834# TRAKKA SETTINGS
835# ------------------------------------------------------------------------------------------------
836
837# -- channel to send trakka alerts to? prefix with @ for opnotice
838# -- defaults to channel the client joined, if empty
839set cfg(trakka:alertchan) ""
840
841# -- routinely add points every how many mins? - [360]
842# - every 6 hours (4 points per day)
843set cfg(trakka:routine) 360
844
845# -- routinely save trakka scores to db every N minutes? - [60]
846set cfg(trakka:autosave) 60
847
848# -- remove how many points daily from those not in the channel? - [1]
849set cfg(trakka:subtract) 1
850
851# -- initial newcomer score gain after how many seconds in chan? - [3600]
852set cfg(trakka:init) 3600
853
854# -- kickban user if user still has no score, is not opped, or voiced after a wait period (0|1) - [1]
855# -- voice will not be factored if channel is in secure mode
856set cfg(trakka:kb:enable) 1
857
858# -- if kickban is enabled, how long should the bot wait before removing? (secs) - [300]
859# -- NOTE: this needs to be less than trakka:init value above
860set cfg(trakka:kb:wait) "300"
861
862# -- if kickban is enabled, what kick reason to use?
863set cfg(trakka:kb:reason) "Armour: you appear to be unknown and have therefore been removed (trakka)"
864
865# -- reason for kick message when nudge command is used
866set cfg(trakka:nudge:reason) "Armour: you appear to be unknown and have therefore been removed (trakka)"
867
868# -- duration for kickban when nudge command is used - [1h]
869set cfg(trakka:nudge:time) "1h"
870
871
872
873# ------------------------------------------------------------------------------------------------
874# EXTERNAL SCRIPT INTEGRATION
875# ------------------------------------------------------------------------------------------------
876
877# -- pass user data after negative scans to external scripts with args: nick uhost hand chan
878# -- use this so that other scripts can process joining users but only after Armour clears them
879# - space delimited
880set cfg(integrate:procs) ""
881
882
883
884# ------------------------------------------------------------------------------------------------
885# BOT PROTECTION
886# ------------------------------------------------------------------------------------------------
887
888# -- list of /silence masks
889# - provides server level flood protection
890# - leave empty for no /SILENCE
891# -- WARNING: if CAPTCHA is being used, SILENCE should be disabled (to allow captcha responses)
892#set cfg(silence) "+*!*@*,+~*!*@*.users.undernet.org"; # -- only allow messages from authed users
893set cfg(silence) ""
894
895
896
897# ------------------------------------------------------------------------------------------------
898# SECURE MODE (PARANOIA) SETTINGS
899# ------------------------------------------------------------------------------------------------
900
901# -- when in mode 'secure'
902# - number of clones to mark for manual review (no autovoice) [2]
903set cfg(paranoid:clone) 2
904
905# -- when in mode 'secure'
906# - server connection time must be older than N seconds for autovoice [10]
907set cfg(paranoid:signon) 10
908
909# -- send CTCP VERSION to clients to help validate when in 'secure' mode? (0|1) - 1
910set cfg(paranoid:ctcp) "0"
911
912# -- if enabled, how long to wait for CTCP version response? (secs) - 3
913set cfg(paranoid:ctcp:wait) 3
914
915# -- if CTCP reply not received, what action to take? (manual|captcha|kick|kickban) - manual
916set cfg(paranoid:ctcp:action) "captcha"
917
918# -- if action is set to kick or kickban, what kick message should be used?
919set cfg(paranoid:ctcp:kickmsg) "Armour: your presence in this channel is suspicious."
920
921# -- how many times can a client be kicked in what period (secs), before being kickbanned? - [1:330]
922# this will prevent a client from continuously auto-rejoining when actions only kick
923# the next time a kick is attempted, it will instead revert to kickban
924# ideally this should be longer than double both cfg(queue:secure) and cfg(captcha:time) combined (if captcha is used)
925set cfg(paranoid:klimit) "1:670"
926
927
928# ------------------------------------------------------------------------------------------------
929# DRONEBL
930# ------------------------------------------------------------------------------------------------
931
932# -- enable DroneBL to support RBL additions and removals?
933# -- note that this is not required only to do RBL lookups, which can be done via `set scan:rrbls`
934set cfg(dronebl) 0
935
936# -- DroneBL RPC Key (www.dronebl.org)
937# - caution: you are responsible for DroneBL submissions with this key
938# - allocate access with care
939set cfg(dronebl:key) ""
940
941# -- level required for DroneBL submission [500]
942set cfg(dronebl:lvl) 500
943
944# -- default submission type [17]
945set cfg(dronebl:type) 17
946
947
948
949# ------------------------------------------------------------------------------------------------
950# QUOTE PLUGIN -- settings only relevant if optional plugin is loaded: quote
951# ------------------------------------------------------------------------------------------------
952
953# -- who can use the seen command? (1-5) - [2]
954# 1: all channel users
955# 2: all voiced, opped, and authed users
956# 3: only voiced when not secure mode, opped, and authed users
957# 4: only opped and authed channel users
958# 5: only authed users with command access
959set cfg(quote:allow) "1"
960
961
962
963# ------------------------------------------------------------------------------------------------
964# SEEN PLUGIN -- settings only relevant if optional plugin is loaded: seen
965# ------------------------------------------------------------------------------------------------
966
967# -- who can use the seen command? (1-5) - [2]
968# 1: all channel users
969# 2: all voiced, opped, and authed users
970# 3: only voiced when not secure mode, opped, and authed users
971# 4: only opped and authed channel users
972# 5: only authed users with command access
973set cfg(seen:allow) "1"
974
975
976
977# ------------------------------------------------------------------------------------------------
978# WEATHER PLUGIN -- settings only relevant if optional plugin is loaded: weather
979# https://www.openweathermap.org
980# ------------------------------------------------------------------------------------------------
981
982# -- who can use the weather command? (1-5) - [2]
983# 1: all channel users
984# 2: all voiced, opped, and authed users
985# 3: only voiced when not secure mode, opped, and authed users
986# 4: only opped and authed channel users
987# 5: only authed users with command access
988set cfg(weather:allow) "4"
989
990# -- API key for weather data (www.openweathermap.org)
991set cfg(weather:key) "262b8bd47820217ce61464e3f28e9d24"
992
993# -- units for weather output (metric, imperial, or both) - [both]
994set cfg(weather:units) "both"
995
996
997
998# ------------------------------------------------------------------------------------------------
999# NINJAS PLUGIN -- settings only relevant if optional plugin is loaded: ninjas
1000# https://www.api-ninjas.com
1001# ------------------------------------------------------------------------------------------------
1002
1003# -- who can use the commands: joke, dad, history, fact, chuck, cocktail (1-5) - [3]
1004# 1: all channel users
1005# 2: all voiced, opped, and authed users
1006# 3: only voiced when not secure mode, opped, and authed users
1007# 4: only opped and authed channel users
1008# 5: only authed users with command access
1009set cfg(ninjas:allow) "2"
1010
1011# -- API Key (www.ninjas-api.com)
1012set cfg(ninjas:key) "i0CfDUCmPfWfZQTZMSHapw==YJnUQVVK3bTwoChV"
1013
1014
1015
1016# ------------------------------------------------------------------------------------------------
1017# HUMOUR PLUGIN -- settings only relevant if optional plugin is loaded: seen
1018# https://www.humor-api.com
1019# ------------------------------------------------------------------------------------------------
1020
1021# -- who can use the commands: gif, meme, praise, insult (1-5) - [2]
1022# 1: all channel users
1023# 2: all voiced, opped, and authed users
1024# 3: only voiced when not secure mode, opped, and authed users
1025# 4: only opped and authed channel users
1026# 5: only authed users with command access
1027set cfg(humour:allow) 3
1028
1029# -- API Key (www.humor-api.com)
1030set cfg(humour:key) "cd2e8c2aa0a249429d9f7354b149d542"
1031
1032
1033
1034# ------------------------------------------------------------------------------------------------
1035# OPENAI
1036# -- requires 'openai' plugin to be loaded
1037# -- requires 'openai' per channel setting to be enabled
1038# ------------------------------------------------------------------------------------------------
1039
1040# -- AI service
1041# -- perplexity: perplexity.ai
1042# -- openai: openai.com
1043set cfg(ask:service) "openai"
1044
1045# -- AI model:
1046# openai: https://platform.openai.com/docs/models
1047# https://openai.com/api/pricing
1048# perplexity: https://docs.perplexity.ai/docs/model-cards
1049# https://docs.perplexity.ai/docs/pricing
1050set cfg(ask:model) "gpt-4-turbo-preview"
1051
1052# -- AI API token
1053# OpenAI: https://platform.openai.com/account/api-keys
1054# Perplexity: https://www.perplexity.ai/settings/api
1055set cfg(ask:token) "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"
1056
1057# -- OpenAI ChatGPT API organization
1058# NOTE: This is only required if cfg(ask:service) is set to 'openai'
1059# https://platform.openai.com/account/org-settings
1060set cfg(ask:org) "org-rtMZF84DpmJXxsQwAyhSvhc7"
1061
1062# -- API query timeout (secs) - [60]
1063set cfg(ask:timeout) 60
1064
1065# -- API Max Answer Lines
1066set cfg(ask:lines) "3"
1067
1068# -- API temperature
1069# The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more
1070# random, while lower values like 0.2 will make it more focused and deterministic. If set to 0,
1071# the model will use log probability to automatically increase the temperature until certain
1072# thresholds are hit.
1073set cfg(ask:temp) "0.7"
1074
1075# -- Chatbot description
1076# Optional instruction to the chatbot to influence its responses
1077set cfg(ask:system) "You are kratos. Be fun and helpful, pretending to be a sentient robot created by Empus."
1078
1079# -- API system behaviour for all user requests
1080# notes:
1081# * setting is always applied to all requests
1082# * per user per chan behaviour can be set with 'askmode' command
1083# * restricting output line count can help avoid floods or throttlings
1084# examples:
1085# "Answer humorously."
1086# "Answer sarcastically."
1087# "Pretend to be a sarcastic politician."
1088# "Act like an idio."
1089set cfg(ask:prefix) "Answer with dark humour and sarcasm. Use 3 lines or less."
1090
1091# -- channels to apply blacklisted request strings in (space delimited)
1092# note: set to "" to disable blacklist on all channels
1093set cfg(ask:blacklist:chans) ""
1094
1095# -- string masks blacklisted for use in queries
1096# note: this list is only applied to channels listed in cfg(ask:blacklist:chans)
1097set cfg(ask:blacklist) ""
1098
1099# -- AI conversation memory after initial question (mins) - [60]
1100set cfg(ask:mem) 60
1101
1102# -- send all queries to 'ask' when botnick is used? (0|1) - [1]
1103# NOTE: this will prevent all other commands from using the botnick as a command prefix
1104set cfg(ask:cmdnick) 1
1105
1106# -- who can send queries? (1-5) - [3]
1107# 1: all channel users
1108# 2: all voiced, opped, and authed users
1109# 3: only voiced when not secure mode, opped, and authed users
1110# 4: only opped and authed channel users
1111# 5: only authed users
1112set cfg(ask:allow) "2"
1113
1114# -- DALL-E image creation enable? (0|1) - [1]
1115set cfg(ask:image) 1
1116
1117# -- DALL-E image size (pixels) - "1024x1024"
1118# -- smaller images are faster to generate (512x512, 1024x1024)
1119# -- note that dall-e-3 does not support 512x512
1120set cfg(ask:image:size) "1024x1024"
1121
1122# -- DALL-E image model - [dall-e-3]
1123set cfg(ask:image:model) "dall-e-3"
1124
1125# -- DALL-E image overlay with requesting nick and prompt? (0|1) - [1]
1126# note: ImageMagick7 must be installed on machine (using binary 'convert')
1127set cfg(ask:image:overlay) 1
1128
1129# -- DALL-E image creation rate limiting (req:mins:hold) - [5:5:30]
1130# -- triggered at 5 requests per 5 mins, then retaining rate limit for 30 mins
1131# -- set to "" to disable rate limiting
1132set cfg(ask:image:rate) "5:5:30"
1133
1134# -- DALL-E image creation rate limiting action
1135# -- set to "" to temporarily prevent all image requests
1136# -- set value to alternate DALL-E model to reduce API costs during rate limited restriction period
1137set cfg(ask:rate:act) "DALL-E"
1138
1139# -- absolute path to save DALL-E image PNG files to webserver
1140set cfg(ask:path) "/home/bots/kratos/armour/images"
1141
1142# --retain PNG and mp3 files for how many days? - [90]
1143# notes:
1144# - to keep forever, use empty value
1145# - those with votes or in quotes will remain preserved
1146set cfg(ask:expire) ""
1147
1148# -- URL root serving PNG files from above path
1149set cfg(ask:site) "https://kratos.armour.bot"
1150
1151
1152
1153# ------------------------------------------------------------------------------------------------
1154# AI SPEAK (text-to-speech)
1155# ------------------------------------------------------------------------------------------------
1156
1157# -- enable 'speak' functionality? (0|1) - [0]
1158set cfg(speak:enable) 0
1159
1160# -- max number of lines to speak in responses
1161set cfg(speak:lines) "4"
1162
1163# -- text-to-speech service (elevenlabs, openai) - [openai]
1164# -- openai: www.openai.com
1165# -- elevenlabs: www.elevenlabs.io
1166set cfg(speak:service) "openai"
1167
1168# -- API query timeout (seconds)
1169set cfg(speak:timeout) 30
1170
1171
1172
1173# ------------------------------------------------------------------------------------------------
1174# OPENAI -- relevant settings only if cfg(speak:service) set to: openai
1175# ------------------------------------------------------------------------------------------------
1176# -- OpenAI text-to-speech voice (alloy, echo, fable, onyx, nova, shimmer) - [onyx]
1177set cfg(speak:openai:voice) "onyx"
1178
1179# -- OpenAI text-to-speech model - [tts-1]
1180set cfg(speak:openai:model) "tts-1"
1181
1182# -- OpenAI text-to-speech file format mp3, opus, aac, flac
1183set cfg(speak:openai:format) "mp3"
1184
1185
1186
1187# ------------------------------------------------------------------------------------------------
1188# ELEVENLABS -- relevant settings only if cfg(speak:service) set to: elevenlabs
1189# www.elevenlabs.io
1190# ------------------------------------------------------------------------------------------------
1191
1192# -- ElevenLabs text-to-speech API key
1193set cfg(speak:key) "API-KEY-HERE"
1194
1195# -- ElevenLabs text-to-speech voice model
1196set cfg(speak:model) "eleven_monolingual_v1"
1197
1198# -- ElevenLabs text-to-speech voice
1199# -- https://elevenlabs.io/app/voice-lab
1200set cfg(speak:voice) "ZQe5CZNOzWyzPSCn5a3c"
1201
1202
1203
1204# ------------------------------------------------------------------------------------------------
1205# COMMAND LEVELS
1206# ------------------------------------------------------------------------------------------------
1207
1208# -- level requirements for commands
1209
1210# -- standard command structure
1211# - to disable a command, comment out line
1212# - to change the required level, update the level per command
1213# - to modify whether a command is accepted via public chan, privmsg, or dcc, update the binds
1214#
1215# - binds:
1216# pub: public channel command
1217# msg: privmsg command
1218# dcc: dcc command
1219# ------------------------------------------------------------------------------------------------
1220# command plugin level req. binds
1221# ------------------------------------------------------------------------------------------------
1222set addcmd(register) { userdb 0 pub msg dcc }; # -- only if configured
1223set addcmd(ask) { arm 1 pub msg dcc }; # -- requires openai plugin
1224set addcmd(askmode) { arm 1 pub msg dcc }; # -- requires openai plugin
1225set addcmd(and) { arm 1 pub msg dcc }; # -- requires openai plugin
1226set addcmd(image) { arm 1 pub msg dcc }; # -- requires openai plugin
1227set addcmd(speak) { arm 1 pub msg dcc }; # -- requires speak plugin
1228set addcmd(joke) { arm 1 pub msg dcc }; # -- requires ninjas plugin
1229set addcmd(dad) { arm 1 pub msg dcc }; # -- requires ninjas plugin
1230set addcmd(history) { arm 1 pub msg dcc }; # -- requires ninjas plugin
1231set addcmd(fact) { arm 1 pub msg dcc }; # -- requires ninjas plugin
1232set addcmd(chuck) { arm 1 pub msg dcc }; # -- requires ninjas plugin
1233set addcmd(cocktail) { arm 1 pub msg dcc }; # -- requires ninjas plugin
1234set addcmd(weather) { arm 1 pub msg dcc }; # -- requires weather plugin
1235#set addcmd(meme) { arm 1 pub msg dcc }; # -- requires humour plugin
1236set addcmd(gif) { arm 1 pub msg dcc }; # -- requires humour plugin
1237set addcmd(praise) { arm 1 pub msg dcc }; # -- requires humour plugin
1238set addcmd(insult) { arm 1 pub msg dcc }; # -- requires humour plugin
1239set addcmd(seen) { seen 1 pub msg dcc }; # -- requires seen plugin
1240set addcmd(access) { userdb 1 pub msg dcc }
1241set addcmd(cmds) { arm 1 pub msg dcc }
1242set addcmd(help) { arm 1 pub msg dcc }
1243set addcmd(info) { userdb 1 pub msg dcc }
1244set addcmd(verify) { userdb 1 pub msg dcc }
1245set addcmd(lang) { userdb 1 pub msg dcc }
1246set addcmd(set) { userdb 1 pub msg dcc }
1247set addcmd(time) { userdb 1 pub msg dcc }
1248set addcmd(version) { arm 1 pub msg dcc }
1249set addcmd(asn) { arm 1 pub msg dcc }
1250set addcmd(country) { arm 1 pub msg dcc }
1251set addcmd(note) { arm 1 pub msg dcc }
1252set addcmd(exempt) { arm 100 pub msg dcc }
1253set addcmd(queue) { arm 100 pub msg dcc }
1254set addcmd(ack) { trakka 100 pub msg dcc }; # -- requires trakka plugin
1255set addcmd(score) { trakka 100 pub msg dcc }; # -- requires trakka plugin
1256set addcmd(nudge) { trakka 100 pub msg dcc }; # -- requires trakka plugin
1257set addcmd(idle) { arm 100 pub msg dcc }
1258set addcmd(ipqs) { ipqs 1 }; # -- only if configured
1259set addcmd(view) { arm 100 pub msg dcc }
1260set addcmd(scan) { arm 100 pub msg dcc }
1261set addcmd(search) { arm 100 pub msg dcc }
1262set addcmd(scanrbl) { arm 100 pub msg dcc }; # -- only if configured
1263set addcmd(scanport) { arm 100 pub msg dcc }; # -- only if configured
1264set addcmd(mode) { arm 100 pub msg dcc }
1265set addcmd(add) { arm 100 pub msg dcc }
1266set addcmd(op) { arm 100 pub msg dcc }
1267set addcmd(deop) { arm 100 pub msg dcc }
1268set addcmd(voice) { arm 100 pub msg dcc }
1269set addcmd(devoice) { arm 100 pub msg dcc }
1270set addcmd(kick) { arm 100 pub msg dcc }
1271set addcmd(ban) { arm 100 pub msg dcc }
1272set addcmd(unban) { arm 100 pub msg dcc }
1273set addcmd(topic) { arm 100 pub msg dcc }
1274set addcmd(invite) { arm 100 pub msg dcc }
1275set addcmd(stats) { arm 200 pub msg dcc }
1276set addcmd(status) { arm 200 pub msg dcc }
1277set addcmd(mod) { arm 200 pub msg dcc }
1278set addcmd(black) { arm 200 pub msg dcc }
1279set addcmd(captcha) { arm 300 pub msg dcc }; # -- only if configured
1280set addcmd(chanscan) { arm 300 pub msg dcc }
1281set addcmd(rem) { arm 300 pub msg dcc }
1282set addcmd(newuser) { userdb 400 pub msg dcc }
1283set addcmd(adduser) { userdb 400 pub msg dcc }
1284set addcmd(remuser) { userdb 400 pub msg dcc }
1285set addcmd(userlist) { userdb 400 pub msg dcc }
1286set addcmd(usearch) { userdb 400 pub msg dcc }
1287set addcmd(chanlist) { userdb 400 pub msg dcc }
1288set addcmd(moduser) { userdb 400 pub msg dcc }
1289set addcmd(ignore) { arm 200 }
1290set addcmd(jump) { arm 450 pub msg dcc }
1291set addcmd(load) { arm 450 pub msg dcc }
1292set addcmd(reload) { arm 450 pub msg dcc }
1293set addcmd(restart) { arm 450 pub msg dcc }
1294set addcmd(rehash) { arm 450 pub msg dcc }
1295set addcmd(addchan) { userdb 450 pub msg dcc }
1296set addcmd(remchan) { userdb 450 pub msg dcc }
1297set addcmd(modchan) { userdb 450 pub msg dcc }
1298set addcmd(deluser) { userdb 450 pub mdg dcc }
1299set addcmd(say) { arm 500 pub msg dcc }
1300set addcmd(deploy) { arm 500 pub msg dcc }
1301set addcmd(do) { userdb 500 pub msg dcc }
1302set addcmd(die) { arm 500 pub msg dcc }
1303set addcmd(conf) { arm 500 pub msg dcc }
1304set addcmd(showlog) { arm 500 pub msg dcc }
1305set addcmd(update) { arm 500 pub msg dcc }
1306
1307
1308
1309# ------------------------------------------------------------------------------------------------
1310# PLUGINS
1311# ------------------------------------------------------------------------------------------------
1312
1313# -- optional plugins to load
1314# -- to load plugins, uncomment their line after editing any config parameters in each file
1315set addplugin(weather) "./armour/plugins/weather.tcl"
1316set addplugin(humour) "./armour/plugins/humour.tcl"
1317set addplugin(speak) "./armour/plugins/speak.tcl"
1318set addplugin(openai) "./armour/plugins/openai.tcl"
1319set addplugin(tell) "./armour/plugins/tell.tcl"
1320set addplugin(quote) "./armour/plugins/quote.tcl"
1321set addplugin(seen) "./armour/plugins/seen.tcl"
1322set addplugin(ninjas) "./armour/plugins/ninjas.tcl"
1323#set addplugin(trakka) "./armour/plugins/trakka/trakka.tcl"; # -- trakka scoring for private chans
1324#set addplugin(smsbot) "./armour/plugins/smsbot.tcl"; # -- SMS (via smsglobal.com)
1325#set addplugin(push) "./armour/plugins/push.tcl"; # -- push (via pushover.net)
1326#set addplugin(email) "./armour/plugins/email.tcl"; # -- send email notes
1327
1328
1329
1330# ------------------------------------------------------------------------------------------------
1331# END OF CONFIGURATION
1332# ------------------------------------------------------------------------------------------------
1333
1334
1335# ------------------------------------------------------------------------------------------------
1336}; # -- end of namespace
1337# ------------------------------------------------------------------------------------------------
1338source ./armour/armour.tcl; # -- do not edit
1339# ------------------------------------------------------------------------------------------------
1340