summaryrefslogtreecommitdiff
path: root/data
diff options
context:
space:
mode:
Diffstat (limited to 'data')
-rw-r--r--data/botserv.example.conf227
-rw-r--r--data/chanserv.example.conf724
-rw-r--r--data/commands.example.conf341
-rw-r--r--data/example.conf923
-rw-r--r--data/global.example.conf101
-rw-r--r--data/hostserv.example.conf150
-rw-r--r--data/memoserv.example.conf215
-rw-r--r--data/modules.example.conf239
-rw-r--r--data/nickserv.example.conf606
-rw-r--r--data/operserv.example.conf579
-rw-r--r--data/tables.sql (renamed from data/mysql/tables.sql)0
11 files changed, 2735 insertions, 1370 deletions
diff --git a/data/botserv.example.conf b/data/botserv.example.conf
new file mode 100644
index 000000000..81b08d66d
--- /dev/null
+++ b/data/botserv.example.conf
@@ -0,0 +1,227 @@
+/*
+ * Example configuration file for BotServ.
+ */
+
+/*
+ * First, create the service.
+ */
+service
+{
+ /*
+ * The name of the BotServ client
+ */
+ nick = "BotServ"
+
+ /*
+ * The username of the BotServ client.
+ */
+ user = "services"
+
+ /*
+ * The hostname of the BotServ client.
+ */
+ host = "localhost.net"
+
+ /*
+ * The realname of the BotServ client.
+ */
+ gecos = "Bot Service"
+}
+
+/*
+ * Core BotServ module.
+ *
+ * Provides essential functionality for BotServ.
+ */
+module { name = "bs_main" }
+
+/*
+ * Configuration for BotServ provided by bs_main.
+ */
+botserv
+{
+ /*
+ * The name of the client that should be BotServ.
+ */
+ name = "BotServ"
+
+ /*
+ * The default bot options for newly registered channels. Note that changing these options
+ * will have no effect on channels which are already registered. The list must be separated
+ * by spaces.
+ *
+ * The options are:
+ * - dontkickops: Channel operators will be protected against BotServ kicks
+ * - dontkickvoices: Voiced users will be protected against BotServ kicks
+ * - greet: The channel's BotServ bot will greet incoming users that have set a greet
+ * in their NickServ settings
+ * - fantasy: Enables the use of BotServ fantasy commands in the channel
+ *
+ * This directive is optional, if left blank, there will be no defaults.
+ */
+ defaults="greet fantasy"
+
+ /*
+ * The minimum number of users there must be in a channel before the bot joins it. The best
+ * value for this setting is 1 or 2. This can be 0, the service bots will not part unless
+ * specifically unassigned, and will keep the channel open.
+ */
+ minusers = 1
+
+ /*
+ * The maximum number of entries a single bad words list can have. Setting it too high can
+ * reduce performance slightly.
+ */
+ badwordsmax = 32
+
+ /*
+ * The amount of time that data for a user is valid in BotServ. If the data exceeds this time,
+ * it is reset or deleted depending on the case. Do not set it too high, otherwise your
+ * resources will be slightly affected.
+ */
+ keepdata = 10m
+
+ /*
+ * The bots are currently not affected by any modes or bans when they try to join a channel.
+ * But some people may want to make it act like a real bot, that is, for example, remove all
+ * the bans affecting the bot before joining the channel, remove a ban that affects the bot
+ * set by a user when it is in the channel, and so on. Since it consumes a bit more CPU
+ * time, you should not enable this on larger networks.
+ *
+ * This directive is optional.
+ */
+ #smartjoin = yes
+
+ /*
+ * If set, the bots will use a kick reason that does not state the word when it is kicking.
+ * This is especially useful if you have young people on your network.
+ *
+ * This directive is optional.
+ */
+ gentlebadwordreason = yes
+
+ /*
+ * If set, BotServ will use case sensitive checking for badwords.
+ *
+ * This directive is optional.
+ */
+ #casesensitive = yes
+
+ /*
+ * Defines the prefix for fantasy commands in channels. This character will have to be prepended
+ * to all fantasy commands. If you choose "!", for example, fantasy commands will be "!kick",
+ * "!op", etc. This directive is optional, if left out, the default fantasy character is "!".
+ */
+ #fantasycharacter = "!"
+}
+
+/*
+ * Core BotServ commands.
+ *
+ * In Anope modules can provide (multiple) commands, each of which has a unique command name. Once these modules
+ * are loaded you can then configure the commands to be added to any client you like with any name you like.
+ *
+ * Additionally, you may provide a permission name that must be in the opertype of users executing the command.
+ *
+ * Sane defaults are provided below that do not need to be edited unless you wish to change the default behavior.
+ */
+
+/* Give it a help command */
+command { service = "BotServ"; name = "HELP"; command = "generic/help"; }
+
+/*
+ * bs_assign
+ *
+ * Provides the commands botserv/assign and botserv/unassign.
+ *
+ * Used for assigning and unassigning bots to channels.
+ */
+module { name = "bs_assign" }
+command { service = "BotServ"; name = "ASSIGN"; command = "botserv/assign"; }
+command { service = "BotServ"; name = "UNASSIGN"; command = "botserv/unassign"; }
+
+/*
+ * bs_autoassign
+ *
+ * Allows service bots to be automatically assigned to channels upon registration.
+ */
+#module { name = "bs_autoassign" }
+bs_autoassign
+{
+ /*
+ * Automatically assign ChanServ to channels upon registration.
+ */
+ bot = "ChanServ"
+}
+
+/*
+ * bs_badwords
+ *
+ * Provides the command botserv/badwords.
+ *
+ * Used for controlling the channel badword list.
+ */
+module { name = "bs_badwords" }
+command { service = "BotServ"; name = "BADWORDS"; command = "botserv/badwords"; }
+
+/*
+ * bs_bot
+ *
+ * Provides the command botserv/bot.
+ *
+ * Used for administrating BotServ bots.
+ */
+module { name = "bs_bot" }
+command { service = "BotServ"; name = "BOT"; command = "botserv/bot"; }
+
+/*
+ * bs_botlist
+ *
+ * Provides the command botserv/botlist.
+ *
+ * Used for listing all available bots.
+ */
+module { name = "bs_botlist" }
+command { service = "BotServ"; name = "BOTLIST"; command = "botserv/botlist"; }
+
+/*
+ * bs_control
+ *
+ * Provides the commands botserv/act and botserv/say.
+ *
+ * Used for making the bot message a channel.
+ */
+module { name = "bs_control" }
+command { service = "BotServ"; name = "ACT"; command = "botserv/act"; }
+command { service = "BotServ"; name = "SAY"; command = "botserv/say"; }
+
+/*
+ * bs_info
+ *
+ * Provides the command botserv/info.
+ *
+ * Used for getting information on bots or channels.
+ */
+module { name = "bs_info" }
+command { service = "BotServ"; name = "INFO"; command = "botserv/info"; }
+
+/*
+ * bs_kick
+ *
+ * Provides the command botserv/kick.
+ *
+ * Used for configuring what bots should kick for.
+ */
+module { name = "bs_kick" }
+command { service = "BotServ"; name = "KICK"; command = "botserv/kick"; }
+
+/*
+ * bs_set
+ *
+ * Provides the command botserv/set.
+ *
+ * Used for setting options such as kickers and fantasy replies.
+ */
+module { name = "bs_set" }
+command { service = "BotServ"; name = "SET"; command = "botserv/set"; }
+
diff --git a/data/chanserv.example.conf b/data/chanserv.example.conf
new file mode 100644
index 000000000..b1b19040a
--- /dev/null
+++ b/data/chanserv.example.conf
@@ -0,0 +1,724 @@
+/*
+ * Example configuration file for ChanServ.
+ */
+
+/*
+ * First, create the service.
+ */
+service
+{
+ /*
+ * The name of the ChanServ client
+ */
+ nick = "ChanServ"
+
+ /*
+ * The username of the ChanServ client.
+ */
+ user = "services"
+
+ /*
+ * The hostname of the ChanServ client.
+ */
+ host = "localhost.net"
+
+ /*
+ * The realname of the ChanServ client.
+ */
+ gecos = "Channel Registration Service"
+}
+
+/*
+ * Core ChanServ module.
+ *
+ * Provides essential functionality for ChanServ.
+ */
+module { name = "cs_main" }
+
+/*
+ * Configuration for ChanServ provided by cs_main.
+ */
+chanserv
+{
+ /*
+ * The name of the client that should be ChanServ.
+ */
+ name = "ChanServ"
+
+ /*
+ * The default options for newly registered channels. Note that changing these options
+ * will have no effect on channels which are already registered. The list must be separated
+ * by spaces.
+ *
+ * The options are:
+ * - keeptopic: Retain topic when the channel is not in use
+ * - opnotice: Send a notice when OP/DEOP commands are used
+ * - peace: Disallow users from kicking or removing modes from others who are of the same
+ * access level or superior
+ * - private: Hide the channel from ChanServ's LIST command
+ * - restricted: Kick/ban users who are restricted from the channel
+ * - secure: Enable channel security, requiring the user to be identified with NickServ in
+ * order to be considered for being on the access list of the channel
+ * - secureops: Only allow operator status to be given if the user is on the access list
+ * - securefounder: Only allow the real founder of the channel to drop the channel, change it's
+ * password, or change the founder or successor
+ * - signkick: Use of ChanServ's KICK command will cause the user's nick to be signed to the kick.
+ * - signkicklevel: Same as above, but the kick will not be signed if the user is at the same access
+ * level or superior to the target
+ * - topiclock: Disallow the topic to be changed except with ChanServ's TOPIC command
+ * - persist: Keep the channel open at all times
+ * - none: No defaults
+ *
+ * This directive is optional, if left blank, the options will default to keetopic, secure, securefounder,
+ * and signkick. If you really want no defaults, use "none" by itself as the option.
+ */
+ defaults="keeptopic peace secure securefounder signkick"
+
+ /*
+ * The maximum number of channels which may be registered to a single nickname.
+ *
+ * This directive is optional, but recommended.
+ * If not set, there will be no restriction on the numbers of channels a single nickname can have registered.
+ */
+ maxregistered = 20
+
+ /*
+ * The length of time before a channel registration expires.
+ *
+ * This directive is optional, but recommended.
+ * If not set, the default is 14 days.
+ */
+ expire = 14d
+
+ /*
+ * The length of time before a suspended channel becomes unsuspended.
+ *
+ * This directive is optional.
+ * If not set, the default is to never.
+ */
+ #suspendexpire = 90d
+
+ /*
+ * The lenth of time before a forbidden channel drops.
+ *
+ * This directive is optional.
+ * If not set, the default is to never.
+ */
+ #forbidexpire = 90d
+
+ /*
+ * The default ban type for newly registered channels (and when importing old databases).
+ *
+ * defbantype can be:
+ *
+ * 0: ban in the form of *!user@host
+ * 1: ban in the form of *!*user@host
+ * 2: ban in the form of *!*@host
+ * 3: ban in the form of *!*user@*.domain
+ */
+ defbantype = 2
+
+ /*
+ * The maximum number of entries on a channel's access list.
+ */
+ accessmax = 1024
+
+ /*
+ * The maximum number of entries on a channel's autokick list.
+ */
+ autokickmax = 32
+
+ /*
+ * The default reason for an autokick if none is given.
+ */
+ autokickreason = "User has been banned from the channel"
+
+ /*
+ * The length of time ChanServ stays in a channel after kicking a user from a channel they are not
+ * permitted to be in. This only occurs when the user is the only one in the channel.
+ */
+ inhabit = 15s
+
+ /*
+ * The maximum number of channels to be returned for a ChanServ LIST command.
+ */
+ listmax = 50
+
+ /*
+ * Allow only IRC Operators to use ChanServ.
+ *
+ * This directive is optional.
+ */
+ #opersonly = yes
+
+ /*
+ * ChanServ levels configuration, for use with cs_access.
+ *
+ * These levels are used by the chanserv/access access system.
+ * The levels configured below will be used as a default by newly registered channels.
+ *
+ * The level "founder" is a special level that means anyone with the level_founder permission
+ * can use (which of course defaults to "founder"). Anyone with the founder level permission in
+ * a channel can do anything in the channel.
+ */
+ level_change = 10
+ level_list = 1
+ level_akick = 10
+ level_assign = "founder"
+ level_autohalfop = 4
+ level_autoop = 5
+ level_autoowner = 9999
+ level_autoprotect = 10
+ level_autovoice = 3
+ level_badwords = 10
+ level_ban = 4
+ level_fantasia = 3
+ level_founder = "founder"
+ level_getkey = 5
+ level_greet = 5
+ level_halfop = 5
+ level_halfopme = 4
+ level_info = 9999
+ level_invite = 5
+ level_kick = 4
+ level_memo = 10
+ level_mode = 5
+ level_nokick = 1
+ level_opdeop = 5
+ level_opdeopme = 5
+ level_owner = "founder"
+ level_ownerme = 9999
+ level_protect = 9999
+ level_protectme = 10
+ level_say = 5
+ level_signkick = 9999
+ level_set = 9999
+ level_topic = 5
+ level_unban = 4
+ level_voice = 4
+ level_voiceme = 3
+
+ /*
+ * ChanServ flags configuration, for use with cs_flags.
+ *
+ * These flags are used by the chanserv/flags access system.
+ */
+ flag_change = "f"
+ flag_list = "l"
+ flag_akick = "K"
+ flag_assign = "s"
+ flag_autohalfop = "H"
+ flag_autoop = "O"
+ flag_autoowner = "Q"
+ flag_autoprotect = "A"
+ flag_autovoice = "V"
+ flag_badwords = "k"
+ flag_ban = "b"
+ flag_fantasia = "c"
+ flag_founder = "F"
+ flag_getkey = "G"
+ flag_greet = "g"
+ flag_halfop = "h"
+ flag_halfopme = "h"
+ flag_info = "I"
+ flag_invite = "i"
+ flag_kick = "k"
+ flag_memo = "m"
+ flag_mode = "s"
+ flag_nokick = "N"
+ flag_opdeop = "o"
+ flag_opdeopme = "o"
+ flag_owner = "q"
+ flag_ownerme = "q"
+ flag_protect = "a"
+ flag_protectme = "a"
+ flag_say = "B"
+ flag_set = "s"
+ flag_signkick = "K"
+ flag_topic = "t"
+ flag_unban = "u"
+ flag_voice = "v"
+ flag_voiceme = "v"
+}
+
+/*
+ * Core ChanServ commands.
+ *
+ * In Anope modules can provide (multiple) commands, each of which has a unique command name. Once these modules
+ * are loaded you can then configure the commands to be added to any client you like with any name you like.
+ *
+ * Additionally, you may provide a permission name that must be in the opertype of users executing the command.
+ *
+ * Sane defaults are provided below that do not need to be edited unless you wish to change the default behavior.
+ */
+
+/* Give it a help command */
+command { service = "ChanServ"; name = "HELP"; command = "generic/help"; }
+
+/*
+ * cs_access
+ *
+ * Provides commands chanserv/access and chanserv/levels.
+ * Provides the access system "levels".
+ *
+ * Used for giving users access in channels.
+ */
+module { name = "cs_access" }
+command { service = "ChanServ"; name = "ACCESS"; command = "chanserv/access"; }
+command { service = "ChanServ"; name = "LEVELS"; command = "chanserv/levels"; }
+
+/*
+ * cs_akick
+ *
+ * Provides the command chanserv/akick.
+ *
+ * Used for preventing users from joining channels.
+ */
+module { name = "cs_akick" }
+command { service = "ChanServ"; name = "AKICK"; command = "chanserv/akick"; }
+
+/*
+ * cs_appendtopic
+ *
+ * Provides the chanserv/appendtopic command.
+ *
+ * Used to append text to existing channel topics.
+ */
+module { name = "cs_appendtopic" }
+command { service = "ChanServ"; name = "APPENDTOPIC"; command = "chanserv/appendtopic"; }
+
+/*
+ * cs_ban
+ *
+ * Provides the command chanserv/ban.
+ *
+ * Used for banning users from channels.
+ */
+module { name = "cs_ban" }
+command { service = "ChanServ"; name = "BAN"; command = "chanserv/ban"; }
+command { service = "ChanServ"; name = "KB"; command = "chanserv/ban"; }
+
+/*
+ * cs_clearusers
+ *
+ * Provides the command chanserv/clearusers.
+ *
+ * Used for kicking all users from channels.
+ */
+module { name = "cs_clearusers" }
+command { service = "ChanServ"; name = "CLEARUSERS"; command = "chanserv/clearusers"; }
+
+/*
+ * cs_clone
+ *
+ * Provides the command chanserv/clone.
+ *
+ * Used for copying channel settings from one channel to another.
+ */
+module { name = "cs_clone" }
+command { service = "ChanServ"; name = "CLONE"; command = "chanserv/clone"; }
+
+/*
+ * cs_drop
+ *
+ * Provides the command chanserv/drop.
+ *
+ * Used for unregistering channels.
+ */
+module { name = "cs_drop" }
+command { service = "ChanServ"; name = "DROP"; command = "chanserv/drop"; }
+
+/*
+ * cs_enforce
+ *
+ * Provides the command chanserv/enforce.
+ *
+ * Used to enforce various channel settings such as secureops and restricted.
+ */
+module { name = "cs_enforce" }
+command { service = "ChanServ"; name = "ENFORCE"; command = "chanserv/enforce"; }
+
+/*
+ * cs_entrymsg
+ *
+ * Provides the command chanserv/entrymsg.
+ *
+ * Used to configure entry messages sent to users when they join a channel.
+ */
+module { name = "cs_entrymsg" }
+command { service = "ChanServ"; name = "ENTRYMSG"; command = "chanserv/entrymsg"; }
+cs_entrymsg
+{
+ /* The maximum number of entrymsgs allowed per channel. If not set, defaults to 5. */
+ maxentries = 5
+}
+
+/*
+ * cs_flags
+ *
+ * Provides the command chanserv/flags.
+ * Provides the access system "flags".
+ *
+ * Used for giving users access in channels.
+ */
+module { name = "cs_flags" }
+command { service = "ChanServ"; name = "FLAGS"; command = "chanserv/flags"; }
+
+/*
+ * cs_getkey
+ *
+ * Provides the command chanserv/getkey.
+ *
+ * Used for getting the key for channels.
+ */
+module { name = "cs_getkey" }
+command { service = "ChanServ"; name = "GETKEY"; command = "chanserv/getkey"; }
+
+/*
+ * cs_info
+ *
+ * Provides the command chanserv/info.
+ *
+ * Used for getting information about channels.
+ */
+module { name = "cs_info" }
+command { service = "ChanServ"; name = "INFO"; command = "chanserv/info"; }
+
+/*
+ * cs_invite
+ *
+ * Provides the command chanserv/invite.
+ *
+ * Used for inviting yourself in to channels.
+ */
+module { name = "cs_invite" }
+command { service = "ChanServ"; name = "INVITE"; command = "chanserv/invite"; }
+
+/*
+ * cs_kick
+ *
+ * Provides the command chanserv/kick.
+ *
+ * Used for kicking users from channels.
+ */
+module { name = "cs_kick" }
+command { service = "ChanServ"; name = "KICK"; command = "chanserv/kick"; }
+command { service = "ChanServ"; name = "K"; command = "chanserv/kick"; }
+
+/*
+ * cs_list
+ *
+ * Provides the command chanserv/list.
+ *
+ * Used for retrieving and searching the registered channel list.
+ */
+module { name = "cs_list" }
+command { service = "ChanServ"; name = "LIST"; command = "chanserv/list"; permission = "chanserv/list"; }
+
+/*
+ * cs_mode
+ *
+ * Provides the command chanserv/mode.
+ *
+ * Used for changing mode locks and changing modes.
+ */
+module { name = "cs_mode" }
+command { service = "ChanServ"; name = "MODE"; command = "chanserv/mode"; }
+
+/*
+ * cs_mode
+ *
+ * Provides the commands chanserv/op, chanserv/deop, chanserv/halfop, chanserv/dehalfop
+ * chanserv/voice, chanserv/devoice, chanserv/protect, chanserv/deprotect,
+ * chanserv/owner, and chanserv/deowner.
+ *
+ * Used for setting and removing modes on users.
+ */
+module { name = "cs_modes" }
+command { service = "ChanServ"; name = "OP"; command = "chanserv/op"; }
+command { service = "ChanServ"; name = "DEOP"; command = "chanserv/deop"; }
+command { service = "ChanServ"; name = "HALFOP"; command = "chanserv/halfop"; }
+command { service = "ChanServ"; name = "DEHALFOP"; command = "chanserv/dehalfop"; }
+command { service = "ChanServ"; name = "VOICE"; command = "chanserv/voice"; }
+command { service = "ChanServ"; name = "DEVOICE"; command = "chanserv/devoice"; }
+command { service = "ChanServ"; name = "PROTECT"; command = "chanserv/protect"; }
+command { service = "ChanServ"; name = "DEPROTECT"; command = "chanserv/deprotect"; }
+command { service = "ChanServ"; name = "OWNER"; command = "chanserv/owner"; }
+command { service = "ChanServ"; name = "DEOWNER"; command = "chanserv/deowner"; }
+
+/*
+ * cs_register
+ *
+ * Provides the commands chanserv/register.
+ *
+ * Used for registering channels.
+ */
+module { name = "cs_register" }
+command { service = "ChanServ"; name = "REGISTER"; command = "chanserv/register"; }
+
+/*
+ * cs_set
+ *
+ * Provides the command chanserv/set.
+ *
+ * Is a dummy command to provide a help wrapper for the various SET commands.
+ */
+module { name = "cs_set" }
+command { service = "ChanServ"; name = "SET"; command = "chanserv/set"; }
+
+/*
+ * cs_saset
+ *
+ * Provides the command chanserv/saset.
+ *
+ * Is a dummy command to provide a help wrapper for the various SASET commands.
+ */
+module { name = "cs_saset" }
+command { service = "ChanServ"; name = "SASET"; command = "chanserv/saset"; permission = "chanserv/saset"; }
+
+/*
+ * cs_set_bantype
+ *
+ * Provides the commands chanserv/set/bantype and chanserv/saset/bantype.
+ *
+ * Used for controlling what format bans are placed on channels.
+ */
+module { name = "cs_set_bantype" }
+command { service = "ChanServ"; name = "SET BANTYPE"; command = "chanserv/set/bantype"; }
+command { service = "ChanServ"; name = "SASET BANTYPE"; command = "chanserv/saset/bantype"; permission = "chanserv/saset/bantype"; }
+
+/*
+ * cs_set_description
+ *
+ * Provides the commands chanserv/set/description and chanserv/saset/description.
+ *
+ * Used for changing channels descriptions.
+ */
+module { name = "cs_set_description" }
+command { service = "ChanServ"; name = "SET DESCRIPTION"; command = "chanserv/set/description"; }
+command { service = "ChanServ"; name = "SET DESC"; command = "chanserv/set/description"; }
+command { service = "ChanServ"; name = "SASET DESCRIPTION"; command = "chanserv/saset/description"; permission = "chanserv/saset/description"; }
+command { service = "ChanServ"; name = "SASET DESC"; command = "chanserv/saset/description"; permission = "chanserv/saset/description"; }
+
+/*
+ * cs_set_founder
+ *
+ * Provides the commands chanserv/set/founder and chanserv/saset/founder.
+ *
+ * Used for changing channel founders.
+ */
+module { name = "cs_set_founder" }
+command { service = "ChanServ"; name = "SET FOUNDER"; command = "chanserv/set/founder"; }
+command { service = "ChanServ"; name = "SASET FOUNDER"; command = "chanserv/saset/founder"; permission = "chanserv/saset/founder"; }
+
+/*
+ * cs_set_keeptopic
+ *
+ * Provides the commands chanserv/set/keeptopic and chanserv/saset/keeptopic.
+ *
+ * Used for enabling keeptopic on channels, which causes ChanServ to restore the channel topic
+ * when a channel is created.
+ */
+module { name = "cs_set_keeptopic" }
+command { service = "ChanServ"; name = "SET KEEPTOPIC"; command = "chanserv/set/keeptopic"; }
+command { service = "ChanServ"; name = "SASET KEEPTOPIC"; command = "chanserv/saset/keeptopic"; permission = "chanserv/saset/keeptopic"; }
+
+/*
+ * cs_set_misc
+ *
+ * Provides the command chanserv/set/misc.
+ *
+ * Allows you to create arbitrary commands to set data, and have that data show up in chanserv/info.
+ */
+module { name = "cs_set_misc" }
+command { service = "ChanServ"; name = "SET URL"; command = "chanserv/set/misc"; }
+command { service = "ChanServ"; name = "SET EMAIL"; command = "chanserv/set/misc"; }
+
+/*
+ * cs_set_opnotice
+ *
+ * Provides the commands chanserv/set/opnotice and chanserv/saset/opnotice.
+ *
+ * Used for setting whether channel ops should be notified of mode changes made through ChanServ.
+ */
+module { name = "cs_set_opnotice" }
+command { service = "ChanServ"; name = "SET OPNOTICE"; command = "chanserv/set/opnotice"; }
+command { service = "ChanServ"; name = "SASET OPNOTICE"; command = "chanserv/saset/opnotice"; permission = "chanserv/saset/optnotice"; }
+
+/*
+ * cs_set_peace
+ *
+ * Provides the commands chanserv/set/peace and chanserv/saset/peace.
+ *
+ * Used for setting the peace option, which prevents users from kicking other users with
+ * higher level access than them.
+ */
+module { name = "cs_set_peace" }
+command { service = "ChanServ"; name = "SET PEACE"; command = "chanserv/set/peace"; }
+command { service = "ChanServ"; name = "SASET PEACE"; command = "chanserv/saset/peace"; permission = "chanserv/saset/peace"; }
+
+/*
+ * cs_set_persist
+ *
+ * Provides the commands chanserv/set/persist and chanserv/saset/persist.
+ *
+ * Used for setting whether ChanServ should stay in channels after the last user leaves.
+ */
+module { name = "cs_set_persist" }
+command { service = "ChanServ"; name = "SET PERSIST"; command = "chanserv/set/persist"; }
+command { service = "ChanServ"; name = "SASET PERSIST"; command = "chanserv/saset/persist"; permission = "chanserv/saset/persist"; }
+
+/*
+ * cs_set_private
+ *
+ * Provides the commands chanserv/set/private and chanserv/saset/private.
+ *
+ * Used for setting whether channels should show up in chanserv/list.
+ */
+module { name = "cs_set_private" }
+command { service = "ChanServ"; name = "SET PRIVATE"; command = "chanserv/set/private"; }
+command { service = "ChanServ"; name = "SASET PRIVATE"; command = "chanserv/saset/private"; permission = "chanserv/saset/private"; }
+
+/*
+ * cs_set_restricted
+ *
+ * Provides the commands chanserv/set/restricted and chanserv/saset/restricted.
+ *
+ * Used for setting whether users not on a channel's access list can join.
+ */
+module { name = "cs_set_restricted" }
+command { service = "ChanServ"; name = "SET RESTRICTED"; command = "chanserv/set/restricted"; }
+command { service = "ChanServ"; name = "SASET RESTRICTED"; command = "chanserv/saset/restricted"; permission = "chanserv/saset/restricted"; }
+
+/*
+ * cs_set_secure
+ *
+ * Provides the commands chanserv/set/secure and chanserv/saset/secure.
+ *
+ * Used for setting whether users who are recognized for accounts should have their access in channels.
+ */
+module { name = "cs_set_secure" }
+command { service = "ChanServ"; name = "SET SECURE"; command = "chanserv/set/secure"; }
+command { service = "ChanServ"; name = "SASET SECURE"; command = "chanserv/saset/secure"; permission = "chanserv/saset/secure"; }
+
+/*
+ * cs_set_securefounder
+ *
+ * Provides the commands chanserv/set/securefounder and chanserv/saset/securefounder.
+ *
+ * Used for setting whether users with founder level access in channels have true founder or not.
+ */
+module { name = "cs_set_securefounder" }
+command { service = "ChanServ"; name = "SET SECUREFOUNDER"; command = "chanserv/set/securefounder"; }
+command { service = "ChanServ"; name = "SASET SECUREFOUNDER"; command = "chanserv/saset/securefounder"; permission = "chanserv/saset/securefounder"; }
+
+/*
+ * cs_set_secureops
+ *
+ * Provides the commands chanserv/set/secureops and chanserv/saset/secureops.
+ *
+ * Used for restricting who can have channel op privilege in a channel to those whom have access in the channel.
+ */
+module { name = "cs_set_secureops" }
+command { service = "ChanServ"; name = "SET SECUREOPS"; command = "chanserv/set/secureops"; }
+command { service = "ChanServ"; name = "SASET SECUREOPS"; command = "chanserv/saset/secureops"; permission = "chanserv/saset/secureops"; }
+
+/*
+ * cs_set_signkick
+ *
+ * Provides the commands chanserv/set/signkick and chanserv/saset/signkick.
+ *
+ * Used for setting signkick, which appends the kicker's name to kicks sent through ChanServ.
+ */
+module { name = "cs_set_signkick" }
+command { service = "ChanServ"; name = "SET SIGNKICK"; command = "chanserv/set/signkick"; }
+command { service = "ChanServ"; name = "SASET SIGNKICK"; command = "chanserv/saset/signkick"; permission = "chanserv/saset/signkick"; }
+
+/*
+ * cs_set_successor
+ *
+ * Provides the commands chanserv/set/successor and chanserv/saset/successor.
+ *
+ * Used for setting channel successors, which become channel founders if the founders account expires.
+ */
+module { name = "cs_set_successor" }
+command { service = "ChanServ"; name = "SET SUCCESSOR"; command = "chanserv/set/successor"; }
+command { service = "ChanServ"; name = "SASET SUCCESSOR"; command = "chanserv/saset/successor"; permission = "chanserv/saset/successor"; }
+
+/*
+ * cs_set_topiclock
+ *
+ * Provides the commands chanserv/set/topiclock and chanserv/saset/topiclock.
+ *
+ * Used for setting topiclock, which prevents channel topics from being modified.
+ */
+module { name = "cs_set_topiclock" }
+command { service = "ChanServ"; name = "SET TOPICLOCK"; command = "chanserv/set/topiclock"; }
+command { service = "ChanServ"; name = "SASET TOPICLOCK"; command = "chanserv/saset/topiclock"; permission = "chanserv/saset/topiclock"; }
+
+/*
+ * cs_set_noexpire
+ *
+ * Provides the command chanserv/saset/noexpire.
+ *
+ * Used for setting noexpire, which prevents channels from expiring.
+ */
+module { name = "cs_saset_noexpire" }
+command { service = "ChanServ"; name = "SASET NOEXPIRE"; command = "chanserv/saset/noexpire"; permission = "chanserv/saset/noexpire"; }
+
+/*
+ * cs_suspend
+ *
+ * Provides the commands chanserv/suspend and chanserv/unsuspend.
+ *
+ * Used for suspending and unsuspending channels. Suspended channels can not be used but their settings are stored.
+ */
+module { name = "cs_suspend" }
+command { service = "ChanServ"; name = "SUSPEND"; command = "chanserv/suspend"; permission = "chanserv/suspend"; }
+command { service = "ChanServ"; name = "UNSUSPEND"; command = "chanserv/unsuspend"; permission = "chanserv/suspend"; }
+
+/*
+ * cs_sync
+ *
+ * Provides the command chanserv/sync.
+ *
+ * Used to sync users channel status modes with what access they have.
+ */
+module { name = "cs_sync" }
+command { service = "ChanServ"; name = "SYNC"; command = "chanserv/sync"; }
+
+/*
+ * cs_topic
+ *
+ * Provides the command chanserv/topic.
+ *
+ * Used for changing the channel topic. Usedful in conjunction with chanserv/set/topiclock.
+ */
+module { name = "cs_topic" }
+command { service = "ChanServ"; name = "TOPIC"; command = "chanserv/topic"; }
+
+/*
+ * cs_unban
+ *
+ * Provides the command chanserv/unban.
+ *
+ * Used for unbanning users from channels.
+ */
+module { name = "cs_unban" }
+command { service = "ChanServ"; name = "UNBAN"; command = "chanserv/unban"; }
+
+/*
+ * cs_xop
+ *
+ * Provides the commands chanserv/qop, chanserv/sop, chanserv/aop, chanserv/hop, and chanserv/vop.
+ * Provides the access system "XOP".
+ *
+ * Used for giving users access in channels.
+ */
+module { name = "cs_xop" }
+command { service = "ChanServ"; name = "QOP"; command = "chanserv/qop"; }
+command { service = "ChanServ"; name = "SOP"; command = "chanserv/sop"; }
+command { service = "ChanServ"; name = "AOP"; command = "chanserv/aop"; }
+command { service = "ChanServ"; name = "HOP"; command = "chanserv/hop"; }
+command { service = "ChanServ"; name = "VOP"; command = "chanserv/vop"; }
+
diff --git a/data/commands.example.conf b/data/commands.example.conf
deleted file mode 100644
index 6290dae6e..000000000
--- a/data/commands.example.conf
+++ /dev/null
@@ -1,341 +0,0 @@
-
-/*
- * [RECOMMENDED] Core modules and command configuration
- *
- * In Anope modules can provide (multiple) commands, each of which has a unique command name. Once these modules
- * are loaded you can then configure the commands to be added to any client you like with any name you like.
- *
- * Additionally, you may provide a permission name that must be in the opertype of users executing the command.
- *
- * Sane defaults are below.
- */
-
-module { name = "help" }
-command { service = "BotServ"; name = "HELP"; command = "generic/help"; }
-command { service = "ChanServ"; name = "HELP"; command = "generic/help"; }
-command { service = "Global"; name = "HELP"; command = "generic/help"; }
-command { service = "HostServ"; name = "HELP"; command = "generic/help"; }
-command { service = "MemoServ"; name = "HELP"; command = "generic/help"; }
-command { service = "NickServ"; name = "HELP"; command = "generic/help"; }
-command { service = "OperServ"; name = "HELP"; command = "generic/help"; }
-
-module { name = "bs_assign" }
-command { service = "BotServ"; name = "ASSIGN"; command = "botserv/assign"; }
-command { service = "BotServ"; name = "UNASSIGN"; command = "botserv/unassign"; }
-module { name = "bs_badwords" }
-command { service = "BotServ"; name = "BADWORDS"; command = "botserv/badwords"; }
-module { name = "bs_bot" }
-command { service = "BotServ"; name = "BOT"; command = "botserv/bot"; }
-module { name = "bs_botlist" }
-command { service = "BotServ"; name = "BOTLIST"; command = "botserv/botlist"; }
-module { name = "bs_control" }
-command { service = "BotServ"; name = "ACT"; command = "botserv/act"; }
-command { service = "BotServ"; name = "SAY"; command = "botserv/say"; }
-module { name = "bs_info" }
-command { service = "BotServ"; name = "INFO"; command = "botserv/info"; }
-module { name = "bs_kick" }
-command { service = "BotServ"; name = "KICK"; command = "botserv/kick"; }
-module { name = "bs_set" }
-command { service = "BotServ"; name = "SET"; command = "botserv/set"; }
-
-module { name = "cs_access" }
-command { service = "ChanServ"; name = "ACCESS"; command = "chanserv/access"; }
-command { service = "ChanServ"; name = "LEVELS"; command = "chanserv/levels"; }
-module { name = "cs_akick" }
-command { service = "ChanServ"; name = "AKICK"; command = "chanserv/akick"; }
-module { name = "cs_ban" }
-command { service = "ChanServ"; name = "BAN"; command = "chanserv/ban"; }
-command { service = "ChanServ"; name = "KB"; command = "chanserv/ban"; }
-module { name = "cs_clearusers" }
-command { service = "ChanServ"; name = "CLEARUSERS"; command = "chanserv/clearusers"; }
-module { name = "cs_clone" }
-command { service = "ChanServ"; name = "CLONE"; command = "chanserv/clone"; }
-module { name = "cs_drop" }
-command { service = "ChanServ"; name = "DROP"; command = "chanserv/drop"; }
-module { name = "cs_flags" }
-command { service = "ChanServ"; name = "FLAGS"; command = "chanserv/flags"; }
-module { name = "cs_getkey" }
-command { service = "ChanServ"; name = "GETKEY"; command = "chanserv/getkey"; }
-module { name = "cs_info" }
-command { service = "ChanServ"; name = "INFO"; command = "chanserv/info"; }
-module { name = "cs_invite" }
-command { service = "ChanServ"; name = "INVITE"; command = "chanserv/invite"; }
-module { name = "cs_kick" }
-command { service = "ChanServ"; name = "KICK"; command = "chanserv/kick"; }
-command { service = "ChanServ"; name = "K"; command = "chanserv/kick"; }
-module { name = "cs_list" }
-command { service = "ChanServ"; name = "LIST"; command = "chanserv/list"; permission = "chanserv/list"; }
-module { name = "cs_mode" }
-command { service = "ChanServ"; name = "MODE"; command = "chanserv/mode"; }
-module { name = "cs_modes" }
-command { service = "ChanServ"; name = "OP"; command = "chanserv/op"; }
-command { service = "ChanServ"; name = "DEOP"; command = "chanserv/deop"; }
-command { service = "ChanServ"; name = "HALFOP"; command = "chanserv/halfop"; }
-command { service = "ChanServ"; name = "DEHALFOP"; command = "chanserv/dehalfop"; }
-command { service = "ChanServ"; name = "VOICE"; command = "chanserv/voice"; }
-command { service = "ChanServ"; name = "DEVOICE"; command = "chanserv/devoice"; }
-command { service = "ChanServ"; name = "PROTECT"; command = "chanserv/protect"; }
-command { service = "ChanServ"; name = "DEPROTECT"; command = "chanserv/deprotect"; }
-command { service = "ChanServ"; name = "OWNER"; command = "chanserv/owner"; }
-command { service = "ChanServ"; name = "DEOWNER"; command = "chanserv/deowner"; }
-module { name = "cs_register" }
-command { service = "ChanServ"; name = "REGISTER"; command = "chanserv/register"; }
-module { name = "cs_set" }
-command { service = "ChanServ"; name = "SET"; command = "chanserv/set"; }
-module { name = "cs_saset" }
-command { service = "ChanServ"; name = "SASET"; command = "chanserv/saset"; permission = "chanserv/saset"; }
-module { name = "cs_set_bantype" }
-command { service = "ChanServ"; name = "SET BANTYPE"; command = "chanserv/set/bantype"; }
-command { service = "ChanServ"; name = "SASET BANTYPE"; command = "chanserv/saset/bantype"; permission = "chanserv/saset/bantype"; }
-module { name = "cs_set_description" }
-command { service = "ChanServ"; name = "SET DESCRIPTION"; command = "chanserv/set/description"; }
-command { service = "ChanServ"; name = "SET DESC"; command = "chanserv/set/description"; }
-command { service = "ChanServ"; name = "SASET DESCRIPTION"; command = "chanserv/saset/description"; permission = "chanserv/saset/description"; }
-command { service = "ChanServ"; name = "SASET DESC"; command = "chanserv/saset/description"; permission = "chanserv/saset/desc"; }
-module { name = "cs_set_founder" }
-command { service = "ChanServ"; name = "SET FOUNDER"; command = "chanserv/set/founder"; }
-command { service = "ChanServ"; name = "SASET FOUNDER"; command = "chanserv/saset/founder"; permission = "chanserv/saset/founder"; }
-module { name = "cs_set_keeptopic" }
-command { service = "ChanServ"; name = "SET KEEPTOPIC"; command = "chanserv/set/keeptopic"; }
-command { service = "ChanServ"; name = "SASET KEEPTOPIC"; command = "chanserv/saset/keeptopic"; permission = "chanserv/saset/keeptopic"; }
-module { name = "cs_set_opnotice" }
-command { service = "ChanServ"; name = "SET OPNOTICE"; command = "chanserv/set/opnotice"; }
-command { service = "ChanServ"; name = "SASET OPNOTICE"; command = "chanserv/saset/opnotice"; permission = "chanserv/saset/optnotice"; }
-module { name = "cs_set_peace" }
-command { service = "ChanServ"; name = "SET PEACE"; command = "chanserv/set/peace"; }
-command { service = "ChanServ"; name = "SASET PEACE"; command = "chanserv/saset/peace"; permission = "chanserv/saset/peace"; }
-module { name = "cs_set_persist" }
-command { service = "ChanServ"; name = "SET PERSIST"; command = "chanserv/set/persist"; }
-command { service = "ChanServ"; name = "SASET PERSIST"; command = "chanserv/saset/persist"; permission = "chanserv/saset/persist"; }
-module { name = "cs_set_private" }
-command { service = "ChanServ"; name = "SET PRIVATE"; command = "chanserv/set/private"; }
-command { service = "ChanServ"; name = "SASET PRIVATE"; command = "chanserv/saset/private"; permission = "chanserv/saset/private"; }
-module { name = "cs_set_restricted" }
-command { service = "ChanServ"; name = "SET RESTRICTED"; command = "chanserv/set/restricted"; }
-command { service = "ChanServ"; name = "SASET RESTRICTED"; command = "chanserv/saset/restricted"; permission = "chanserv/saset/restricted"; }
-module { name = "cs_set_secure" }
-command { service = "ChanServ"; name = "SET SECURE"; command = "chanserv/set/secure"; }
-command { service = "ChanServ"; name = "SASET SECURE"; command = "chanserv/saset/secure"; permission = "chanserv/saset/secure"; }
-module { name = "cs_set_securefounder" }
-command { service = "ChanServ"; name = "SET SECUREFOUNDER"; command = "chanserv/set/securefounder"; }
-command { service = "ChanServ"; name = "SASET SECUREFOUNDER"; command = "chanserv/saset/securefounder"; permission = "chanserv/saset/securefounder"; }
-module { name = "cs_set_secureops" }
-command { service = "ChanServ"; name = "SET SECUREOPS"; command = "chanserv/set/secureops"; }
-command { service = "ChanServ"; name = "SASET SECUREOPS"; command = "chanserv/saset/secureops"; permission = "chanserv/saset/secureops"; }
-module { name = "cs_set_signkick" }
-command { service = "ChanServ"; name = "SET SIGNKICK"; command = "chanserv/set/signkick"; }
-command { service = "ChanServ"; name = "SASET SIGNKICK"; command = "chanserv/saset/signkick"; permission = "chanserv/saset/signkick"; }
-module { name = "cs_set_successor" }
-command { service = "ChanServ"; name = "SET SUCCESSOR"; command = "chanserv/set/successor"; }
-command { service = "ChanServ"; name = "SASET SUCCESSOR"; command = "chanserv/saset/successor"; permission = "chanserv/saset/successor"; }
-module { name = "cs_set_topiclock" }
-command { service = "ChanServ"; name = "SET TOPICLOCK"; command = "chanserv/set/topiclock"; }
-command { service = "ChanServ"; name = "SASET TOPICLOCK"; command = "chanserv/saset/topiclock"; permission = "chanserv/saset/topiclock"; }
-module { name = "cs_saset_noexpire" }
-command { service = "ChanServ"; name = "SASET NOEXPIRE"; command = "chanserv/saset/noexpire"; permission = "chanserv/saset/noexpire"; }
-module { name = "cs_suspend" }
-command { service = "ChanServ"; name = "SUSPEND"; command = "chanserv/suspend"; permission = "chanserv/suspend"; }
-command { service = "ChanServ"; name = "UNSUSPEND"; command = "chanserv/unsuspend"; permission = "chanserv/suspend"; }
-module { name = "cs_topic" }
-command { service = "ChanServ"; name = "TOPIC"; command = "chanserv/topic"; }
-module { name = "cs_unban" }
-command { service = "ChanServ"; name = "UNBAN"; command = "chanserv/unban"; }
-module { name = "cs_xop" }
-command { service = "ChanServ"; name = "QOP"; command = "chanserv/qop"; }
-command { service = "ChanServ"; name = "SOP"; command = "chanserv/sop"; }
-command { service = "ChanServ"; name = "AOP"; command = "chanserv/aop"; }
-command { service = "ChanServ"; name = "HOP"; command = "chanserv/hop"; }
-command { service = "ChanServ"; name = "VOP"; command = "chanserv/vop"; }
-
-module { name = "gl_global" }
-command { service = "Global"; name = "GLOBAL"; command = "global/global"; permission = "global/global"; }
-
-module { name = "hs_del" }
-command { service = "HostServ"; name = "DEL"; command = "hostserv/del"; permission = "hostserv/del"; }
-command { service = "HostServ"; name = "DELALL"; command = "hostserv/delall"; permission = "hostserv/del"; }
-module { name = "hs_group" }
-command { service = "HostServ"; name = "GROUP"; command = "hostserv/group"; }
-module { name = "hs_list" }
-command { service = "HostServ"; name = "LIST"; command = "hostserv/list"; permission = "hostserv/list"; }
-module { name = "hs_off" }
-command { service = "HostServ"; name = "OFF"; command = "hostserv/off"; }
-module { name = "hs_on" }
-command { service = "HostServ"; name = "ON"; command = "hostserv/on"; }
-module { name = "hs_set" }
-command { service = "HostServ"; name = "SET"; command = "hostserv/set"; permission = "hostserv/set"; }
-command { service = "HostServ"; name = "SETALL"; command = "hostserv/setall"; permission = "hostserv/set"; }
-
-module { name = "ms_cancel" }
-command { service = "MemoServ"; name = "CANCEL"; command = "memoserv/cancel"; }
-module { name = "ms_check" }
-command { service = "MemoServ"; name = "CHECK"; command = "memoserv/check"; }
-module { name = "ms_del" }
-command { service = "MemoServ"; name = "DEL"; command = "memoserv/del"; }
-module { name = "ms_ignore" }
-command { service = "MemoServ"; name = "IGNORE"; command = "memoserv/ignore"; }
-module { name = "ms_info" }
-command { service = "MemoServ"; name = "INFO"; command = "memoserv/info"; }
-module { name = "ms_list" }
-command { service = "MemoServ"; name = "LIST"; command = "memoserv/list"; }
-module { name = "ms_read" }
-command { service = "MemoServ"; name = "READ"; command = "memoserv/read"; }
-module { name = "ms_rsend" }
-command { service = "MemoServ"; name = "RSEND"; command = "memoserv/rsend"; }
-module { name = "ms_send" }
-command { service = "MemoServ"; name = "SEND"; command = "memoserv/send"; }
-module { name = "ms_sendall" }
-command { service = "MemoServ"; name = "SENDALL"; command = "memoserv/sendall"; permission = "memoserv/sendall"; }
-module { name = "ms_set" }
-command { service = "MemoServ"; name = "SET"; command = "memoserv/set"; }
-module { name = "ms_staff" }
-command { service = "MemoServ"; name = "STAFF"; command = "memoserv/staff"; permission = "memoserv/staff"; }
-
-module { name = "ns_access" }
-command { service = "NickServ"; name = "ACCESS"; command = "nickserv/access"; }
-module { name = "ns_ajoin" }
-command { service = "NickServ"; name = "AJOIN"; command = "nickserv/ajoin"; }
-module { name = "ns_alist" }
-command { service = "NickServ"; name = "ALIST"; command = "nickserv/alist"; }
-module { name = "ns_cert" }
-command { service = "NickServ"; name = "CERT"; command = "nickserv/cert"; }
-module { name = "ns_drop" }
-command { service = "NickServ"; name = "DROP"; command = "nickserv/drop"; }
-module { name = "ns_getemail" }
-command { service = "NickServ"; name = "GETEMAIL"; command = "nickserv/getemail"; permission = "nickserv/getemail"; }
-module { name = "ns_getpass" }
-command { service = "NickServ"; name = "GETPASS"; command = "nickserv/getpass"; permission = "nickserv/getpass"; }
-module { name = "ns_ghost" }
-command { service = "NickServ"; name = "GHOST"; command = "nickserv/ghost"; }
-module { name = "ns_group" }
-command { service = "NickServ"; name = "GLIST"; command = "nickserv/glist"; }
-command { service = "NickServ"; name = "GROUP"; command = "nickserv/group"; }
-command { service = "NickServ"; name = "UNGROUP"; command = "nickserv/ungroup"; }
-module { name = "ns_identify" }
-command { service = "NickServ"; name = "ID"; command = "nickserv/identify"; }
-command { service = "NickServ"; name = "IDENTIFY"; command = "nickserv/identify"; }
-module { name = "ns_info" }
-command { service = "NickServ"; name = "INFO"; command = "nickserv/info"; }
-module { name = "ns_list" }
-command { service = "NickServ"; name = "LIST"; command = "nickserv/list"; }
-module { name = "ns_logout" }
-command { service = "NickServ"; name = "LOGOUT"; command = "nickserv/logout"; }
-module { name = "ns_recover" }
-command { service = "NickServ"; name = "RECOVER"; command = "nickserv/recover"; }
-module { name = "ns_register" }
-command { service = "NickServ"; name = "CONFIRM"; command = "nickserv/confirm"; }
-command { service = "NickServ"; name = "REGISTER"; command = "nickserv/register"; }
-command { service = "NickServ"; name = "RESEND"; command = "nickserv/resend"; }
-module { name = "ns_release" }
-command { service = "NickServ"; name = "RELEASE"; command = "nickserv/release"; }
-module { name = "ns_resetpass" }
-command { service = "NickServ"; name = "RESETPASS"; command = "nickserv/resetpass"; }
-module { name = "ns_saset" }
-command { service = "NickServ"; name = "SASET"; command = "nickserv/saset"; }
-command { service = "NickServ"; name = "SASET DISPLAY"; command = "nickserv/saset/display"; }
-command { service = "NickServ"; name = "SASET PASSWORD"; command = "nickserv/saset/password"; }
-module { name = "ns_set" }
-command { service = "NickServ"; name = "SET"; command = "nickserv/set"; }
-command { service = "NickServ"; name = "SET DISPLAY"; command = "nickserv/set/display"; }
-command { service = "NickServ"; name = "SET PASSWORD"; command = "nickserv/set/password"; }
-module { name = "ns_set_autoop" }
-command { service = "NickServ"; name = "SET AUTOOP"; command = "nickserv/set/autoop"; }
-command { service = "NickServ"; name = "SASET AUTOOP"; command = "nickserv/saset/autoop"; permission = "nickserv/saset/autoop"; }
-module { name = "ns_set_email" }
-command { service = "NickServ"; name = "SET EMAIL"; command = "nickserv/set/email"; }
-command { service = "NickServ"; name = "SASET EMAIL"; command = "nickserv/saset/email"; permission = "nickserv/saset/email"; }
-module { name = "ns_set_greet" }
-command { service = "NickServ"; name = "SET GREET"; command = "nickserv/set/greet"; }
-command { service = "NickServ"; name = "SASET GREET"; command = "nickserv/saset/greet"; permission = "nickserv/saset/greet"; }
-module { name = "ns_set_hide" }
-command { service = "NickServ"; name = "SET HIDE"; command = "nickserv/set/hide"; }
-command { service = "NickServ"; name = "SASET HIDE"; command = "nickserv/saset/hide"; permission = "nickserv/saset/hide"; }
-module { name = "ns_set_kill" }
-command { service = "NickServ"; name = "SET KILL"; command = "nickserv/set/kill"; }
-command { service = "NickServ"; name = "SASET KILL"; command = "nickserv/saset/kill"; permission = "nickserv/saset/kill"; }
-module { name = "ns_set_language" }
-command { service = "NickServ"; name = "SET LANGUAGE"; command = "nickserv/set/language"; }
-command { service = "NickServ"; name = "SASET LANGUAGE"; command = "nickserv/saset/language"; permission = "nickserv/saset/language"; }
-module { name = "ns_set_message" }
-command { service = "NickServ"; name = "SET MESSAGE"; command = "nickserv/set/message"; }
-command { service = "NickServ"; name = "SASET MESSAGE"; command = "nickserv/saset/message"; permission = "nickserv/saset/message"; }
-module { name = "ns_set_private" }
-command { service = "NickServ"; name = "SET PRIVATE"; command = "nickserv/set/private"; }
-command { service = "NickServ"; name = "SASET PRIVATE"; command = "nickserv/saset/private"; permission = "nickserv/saset/private"; }
-module { name = "ns_set_secure" }
-command { service = "NickServ"; name = "SET SECURE"; command = "nickserv/set/secure"; }
-command { service = "NickServ"; name = "SASET SECURE"; command = "nickserv/saset/secure"; permission = "nickserv/saset/secure"; }
-module { name = "ns_saset_noexpire" }
-command { service = "NickServ"; name = "SASET NOEXPIRE"; command = "nickserv/saset/noexpire"; permission = "nickserv/saset/noexpire" }
-module { name = "ns_sendpass" }
-command { service = "NickServ"; name = "SENDPASS"; command = "nickserv/sendpass"; permission = "nickserv/sendpass"; }
-module { name = "ns_status" }
-command { service = "NickServ"; name = "STATUS"; command = "nickserv/status"; }
-module { name = "ns_suspend" }
-command { service = "NickServ"; name = "SUSPEND"; command = "nickserv/suspend"; permission = "nickserv/suspend"; }
-command { service = "NickServ"; name = "UNSUSPEND"; command = "nickserv/unsuspend"; permission = "nickserv/suspend"; }
-module { name = "ns_update" }
-command { service = "NickServ"; name = "UPDATE"; command = "nickserv/update"; }
-
-module { name = "os_akill" }
-command { service = "OperServ"; name = "AKILL"; command = "operserv/akill"; permission = "operserv/akill"; }
-module { name = "os_chankill" }
-command { service = "OperServ"; name = "CHANKILL"; command = "operserv/chankill"; permission = "operserv/chankill"; }
-module { name = "os_list" }
-command { service = "OperServ"; name = "CHANLIST"; command = "operserv/chanlist"; }
-command { service = "OperServ"; name = "USERLIST"; command = "operserv/userlist"; }
-module { name = "os_config" }
-command { service = "OperServ"; name = "CONFIG"; command = "operserv/config"; permission = "operserv/config"; }
-module { name = "os_forbid" }
-command { service = "OperServ"; name = "FORBID"; command = "operserv/forbid"; permission = "operserv/forbid"; }
-module { name = "os_ignore" }
-command { service = "OperServ"; name = "IGNORE"; command = "operserv/ignore"; permission = "operserv/ignore"; }
-module { name = "os_jupe" }
-command { service = "OperServ"; name = "JUPE"; command = "operserv/jupe"; permission = "operserv/jupe"; }
-module { name = "os_kick" }
-command { service = "OperServ"; name = "KICK"; command = "operserv/kick"; permission = "operserv/kick"; }
-module { name = "os_kill" }
-command { service = "OperServ"; name = "KILL"; command = "operserv/kill"; permission = "operserv/kill"; }
-module { name = "os_login" }
-command { service = "OperServ"; name = "LOGIN"; command = "operserv/login"; }
-module { name = "os_mode" }
-command { service = "OperServ"; name = "MODE"; command = "operserv/mode"; permission = "operserv/mode"; }
-command { service = "OperServ"; name = "UMODE"; command = "operserv/umode"; permission = "operserv/umode"; }
-module { name = "os_modinfo" }
-command { service = "OperServ"; name = "MODINFO"; command = "operserv/modinfo"; }
-command { service = "OperServ"; name = "MODLIST"; command = "operserv/modlist"; permission = "operserv/modlist"; }
-module { name = "os_module" }
-command { service = "OperServ"; name = "MODLOAD"; command = "operserv/modload"; permission = "operserv/modload"; }
-command { service = "OperServ"; name = "MODRELOAD"; command = "operserv/modreload"; permission = "operserv/modload"; }
-command { service = "OperServ"; name = "MODUNLOAD"; command = "operserv/modunload"; permission = "operserv/modload"; }
-module { name = "os_news" }
-command { service = "OperServ"; name = "LOGONNEWS"; command = "operserv/logonnews"; permission = "operserv/news"; }
-command { service = "OperServ"; name = "OPERNEWS"; command = "operserv/opernews"; permission = "operserv/news"; }
-command { service = "OperServ"; name = "RANDOMNEWS"; command = "operserv/randomnews"; permission = "operserv/news"; }
-module { name = "os_noop" }
-command { service = "OperServ"; name = "NOOP"; command = "operserv/noop"; permission = "operserv/noop"; }
-module { name = "os_oline" }
-command { service = "OperServ"; name = "OLINE"; command = "operserv/oline"; permission = "operserv/oline"; }
-module { name = "os_oper" }
-command { service = "OperServ"; name = "OPER"; command = "operserv/oper"; permission = "operserv/oper"; }
-module { name = "os_reload" }
-command { service = "OperServ"; name = "RELOAD"; command = "operserv/reload"; permission = "operserv/reload"; }
-module { name = "os_session" }
-command { service = "OperServ"; name = "EXCEPTION"; command = "operserv/exception"; permission = "operserv/exception"; }
-command { service = "OperServ"; name = "SESSION"; command = "operserv/session"; permission = "operserv/session"; }
-module { name = "os_set" }
-command { service = "OperServ"; name = "SET"; command = "operserv/set"; permission = "operserv/set"; }
-module { name = "os_shutdown" }
-command { service = "OperServ"; name = "QUIT"; command = "operserv/quit"; permission = "operserv/quit"; }
-command { service = "OperServ"; name = "RESTART"; command = "operserv/restart"; permission = "operserv/restart"; }
-command { service = "OperServ"; name = "SHUTDOWN"; command = "operserv/shutdown"; permission = "operserv/shutdown"; }
-module { name = "os_stats" }
-command { service = "OperServ"; name = "STATS"; command = "operserv/stats"; permission = "operserv/stats"; }
-module { name = "os_svsnick" }
-command { service = "OperServ"; name = "SVSNICK"; command = "operserv/svsnick"; permission = "operserv/svsnick"; }
-module { name = "os_sxline" }
-command { service = "OperServ"; name = "SNLINE"; command = "operserv/snline"; permission = "operserv/snline"; }
-command { service = "OperServ"; name = "SQLINE"; command = "operserv/sqline"; permission = "operserv/sqline"; }
-command { service = "OperServ"; name = "SZLINE"; command = "operserv/szline"; permission = "operserv/szline"; }
-module { name = "os_update" }
-command { service = "OperServ"; name = "UPDATE"; command = "operserv/update"; permission = "operserv/update"; }
-
diff --git a/data/example.conf b/data/example.conf
index 14065ddf4..a14cf9ef6 100644
--- a/data/example.conf
+++ b/data/example.conf
@@ -72,6 +72,27 @@
* program.
*/
+/*
+ * [OPTIONAL] Additional Includes
+ *
+ * You can include additional configuration files here.
+ * You may also include executable files, which will be executed and
+ * the output from it will be included into your configuration.
+ */
+
+/*
+include
+{
+ type = "file"
+ name = "some.conf"
+}
+
+include
+{
+ type = "executable"
+ name = "/usr/bin/wget -q -O - http://some.miconfigured.network.com/services.conf"
+}
+*/
/*
* [REQUIRED] IRCd Config
@@ -171,6 +192,7 @@ serverinfo
/*
* [REQUIRED] Protocol module
+ *
* This directive tells Anope which IRCd Protocol to speak when connecting.
* You MUST modify this to match the IRCd you run.
*
@@ -463,800 +485,94 @@ options
}
/*
- * [RECOMMENDED] Service client configuration
+ * [OPTIONAL] BotServ
+ *
+ * Includes botserv.example.conf, which is necessary for BotServ functionality.
*
- * Defines some of the core services. Commands are later added to these services.
+ * Remove this block to disable BotServ.
*/
-
-service
-{
- /*
- * The nick, user name, host, and real name of the service.
- */
- nick = "BotServ"
- user = "services"
- host = "localhost.net"
- gecos = "Bot Service"
-}
-
-service
-{
- nick = "ChanServ"
- user = "services"
- host = "localhost.net"
- gecos = "Channel Registration Service"
-}
-
-service
-{
- nick = "Global"
- user = "services"
- host = "localhost.net"
- gecos = "Global Noticer"
-}
-
-service
-{
- nick = "HostServ"
- user = "services"
- host = "localhost.net"
- gecos = "vHost Service"
-}
-
-service
-{
- nick = "MemoServ"
- user = "services"
- host = "localhost.net"
- gecos = "Memo Service"
-}
-
-service
-{
- nick = "NickServ"
- user = "services"
- host = "localhost.net"
- gecos = "Nickname Registration Service"
-}
-
-service
+include
{
- nick = "OperServ"
- user = "services"
- host = "localhost.net"
- gecos = "Operator Service"
+ type = "file"
+ name = "botserv.example.comf"
}
/*
- * [RECOMMENDED] Core clients
+ * [RECOMMENDED] ChanServ
+ *
+ * Includes chanserv.example.conf, which is necessary for ChanServ functionality.
+ *
+ * Remove this block to disable ChanServ.
*/
-
-module { name = "bs_main" }
-botserv
+include
{
- /*
- * The name of the client that should be BotServ.
- * Clients are configured above.
- */
- name = "BotServ"
-
- /*
- * The default bot options for newly registered channels. Note that changing these options
- * will have no effect on channels which are already registered. The list must be separated
- * by spaces.
- *
- * The options are:
- * - dontkickops: Channel operators will be protected against BotServ kicks
- * - dontkickvoices: Voiced users will be protected against BotServ kicks
- * - greet: The channel's BotServ bot will greet incoming users that have set a greet
- * in their NickServ settings
- * - fantasy: Enables the use of BotServ fantasy commands in the channel
- *
- * This directive is optional, if left blank, there will be no defaults.
- */
- defaults="greet fantasy"
-
- /*
- * The minimum number of users there must be in a channel before the bot joins it. The best
- * value for this setting is 1 or 2. This can be 0, the service bots will not part unless
- * specifically unassigned, and will keep the channel open.
- */
- minusers = 1
-
- /*
- * The maximum number of entries a single bad words list can have. Setting it too high can
- * reduce performance slightly.
- */
- badwordsmax = 32
-
- /*
- * The amount of time that data for a user is valid in BotServ. If the data exceeds this time,
- * it is reset or deleted depending on the case. Do not set it too high, otherwise your
- * resources will be slightly affected.
- */
- keepdata = 10m
-
- /*
- * The bots are currently not affected by any modes or bans when they try to join a channel.
- * But some people may want to make it act like a real bot, that is, for example, remove all
- * the bans affecting the bot before joining the channel, remove a ban that affects the bot
- * set by a user when it is in the channel, and so on. Since it consumes a bit more CPU
- * time, you should not enable this on larger networks.
- *
- * This directive is optional.
- */
- #smartjoin = yes
-
- /*
- * If set, the bots will use a kick reason that does not state the word when it is kicking.
- * This is especially useful if you have young people on your network.
- *
- * This directive is optional.
- */
- gentlebadwordreason = yes
-
- /*
- * If set, BotServ will use case sensitive checking for badwords.
- *
- * This directive is optional.
- */
- #casesensitive = yes
-
- /*
- * Defines the prefix for fantasy commands in channels. This character will have to be prepended
- * to all fantasy commands. If you choose "!", for example, fantasy commands will be "!kick",
- * "!op", etc. This directive is optional, if left out, the default fantasy character is "!".
- */
- #fantasycharacter = "!"
+ type = "file"
+ name = "chanserv.example.conf"
}
/*
- * [RECOMMENDED] Core ChanServ module.
+ * [RECOMMENDED] Global
+ *
+ * Includes global.example.conf, which is necessary for Global funcionality.
*
- * Provides essential functionality for ChanServ
+ * Remove this block to disable Global.
*/
-module { name = "cs_main" }
-
-chanserv
-{
- /*
- * The name of the client that should be ChanServ. Clients are configured
- * with the service blocks.
- */
- name = "ChanServ"
-
- /*
- * The default options for newly registered channels. Note that changing these options
- * will have no effect on channels which are already registered. The list must be separated
- * by spaces.
- *
- * The options are:
- * - keeptopic: Retain topic when the channel is not in use
- * - opnotice: Send a notice when OP/DEOP commands are used
- * - peace: Disallow users from kicking or removing modes from others who are of the same
- * access level or superior
- * - private: Hide the channel from ChanServ's LIST command
- * - restricted: Kick/ban users who are restricted from the channel
- * - secure: Enable channel security, requiring the user to be identified with NickServ in
- * order to be considered for being on the access list of the channel
- * - secureops: Only allow operator status to be given if the user is on the access list
- * - securefounder: Only allow the real founder of the channel to drop the channel, change it's
- * password, or change the founder or successor
- * - signkick: Use of ChanServ's KICK command will cause the user's nick to be signed to the kick.
- * - signkicklevel: Same as above, but the kick will not be signed if the user is at the same access
- * level or superior to the target
- * - topiclock: Disallow the topic to be changed except with ChanServ's TOPIC command
- * - persist: Keep the channel open at all times
- * - none: No defaults
- *
- * This directive is optional, if left blank, the options will default to keetopic, secure, securefounder,
- * and signkick. If you really want no defaults, use "none" by itself as the option.
- */
- defaults="keeptopic peace secure securefounder signkick"
-
- /*
- * The maximum number of channels which may be registered to a single nickname.
- *
- * This directive is optional, but recommended.
- * If not set, there will be no restriction on the numbers of channels a single nickname can have registered.
- */
- maxregistered = 20
-
- /*
- * The length of time before a channel registration expires.
- *
- * This directive is optional, but recommended.
- * If not set, the default is 14 days.
- */
- expire = 14d
-
- /*
- * The length of time before a suspended channel becomes unsuspended.
- *
- * This directive is optional.
- * If not set, the default is to never.
- */
- #suspendexpire = 90d
-
- /*
- * The lenth of time before a forbidden channel drops.
- *
- * This directive is optional.
- * If not set, the default is to never.
- */
- #forbidexpire = 90d
-
- /*
- * The default ban type for newly registered channels (and when importing old databases).
- *
- * defbantype can be:
- *
- * 0: ban in the form of *!user@host
- * 1: ban in the form of *!*user@host
- * 2: ban in the form of *!*@host
- * 3: ban in the form of *!*user@*.domain
- */
- defbantype = 2
-
- /*
- * The maximum number of entries on a channel's access list.
- */
- accessmax = 1024
-
- /*
- * The maximum number of entries on a channel's autokick list.
- */
- autokickmax = 32
-
- /*
- * The default reason for an autokick if none is given.
- */
- autokickreason = "User has been banned from the channel"
-
- /*
- * The length of time ChanServ stays in a channel after kicking a user from a channel they are not
- * permitted to be in. This only occurs when the user is the only one in the channel.
- */
- inhabit = 15s
-
- /*
- * The maximum number of channels to be returned for a ChanServ LIST command.
- */
- listmax = 50
-
- /*
- * Allow only IRC Operators to use ChanServ.
- *
- * This directive is optional.
- */
- #opersonly = yes
-
- /*
- * ChanServ levels configuration, for use with cs_access.
- *
- * These levels are used by the chanserv/access access system.
- * The levels configured below will be used as a default by newly registered channels.
- *
- * The level "founder" is a special level that means anyone with the level_founder permission
- * can use (which of course defaults to "founder"). Anyone with the founder level permission in
- * a channel can do anything in the channel.
- */
- level_change = 10
- level_list = 1
- level_akick = 10
- level_assign = "founder"
- level_autohalfop = 4
- level_autoop = 5
- level_autoowner = 9999
- level_autoprotect = 10
- level_autovoice = 3
- level_badwords = 10
- level_ban = 4
- level_fantasia = 3
- level_founder = "founder"
- level_getkey = 5
- level_greet = 5
- level_halfop = 5
- level_halfopme = 4
- level_info = 9999
- level_invite = 5
- level_kick = 4
- level_memo = 10
- level_mode = 5
- level_nokick = 1
- level_opdeop = 5
- level_opdeopme = 5
- level_owner = "founder"
- level_ownerme = 9999
- level_protect = 9999
- level_protectme = 10
- level_say = 5
- level_signkick = 9999
- level_set = 9999
- level_topic = 5
- level_unban = 4
- level_voice = 4
- level_voiceme = 3
-
- /*
- * ChanServ flags configuration, for use with cs_flags.
- *
- * These flags are used by the chanserv/flags access system.
- */
- flag_change = "f"
- flag_list = "l"
- flag_akick = "K"
- flag_assign = "s"
- flag_autohalfop = "H"
- flag_autoop = "O"
- flag_autoowner = "Q"
- flag_autoprotect = "A"
- flag_autovoice = "V"
- flag_badwords = "k"
- flag_ban = "b"
- flag_fantasia = "c"
- flag_founder = "F"
- flag_getkey = "G"
- flag_greet = "g"
- flag_halfop = "h"
- flag_halfopme = "h"
- flag_info = "I"
- flag_invite = "i"
- flag_kick = "k"
- flag_memo = "m"
- flag_mode = "s"
- flag_nokick = "N"
- flag_opdeop = "o"
- flag_opdeopme = "o"
- flag_owner = "q"
- flag_ownerme = "q"
- flag_protect = "a"
- flag_protectme = "a"
- flag_say = "B"
- flag_set = "s"
- flag_signkick = "K"
- flag_topic = "t"
- flag_unban = "u"
- flag_voice = "v"
- flag_voiceme = "v"
-}
-
-module { name = "gl_main" }
-global
+include
{
- /*
- * The name of the client that should be Global. Clients are configured
- * with the service blocks.
- */
- name = "Global"
-
- /*
- * If set, Services will send global messages on starting up and shutting
- * down/restarting.
- *
- * This directive is optional.
- */
- #globaloncycle = yes
-
- /*
- * This is the global message that will be sent when Services are being
- * shutdown/restarted. This directive is only required if you enable
- * globaloncycle above.
- */
- globaloncycledown = "Services are restarting, they will be back shortly - please be good while we're gone"
-
- /*
- * This is the global message that will be sent when Services (re)join the
- * network. This directive is only required if you enable globaloncycle above.
- */
- globaloncycleup = "Services are now back online - have a nice day"
-
- /*
- * If set, Services will hide the IRC operator's nick in a global
- * message/notice.
- *
- * This directive is optional.
- */
- #anonymousglobal = yes
+ type = "file"
+ name = "global.example.conf"
}
-module { name = "hs_main" }
-hostserv
+/*
+ * [OPTIONAL] HostServ
+ *
+ * Includes hostserv.example.conf, which is necessary for HostServ funcionality.
+ *
+ * Remove this block to disable HostServ.
+ */
+include
{
- /*
- * The name of the client that should be HostServ. Clients are configured
- * with the service blocks.
- */
- name = "HostServ"
+ type = "file"
+ name = "hostserv.example.conf"
}
-module { name = "ms_main" }
-memoserv
+/*
+ * [OPTIONAL] MemoServ
+ *
+ * Includes memoserv.example.conf, which is necessary for MemoServ funcionality.
+ *
+ * Remove this block to disable MemoServ.
+ */
+include
{
- /*
- * The name of the client that should be MemoServ. Clients are configured
- * with the service blocks.
- */
- name = "MemoServ"
-
- /*
- * The maximum number of memos a user is allowed to keep by default. Normal users may set the
- * limit anywhere between 0 and this value. Services Admins can change it to any value or
- * disable it.
- *
- * This directive is optional, but recommended. If not set, the limit is disabled
- * by default, and normal users can set any limit they want.
- */
- maxmemos = 20
-
- /*
- * The delay between consecutive uses of the MemoServ SEND command. This can help prevent spam
- * as well as denial-of-service attacks from sending large numbers of memos and filling up disk
- * space (and memory). The default 3-second wait means a maximum average of 150 bytes of memo
- * per second per user under the current IRC protocol.
- *
- * This directive is optional, but recommended.
- */
- senddelay = 3s
-
- /*
- * Allow the use of memo receipts for the following groups:
- *
- * 1 - Opers Only
- * 2 - Everybody
- *
- * This directive is optional.
- */
- #memoreceipt = 1
+ type = "file"
+ name = "memoserv.example.conf"
}
-module { name = "ns_main" }
-nickserv
+/*
+ * [OPTIONAL] NickServ
+ *
+ * Includes memoserv.example.conf, which is necessary for NickServ funcionality.
+ *
+ * Remove this block to disable NickServ.
+ */
+include
{
- /*
- * The name of the client that should be NickServ. Clients are configured
- * with the service blocks.
- */
- name = "NickServ"
-
- /*
- * Force users to give an e-mail address when they register a nick.
- *
- * This directive is recommended to be enabled, and required if e-mail registration is enabled.
- */
- forceemail = yes
-
- /*
- * Require users who change their email address to confirm they
- * own it.
- */
- confirmemailchanges = no
-
- /*
- * Require an e-mail to be sent to the user before they can register their nick.
- */
- #emailregistration = yes
-
- /*
- * The default options for newly registered nicks. Note that changing these options
- * will have no effect on nicks which are already registered. The list must be separated
- * by spaces.
- *
- * The options are:
- * - kill: Kill nick if not identified within 60 seconds
- * - killquick: Kill nick if not identified within 20 seconds, this one overrides the above
- * option and the above must be specified with this one
- * - secure: Enable nickname security, requiring the nick's password before any operations
- * can be done on it
- * - private: Hide the nick from NickServ's LIST command
- * - hideemail: Hide's the nick's e-mail address from NickServ's INFO command
- * - hideusermask: Hide's the nick's last or current user@host from NickServ's INFO command
- * - hidequit: Hide's the nick's last quit message
- * - memosignon: Notify user if they have a new memo when they sign into the nick
- * - memoreceive: Notify user if they have a new memo as soon as it's received
- * - autoop: User will be automatically opped in channels they enter and have access to
- * - msg: Services messages will be sent as PRIVMSGs instead of NOTICEs, requires UsePrivmsg
- * to be enabled as well
- *
- * This directive is optional, if left blank, the options will default to secure, memosignon, and
- * memoreceive. If you really want no defaults, use "none" by itself as the option.
- */
- defaults="secure private hideemail hideusermask memosignon memoreceive autoop"
-
- /*
- * A list of languages to load on startup that will be available in /nickserv set language.
- * Useful if you translate Anope to your language. (Explained further in docs/LANGUAGE).
- * Note that english should not be listed here because it is the base language.
- */
- languages = "ca_ES de_DE el_GR es_ES fr_FR hu_HU it_IT nl_NL pl_PL pt_PT ru_RU tr_TR"
-
- /*
- * Default language that non- and newly-registered nicks will receive messages in.
- * Leave empty to default to English.
- */
- #defaultlanguage = "es_ES"
-
- /*
- * The minimum length of time between consecutive uses of NickServ's REGISTER command. This
- * directive is optional, but recommended. If not set, this restriction will be disabled.
- */
- regdelay = 30s
-
- /*
- * The minimum length of time between consecutive uses of NickServ's RESEND command.
- *
- * This directive is optional, but recommended. If not set, this restriction will be disabled.
- */
- resenddelay = 90s
-
- /*
- * The length of time before a nick registration expires.
- *
- * This directive is optional, but recommended. If not set, the default is 21 days.
- */
- expire = 21d
-
- /*
- * The length of time before a suspended nick becomes unsuspended.
- *
- * This directive is optional. If not set, the default is to never.
- */
- #suspendexpire = 90d
-
- /*
- * The length of time a user using an unconfirmed account has
- * before the account will be released for general use again.
- *
- * This directive is only required if the e-mail registration option is enabled.
- */
- #unconfirmedexpire = 1d
-
- /*
- * The maximum number of nicks allowed in a group.
- *
- * This directive is optional, but recommended. If not set or set to 0, no limits will be applied.
- */
- maxaliases = 16
-
- /*
- * The maximum number of entries allowed on a nickname's access list.
- */
- accessmax = 32
-
- /*
- * The username (and possibly hostname) used for the fake user created when NickServ collides
- * a user. Should be in the user@host format.
- */
- enforceruser = "enforcer"
- enforcerhost = "localhost.net"
-
- /*
- * The delay before a NickServ collided nick is released.
- */
- releasetimeout = 1m
-
- /*
- * Allow the use of the IMMED option in the NickServ SET KILL command.
- *
- * This directive is optional.
- */
- #allowkillimmed = yes
-
- /*
- * If set, the NickServ GROUP command won't allow any group change. This is recommended for
- * better performance and to protect against nick stealing, however users will have less
- * flexibility.
- *
- * This directive is optional, but recommended.
- */
- #nogroupchange = yes
-
- /*
- * The maximum number of nicks to be returned for a NickServ LIST command.
- */
- listmax = 50
-
- /*
- * When a user's nick is forcibly changed to enforce a "nick kill", their new nick will start
- * with this value. The rest will be made up of 6 or 7 digits.
- */
- guestnickprefix = "Guest"
-
- /*
- * Prevents the use of the DROP, FORBID, GETPASS, and SET PASSWORD commands by Services Admins
- * on other Services Admins or the Services Root(s).
- *
- * This directive is optional, but recommended.
- */
- secureadmins = yes
-
- /*
- * If set, any user wanting to use the privileges of Services Root, Services Admin, or Services
- * Operator must have been logged as an IRC Operator with the /oper command.
- *
- * This directive is optional, but recommended.
- */
- strictprivileges = yes
-
- /*
- * If set, Services will set the channel modes a user has access to upon identifying, assuming
- * they are not already set.
- *
- * This directive is optional.
- */
- modeonid = yes
-
- /*
- * If set, Services will add the usermask of registering users to the access list of their
- * newly created account. If not set, users will always have to identify to NickServ before
- * being recognized, unless they manually add an address to the access list of their account.
- * This directive is optional.
- */
- addaccessonreg = yes
-
- /*
- * The maximum number of channels a user can have on NickServ's AJOIN command.
- */
- ajoinmax = 10
+ type = "file"
+ name = "nickserv.example.conf"
}
-module { name = "os_main" }
-operserv
+/*
+ * [RECOMMENDED] OperServ
+ *
+ * Includes operserv.example.conf, which is necessary for OperServ funcionality.
+ *
+ * Remove this block to disable OperServ.
+ */
+include
{
- /*
- * The name of the client that should be OperServ. Clients are configured
- * with the service blocks.
- */
- name = "OperServ"
-
- /*
- * If set, Services Admins will be able to use SUPERADMIN [ON|OFF] which will temporarily grant
- * them extra privileges such as being a founder on ALL channels, ability to adjust another
- * users' modes, etc.
- *
- * This directive is optional.
- */
- #superadmin = yes
-
- /*
- * These define the default expiration times for, respectively, AKILLs, CHANKILLs, SNLINEs,
- * SQLINEs, and SZLINEs.
- */
- autokillexpiry = 30d
- chankillexpiry = 30d
- snlineexpiry = 30d
- sqlineexpiry = 30d
- szlineexpiry = 30d
-
- /*
- * If set, this option will make Services send an AKILL command immediately after it has been
- * added with AKILL ADD. This eliminates the need for killing the user after the AKILL has
- * been added.
- *
- * This directive is optional, but recommended.
- */
- akillonadd = yes
-
- /*
- * If set, this option will make Services send an (SVS)KILL command immediately after SNLINE ADD.
- * This eliminates the need for killing the user after the SNLINE has been added.
- *
- *This directive is optional.
- */
- #killonsnline = yes
-
- /*
- * If set, this option will make Services send an (SVS)KILL command immediately after SQLINE ADD.
- * This eliminates the need for killing the user after the SQLINE has been added.
- *
- * This directive is optional.
- */
- #killonsqline = yes
-
- /*
- * Defines what actions should trigger notifications. The list must be separated by spaces.
- *
- * The notifications are:
- * - oper: A user has become an IRC operator
- * - bados: A non-IRCop attempts to use OperServ
- * - akillexpire: An AKILL has expired
- * - snlineexpire: An SNLINE has expired
- * - sqlineexpire: An SQLINE has expired
- * - szlineexpire: An SZLINE has expired
- * - exceptionexpire: A session exception has expired
- *
- * This directive is optional, if left blank, there will be no notifications.
- */
- notifications="oper"
-
- /*
- * Enables session limiting. Session limiting prevents users from connecting more than a certain
- * number of times from the same host at the same time - thus preventing most types of cloning.
- * Once a host reaches it's session limit, all clients attempting to connect from that host will
- * be killed. Exceptions to the default session limit can be defined via the exception list. It
- * should be noted that session limiting, along with a large exception list, can degrade Services'
- * performance.
- *
- * See the source and comments in sessions.c and the online help for more information about
- * session limiting.
- *
- * This directive is optional.
- */
- limitsessions = yes
-
- /*
- * Default session limit per host. Once a host reaches it's session limit, all clients attempting
- * to connect from that host will be killed. A value of zero means an unlimited session limit.
- *
- * This directive is optional.
- * If not given and session limiting is enabled, it will default to no limit.
- */
- defaultsessionlimit = 3
-
- /*
- * The maximum session limit that may be set for a host in an exception.
- *
- * This directive is only required if session limiting is enabled.
- */
- maxsessionlimit = 100
-
- /*
- * Sets the default expiry time for session exceptions.
- *
- * This directive is only required if session limiting is enabled.
- */
- exceptionexpiry = 1d
-
- /*
- * The message that will be NOTICE'd to a user just before they are removed from the network because
- * their host's session limit has been exceeded. It may be used to give a slightly more descriptive
- * reason for the impending kill as opposed to simply "Session limit exceeded".
- *
- * This directive is optional, if not set, nothing will be sent.
- */
- sessionlimitexceeded = "The session limit for your host %s has been exceeded."
-
- /*
- * Same as above, but should be used to provide a website address where users can find out more
- * about session limits and how to go about applying for an exception.
- *
- * Note: This directive has been intentionally commented out in an effort to remind you to change
- * the URL it contains. It is recommended that you supply an address/URL where people can get help
- * regarding session limits.
- *
- * This directive is optional, if not set, nothing will be sent.
- */
- #sessionlimitdetailsloc = "Please visit http://your.website.url/ for more information about session limits."
-
- /*
- * If set and is not 0, this directive tells Services to add an AKILL the number of subsequent kills
- * for the same host exceeds this value, preventing the network from experiencing KILL floods.
- *
- * This directive is optional.
- */
- maxsessionkill = 15
-
- /*
- * Sets the expiry time for AKILLs set for hosts exceeding the maxsessionkill directive limit.
- *
- * This directive is optional, if not set, defaults to 30 minutes.
- */
- sessionautokillexpiry = 30m
-
- /*
- * Adds the nickname of the IRC Operator issuing an AKILL to the kill reason.
- *
- * This directive is optional.
- */
- addakiller = yes
-
- /*
- * If set, only IRC Operators will be permitted to use OperServ, regardless of module-based command
- * access restrictions.
- *
- * This directive is optional, but recommended.
- */
- opersonly = yes
+ type = "file"
+ name = "operserv.example.conf"
}
/*
@@ -1609,6 +925,49 @@ dns
}
/*
+ * [REQUIRED] Database configuration.
+ *
+ * This section is used to configure databases used by Anope.
+ * You should at least load one database method, otherwise any data you
+ * have will not be stored!
+ */
+
+/*
+ * db_plain
+ *
+ * This is the default flatfile database format.
+ */
+module { name = "db_plain" }
+db_plain
+{
+ /*
+ * The database name db_plain should use
+ */
+ database = "anope.db"
+}
+
+/*
+ * db_mysql and db_mysql_live
+ *
+ * Enables (live) MySQL support.
+ *
+ * The db_mysql_live module is an extension to db_mysql, and should only be used if
+ * db_mysql is being used. This module pulls data in real time from SQL as it is
+ * requested by the core as a result of someone executing commands.
+ *
+ * This effectively allows you to edit your database and have it be immediately
+ * reflected back in Anope.
+ *
+ * For information on how to make db_mysql_live use asynchronous queries see
+ * m_async_commands.
+ *
+ * At this time db_mysql_live only supports pulling data in real time from the three
+ * main tables: anope_cs_info, anope_ns_alias, and anope_ns_core.
+ */
+#module { name = "db_mysql" }
+#module { name = "db_mysql_live" }
+
+/*
* [REQUIRED] Encryption modules.
*
* The encryption modules are used when dealing with passwords. This determines how
@@ -1653,34 +1012,10 @@ module { name = "enc_md5" }
*/
#module { name = "enc_old" }
-/*
- * [OPTIONAL] Additional includes
- *
- * You can include additional configuration files here.
- * You may also include executable files, which will be executed and
- * the output from it will be included into your configuration.
- */
-
-/* Include core commands */
-include
-{
- type = "file"
- name = "commands.example.conf"
-}
-
/* Extra (optional) modules */
include
{
- type = "file"
- name = "modules.example.conf"
+ type = "file"
+ name = "modules.example.conf"
}
-/*
-include
-{
- type = "executable"
- name = "/usr/bin/wget -q -O - http://some.miconfigured.network.com/services.conf"
-}
-*/
-
-
diff --git a/data/global.example.conf b/data/global.example.conf
new file mode 100644
index 000000000..5a3566e4e
--- /dev/null
+++ b/data/global.example.conf
@@ -0,0 +1,101 @@
+/*
+ * Example configuration file for Global.
+ */
+
+/*
+ * First, create the service.
+ */
+service
+{
+ /*
+ * The name of the Global client
+ */
+ nick = "Global"
+
+ /*
+ * The username of the Global client.
+ */
+ user = "services"
+
+ /*
+ * The hostname of the Global client.
+ */
+ host = "localhost.net"
+
+ /*
+ * The realname of the Global client.
+ */
+ gecos = "Global Noticer"
+}
+
+/*
+ * Core Global module.
+ *
+ * Provides essential functionality for Global.
+ */
+module { name = "gl_main" }
+
+/*
+ * Configuration for Global provided by gl_main.
+ */
+global
+{
+ /*
+ * The name of the client that should be Global.
+ */
+ name = "Global"
+
+ /*
+ * If set, Services will send global messages on starting up and shutting
+ * down/restarting.
+ *
+ * This directive is optional.
+ */
+ #globaloncycle = yes
+
+ /*
+ * This is the global message that will be sent when Services are being
+ * shutdown/restarted. This directive is only required if you enable
+ * globaloncycle above.
+ */
+ globaloncycledown = "Services are restarting, they will be back shortly - please be good while we're gone"
+
+ /*
+ * This is the global message that will be sent when Services (re)join the
+ * network. This directive is only required if you enable globaloncycle above.
+ */
+ globaloncycleup = "Services are now back online - have a nice day"
+
+ /*
+ * If set, Services will hide the IRC operator's nick in a global
+ * message/notice.
+ *
+ * This directive is optional.
+ */
+ #anonymousglobal = yes
+}
+
+/*
+ * Core Global commands.
+ *
+ * In Anope modules can provide (multiple) commands, each of which has a unique command name. Once these modules
+ * are loaded you can then configure the commands to be added to any client you like with any name you like.
+ *
+ * Additionally, you may provide a permission name that must be in the opertype of users executing the command.
+ *
+ * Sane defaults are provided below that do not need to be edited unless you wish to change the default behavior.
+ */
+
+/* Give it a help command */
+command { service = "Global"; name = "HELP"; command = "generic/help"; }
+
+/*
+ * gl_global
+ *
+ * Provides the command global/global.
+ *
+ * Used for sending a message to every online user.
+ */
+module { name = "gl_global" }
+command { service = "Global"; name = "GLOBAL"; command = "global/global"; permission = "global/global"; }
+
diff --git a/data/hostserv.example.conf b/data/hostserv.example.conf
new file mode 100644
index 000000000..0d04d764e
--- /dev/null
+++ b/data/hostserv.example.conf
@@ -0,0 +1,150 @@
+/*
+ * Example configuration file for HostServ.
+ */
+
+/*
+ * First, create the service.
+ */
+service
+{
+ /*
+ * The name of the HostServ client
+ */
+ nick = "HostServ"
+
+ /*
+ * The username of the HostServ client.
+ */
+ user = "services"
+
+ /*
+ * The hostname of the HostServ client.
+ */
+ host = "localhost.net"
+
+ /*
+ * The realname of the HostServ client.
+ */
+ gecos = "vHost Service"
+}
+
+/*
+ * Core HostServ module.
+ *
+ * Provides essential functionality for HostServ.
+ */
+module { name = "hs_main" }
+
+/*
+ * Configuration for HostServ provided by hs_main.
+ */
+hostserv
+{
+ /*
+ * The name of the client that should be HostServ.
+ */
+ name = "HostServ"
+}
+
+/*
+ * Core HostServ commands.
+ *
+ * In Anope modules can provide (multiple) commands, each of which has a unique command name. Once these modules
+ * are loaded you can then configure the commands to be added to any client you like with any name you like.
+ *
+ * Additionally, you may provide a permission name that must be in the opertype of users executing the command.
+ *
+ * Sane defaults are provided below that do not need to be edited unless you wish to change the default behavior.
+ */
+
+/* Give it a help command */
+command { service = "HostServ"; name = "HELP"; command = "generic/help"; }
+
+/*
+ * hs_del
+ *
+ * Provides the commands hostserv/del and hostserv/delall.
+ *
+ * Used for removing users vHosts.
+ */
+module { name = "hs_del" }
+command { service = "HostServ"; name = "DEL"; command = "hostserv/del"; permission = "hostserv/del"; }
+command { service = "HostServ"; name = "DELALL"; command = "hostserv/delall"; permission = "hostserv/del"; }
+
+/*
+ * hs_group
+ *
+ * Provides the command hostserv/group.
+ *
+ * Used for grouping one vHost to many nicks.
+ */
+module { name = "hs_group" }
+command { service = "HostServ"; name = "GROUP"; command = "hostserv/group"; }
+
+/*
+ * hs_list
+ *
+ * Provides the command hostserv/list.
+ *
+ * Used for listing actively set vHosts.
+ */
+module { name = "hs_list" }
+command { service = "HostServ"; name = "LIST"; command = "hostserv/list"; permission = "hostserv/list"; }
+
+/*
+ * hs_off
+ *
+ * Provides the command hostserv/off.
+ *
+ * Used for turning off your vHost.
+ */
+module { name = "hs_off" }
+command { service = "HostServ"; name = "OFF"; command = "hostserv/off"; }
+
+/*
+ * hs_on
+ *
+ * Provides the command hostserv/on.
+ *
+ * Used for turning on your vHost.
+ */
+module { name = "hs_on" }
+command { service = "HostServ"; name = "ON"; command = "hostserv/on"; }
+
+/*
+ * hs_request
+ *
+ * Provides the commands hostserv/request, hostserv/active, hostserv/reject, and hostserv/waiting.
+ *
+ * Used to manage vhosts requested by users.
+ */
+module { name = "hs_request" }
+command { service = "HostServ"; name = "REQUEST"; command = "hostserv/request"; }
+command { service = "HostServ"; name = "ACTIVATE"; command = "hostserv/activate"; }
+command { service = "HostServ"; name = "REJECT"; command = "hostserv/reject"; }
+command { service = "HostServ"; name = "WAITING"; command = "hostserv/waiting"; }
+hs_request
+{
+ /*
+ * If set, Services will send a memo to the user requesting a vHost when it's been
+ * approved or rejected.
+ */
+ #memouser = yes
+
+ /*
+ * If set, Services will send a memo to all Services staff when a new vHost is requested.
+ */
+ #memooper = yes
+}
+
+/*
+ * hs_set
+ *
+ * Provides the commands hostserv/set and hostserv/setall.
+ *
+ * Used for setting users vhosts.
+ */
+module { name = "hs_set" }
+command { service = "HostServ"; name = "SET"; command = "hostserv/set"; permission = "hostserv/set"; }
+command { service = "HostServ"; name = "SETALL"; command = "hostserv/setall"; permission = "hostserv/set"; }
+
diff --git a/data/memoserv.example.conf b/data/memoserv.example.conf
new file mode 100644
index 000000000..2ce15b5fe
--- /dev/null
+++ b/data/memoserv.example.conf
@@ -0,0 +1,215 @@
+/*
+ * Example configuration file for MemoServ.
+ */
+
+/*
+ * First, create the service.
+ */
+service
+{
+ /*
+ * The name of the MemoServ client
+ */
+ nick = "MemoServ"
+
+ /*
+ * The username of the MemoServ client.
+ */
+ user = "services"
+
+ /*
+ * The hostname of the MemoServ client.
+ */
+ host = "localhost.net"
+
+ /*
+ * The realname of the MemoServ client.
+ */
+ gecos = "Memo Service"
+}
+
+/*
+ * Core MemoServ module.
+ *
+ * Provides essential functionality for MemoServ.
+ */
+module { name = "ms_main" }
+
+/*
+ * Configuration for MemoServ provided by ms_main.
+ */
+memoserv
+{
+ /*
+ * The name of the client that should be MemoServ. Clients are configured
+ * with the service blocks.
+ */
+ name = "MemoServ"
+
+ /*
+ * The maximum number of memos a user is allowed to keep by default. Normal users may set the
+ * limit anywhere between 0 and this value. Services Admins can change it to any value or
+ * disable it.
+ *
+ * This directive is optional, but recommended. If not set, the limit is disabled
+ * by default, and normal users can set any limit they want.
+ */
+ maxmemos = 20
+
+ /*
+ * The delay between consecutive uses of the MemoServ SEND command. This can help prevent spam
+ * as well as denial-of-service attacks from sending large numbers of memos and filling up disk
+ * space (and memory). The default 3-second wait means a maximum average of 150 bytes of memo
+ * per second per user under the current IRC protocol.
+ *
+ * This directive is optional, but recommended.
+ */
+ senddelay = 3s
+
+ /*
+ * Allow the use of memo receipts for the following groups:
+ *
+ * 1 - Opers Only
+ * 2 - Everybody
+ *
+ * This directive is optional.
+ */
+ #memoreceipt = 1
+}
+
+/*
+ * Core MemoServ commands.
+ *
+ * In Anope modules can provide (multiple) commands, each of which has a unique command name. Once these modules
+ * are loaded you can then configure the commands to be added to any client you like with any name you like.
+ *
+ * Additionally, you may provide a permission name that must be in the opertype of users executing the command.
+ *
+ * Sane defaults are provided below that do not need to be edited unless you wish to change the default behavior.
+ */
+
+/* Give it a help command */
+command { service = "MemoServ"; name = "HELP"; command = "generic/help"; }
+
+/*
+ * ms_cancel
+ *
+ * Provides the command memoserv/cancel.
+ *
+ * Used to cancel memos already sent but not yet read.
+ */
+module { name = "ms_cancel" }
+command { service = "MemoServ"; name = "CANCEL"; command = "memoserv/cancel"; }
+
+/*
+ * ms_check
+ *
+ * Provides the command memoserv/check.
+ *
+ * Used to check if a sent memo has been read.
+ */
+module { name = "ms_check" }
+command { service = "MemoServ"; name = "CHECK"; command = "memoserv/check"; }
+
+/*
+ * ms_del
+ *
+ * Provides the command memoserv/del.
+ *
+ * Used to delete your memos.
+ */
+module { name = "ms_del" }
+command { service = "MemoServ"; name = "DEL"; command = "memoserv/del"; }
+
+/*
+ * ms_ignore
+ *
+ * Provides the command memoserv/ignore.
+ *
+ * Used to ignore memos from specific users.
+ */
+module { name = "ms_ignore" }
+command { service = "MemoServ"; name = "IGNORE"; command = "memoserv/ignore"; }
+
+/*
+ * ms_info
+ *
+ * Provides the command memoserv/info.
+ *
+ * Used to show memo related information about an account or a channel.
+ */
+module { name = "ms_info" }
+command { service = "MemoServ"; name = "INFO"; command = "memoserv/info"; }
+
+/*
+ * ms_list
+ *
+ * Provides the command memoserv/list.
+ *
+ * Used to list your current memos.
+ */
+module { name = "ms_list" }
+command { service = "MemoServ"; name = "LIST"; command = "memoserv/list"; }
+
+/*
+ * ms_read
+ *
+ * Provides the command memoserv/read.
+ *
+ * Used to read your memos.
+ */
+module { name = "ms_read" }
+command { service = "MemoServ"; name = "READ"; command = "memoserv/read"; }
+
+/*
+ * ms_rsend
+ *
+ * Provides the command memoserv/rsend.
+ *
+ * Used to send a memo requiring a receipt be sent back once it is read.
+ *
+ * Requires configuring memoserv:memoreceipt.
+ */
+#module { name = "ms_rsend" }
+#command { service = "MemoServ"; name = "RSEND"; command = "memoserv/rsend"; }
+
+/*
+ * ms_send
+ *
+ * Provides the command memoserv/send
+ *
+ * Used to send memos.
+ */
+module { name = "ms_send" }
+command { service = "MemoServ"; name = "SEND"; command = "memoserv/send"; }
+
+/*
+ * ms_sendlal
+ *
+ * Provides the command memoserv/sendall
+ *
+ * Used to send a mass memo to every registered user.
+ */
+module { name = "ms_sendall" }
+command { service = "MemoServ"; name = "SENDALL"; command = "memoserv/sendall"; permission = "memoserv/sendall"; }
+
+/*
+ * ms_set
+ *
+ * Provides the command memoserv/set.
+ *
+ * Used to set settings such as how you are notified of new memos, and your memo limit.
+ */
+module { name = "ms_set" }
+command { service = "MemoServ"; name = "SET"; command = "memoserv/set"; }
+
+/*
+ * ms_staff
+ *
+ * Provides the command memoserv/staff.
+ *
+ * Used to send a memo to all registered staff members.
+ */
+module { name = "ms_staff" }
+command { service = "MemoServ"; name = "STAFF"; command = "memoserv/staff"; permission = "memoserv/staff"; }
+
diff --git a/data/modules.example.conf b/data/modules.example.conf
index 4a492bfda..8ee15877e 100644
--- a/data/modules.example.conf
+++ b/data/modules.example.conf
@@ -8,129 +8,13 @@
*/
/*
- * bs_autoassign
+ * help
*
- * Allows service bots to be automatically assigned to channels upon registration.
- */
-#module { name = "bs_autoassign" }
-bs_autoassign
-{
- /*
- * Automatically assign ChanServ to channels upon registration.
- */
- bot = "ChanServ"
-}
-
-/*
- * cs_appendtopic
+ * Provides commands generic/help
*
- * Adds the APPENDTOPIC command to ChanServ, which allows users to easially append text to
- * the end of existing channel topics.
+ * Is a generic help command that can be used with any client.
*/
-module { name = "cs_appendtopic" }
-command { service = "ChanServ"; name = "APPENDTOPIC"; command = "chanserv/appendtopic"; }
-
-/*
- * cs_enforce
- *
- * Adds the ENFORCE commad to ChanServ, which allows enforcing various channel settings like
- * SECUREOPS and RESTRICTED.
- */
-module { name = "cs_enforce" }
-command { service = "ChanServ"; name = "ENFORCE"; command = "chanserv/enforce"; }
-
-/*
- * cs_entrymsg
- *
- * Allows you to set entry messages on your channel, which are shown to anyone
- * who joins.
- */
-module { name = "cs_entrymsg" }
-command { service = "ChanServ"; name = "ENTRYMSG"; command = "chanserv/entrymsg"; }
-cs_entrymsg
-{
- /* The maximum number of entrymsgs allowed per channel. If not set, defaults to 5. */
- maxentries = 5
-}
-
-/*
- * cs_set_misc
- *
- * Allows you to create misc /chanserv set commands, and have the data
- * show up in /chanserv info.
- */
-module { name = "cs_set_misc" }
-command { service = "ChanServ"; name = "SET URL"; command = "chanserv/set/misc"; }
-command { service = "ChanServ"; name = "SET EMAIL"; command = "chanserv/set/misc"; }
-
-/*
- * cs_sync
- *
- * Adds the chanserv/sync command, which syncs users channel status modes on a channel
- * with their access level.
-*/
-#module { name = "cs_sync" }
-#command { service = "ChanServ"; name = "SYNC"; command = "chanserv/sync"; }
-
-/*
- * db_plain
- *
- * This is the default flatfile database format. You must have at least one database
- * module loaded or Anope will not save databases!
- */
-module { name = "db_plain" }
-db_plain
-{
- /*
- * The database db_plain should use
- */
- database = "anope.db"
-}
-
-/*
- * db_mysql and db_mysql_live
- *
- * Enables (live) MySQL support.
- *
- * The db_mysql_live module is an extension to db_mysql, and should only be used if
- * db_mysql is being used. This module pulls data in real time from SQL as it is
- * requested by the core as a result of someone executing commands.
- *
- * This effectively allows you to edit your database and have it be immediately
- * reflected back in Anope.
- *
- * For information on how to make db_mysql_live use asynchronous queries see
- * m_async_commands.
- *
- * At this time db_mysql_live only supports pulling data in real time from the three
- * main tables: anope_cs_info, anope_ns_alias, and anope_ns_core.
- */
-#module { name = "db_mysql" }
-#module { name = "db_mysql_live" }
-
-/*
- * hs_request
- *
- * Allows users to request vhosts which opers may then view, accept or deny
- */
-module { name = "hs_request" }
-command { service = "HostServ"; name = "REQUEST"; command = "hostserv/request"; }
-command { service = "HostServ"; name = "ACTIVATE"; command = "hostserv/activate"; }
-command { service = "HostServ"; name = "REJECT"; command = "hostserv/reject"; }
-command { service = "HostServ"; name = "WAITING"; command = "hostserv/waiting"; }
-hs_request
-{
- /*
- * If set, Services will send a memo to the user requesting a vHost when it's been
- * approved or rejected.
- */
- #memouser = yes
-
- /*
- * If set, Services will send a memo to all Services staff when a new vHost is requested.
- */
- #memooper = yes
-}
+module { name = "help" }
/*
* m_async_commands
@@ -403,118 +287,3 @@ ns_maxemail
#maxemails = 1
}
-/*
- * ns_set_misc
- *
- * Allows you to create misc /nickserv set commands, and have the data
- * show up in /nickserv info.
- */
-module { name = "ns_set_misc" }
-command { service = "NickServ"; name = "SET URL"; command = "nickserv/set/misc"; }
-command { service = "NickServ"; name = "SET ICQ"; command = "nickserv/set/misc"; }
-
-/*
- * os_defcon
- *
- * Allows you to set services in defcon mode, which can be used to restrict services access
- * during bot attacks.
- */
-#module { name = "os_defcon" }
-command { service = "OperServ"; name = "DEFCON"; command = "operserv/defcon"; }
-defcon
-{
- /*
- * Default DefCon level (1-5) to use when starting Services up. Level 5 constitutes normal operation
- * while level 1 constitutes the most restrictive operation. If this setting is left out or set to
- * 0, DefCon will be disabled and the rest of this block will be ignored.
- */
- #defaultlevel = 5
-
- /*
- * The following 4 directives define what operations will take place when DefCon is set to levels
- * 1 through 4. Each level is a list that must be separated by spaces.
- *
- * The following operations can be defined at each level:
- * - nonewchannels: Disables registering new channels
- * - nonewnicks: Disables registering new nicks
- * - nomlockchanges: Disables changing MLOCK on registered channels
- * - forcechanmodes: Forces all channels to have the modes given in the later chanmodes directive
- * - reducedsessions: Reduces the session limit to the value given in the later sessionlimit directive
- * - nonewclients: KILL any new clients trying to connect
- * - operonly: Services will ignore all non-IRCops
- * - silentoperonly: Services will silently ignore all non-IRCops
- * - akillnewclients: AKILL any new clients trying to connect
- * - nonewmemos: No new memos will be sent to block MemoServ attacks
- */
- level4 = "nonewchannels nonewnicks nomlockchanges reducedsessions"
- level3 = "nonewchannels nonewnicks nomlockchanges forcechanmodes reducedsessions"
- level2 = "nonewchannels nonewnicks nomlockchanges forcechanmodes reducedsessions silentoperonly"
- level1 = "nonewchannels nonewnicks nomlockchanges forcechanmodes reducedsessions silentoperonly akillnewclients"
-
- /*
- * New session limit to use when a DefCon level is using "reduced" session limiting.
- */
- #sessionlimit = 2
-
- /*
- * Length of time to add an AKILL for when DefCon is preventing new clients from connecting to the
- * network.
- */
- #akillexpire = 5m
-
- /*
- * The channel modes to set on all channels when the DefCon channel mode system is in use.
- *
- * Note 1: Choose these modes carefully, because when DefCon switches to a level which does NOT have
- * the mode setting selected, Services will set the reverse on all channels, e.g. if this setting
- * is +RN when DefCon is used, all channels will be set to +RN, when DefCon is removed, all
- * channels will be set to -RN. You don't want to set this to +k for example, because when DefCon
- * is removed all channels with -k.
- *
- * Note 2: MLOCKed modes will not be lost.
- */
- #chanmodes = "+R"
-
- /*
- * This value can be used to automatically return the network to DefCon level 5 after the specified
- * time period, just in case any IRC Operator forgets to remove a DefCon setting.
- *
- * This directive is optional.
- */
- #timeout = 15m
-
- /*
- * If set, Services will send a global message on DefCon level changes.
- *
- * This directive is optional.
- */
- #globalondefcon = yes
-
- /*
- * If set, Services will send the global message defined in the message directive on DefCon level
- * changes.
- *
- * This directive is optional.
- */
- #globalondefconmore = yes
-
- /*
- * Defines the message that will be sent on DefCon level changes when globalondefconmore is set.
- *
- * This directive is required only when globalondefconmore is set.
- */
- #message = "Put your message to send your users here. Dont forget to uncomment globalondefconmore"
-
- /*
- * Defines the message that will be sent when DefCon is returned to level 5. This directive is optional,
- * and will also override globalondefcon and globalondefconmore when set.
- */
- #offmessage = "Services are now back to normal, sorry for any inconvenience"
-
- /*
- * Defines the reason to use when clients are KILLed or AKILLed from the network while the proper
- * DefCon operation is in effect.
- */
- #akillreason = "This network is currently not accepting connections, please try again later"
-}
-
diff --git a/data/nickserv.example.conf b/data/nickserv.example.conf
new file mode 100644
index 000000000..5f9ff769d
--- /dev/null
+++ b/data/nickserv.example.conf
@@ -0,0 +1,606 @@
+/*
+ * Example configuration file for NickServ.
+ */
+
+/*
+ * First, create the service.
+ */
+service
+{
+ /*
+ * The name of the NickServ client
+ */
+ nick = "NickServ"
+
+ /*
+ * The username of the NickServ client.
+ */
+ user = "services"
+
+ /*
+ * The hostname of the NickServ client.
+ */
+ host = "localhost.net"
+
+ /*
+ * The realname of the NickServ client.
+ */
+ gecos = "Nickname Registration Service"
+}
+
+/*
+ * Core NickServ module.
+ *
+ * Provides essential functionality for NickServ.
+ */
+module { name = "ns_main" }
+
+/*
+ * Configuration for NickServ provided by ns_main.
+ */
+nickserv
+{
+ /*
+ * The name of the client that should be NickServ.
+ */
+ name = "NickServ"
+
+ /*
+ * Force users to give an e-mail address when they register a nick.
+ *
+ * This directive is recommended to be enabled, and required if e-mail registration is enabled.
+ */
+ forceemail = yes
+
+ /*
+ * Require users who change their email address to confirm they
+ * own it.
+ */
+ confirmemailchanges = no
+
+ /*
+ * Require an e-mail to be sent to the user before they can register their nick.
+ */
+ #emailregistration = yes
+
+ /*
+ * The default options for newly registered nicks. Note that changing these options
+ * will have no effect on nicks which are already registered. The list must be separated
+ * by spaces.
+ *
+ * The options are:
+ * - kill: Kill nick if not identified within 60 seconds
+ * - killquick: Kill nick if not identified within 20 seconds, this one overrides the above
+ * option and the above must be specified with this one
+ * - secure: Enable nickname security, requiring the nick's password before any operations
+ * can be done on it
+ * - private: Hide the nick from NickServ's LIST command
+ * - hideemail: Hide's the nick's e-mail address from NickServ's INFO command
+ * - hideusermask: Hide's the nick's last or current user@host from NickServ's INFO command
+ * - hidequit: Hide's the nick's last quit message
+ * - memosignon: Notify user if they have a new memo when they sign into the nick
+ * - memoreceive: Notify user if they have a new memo as soon as it's received
+ * - autoop: User will be automatically opped in channels they enter and have access to
+ * - msg: Services messages will be sent as PRIVMSGs instead of NOTICEs, requires UsePrivmsg
+ * to be enabled as well
+ *
+ * This directive is optional, if left blank, the options will default to secure, memosignon, and
+ * memoreceive. If you really want no defaults, use "none" by itself as the option.
+ */
+ defaults="secure private hideemail hideusermask memosignon memoreceive autoop"
+
+ /*
+ * A list of languages to load on startup that will be available in /nickserv set language.
+ * Useful if you translate Anope to your language. (Explained further in docs/LANGUAGE).
+ * Note that english should not be listed here because it is the base language.
+ */
+ languages = "ca_ES de_DE el_GR es_ES fr_FR hu_HU it_IT nl_NL pl_PL pt_PT ru_RU tr_TR"
+
+ /*
+ * Default language that non- and newly-registered nicks will receive messages in.
+ * Leave empty to default to English.
+ */
+ #defaultlanguage = "es_ES"
+
+ /*
+ * The minimum length of time between consecutive uses of NickServ's REGISTER command. This
+ * directive is optional, but recommended. If not set, this restriction will be disabled.
+ */
+ regdelay = 30s
+
+ /*
+ * The minimum length of time between consecutive uses of NickServ's RESEND command.
+ *
+ * This directive is optional, but recommended. If not set, this restriction will be disabled.
+ */
+ resenddelay = 90s
+
+ /*
+ * The length of time before a nick registration expires.
+ *
+ * This directive is optional, but recommended. If not set, the default is 21 days.
+ */
+ expire = 21d
+
+ /*
+ * The length of time before a suspended nick becomes unsuspended.
+ *
+ * This directive is optional. If not set, the default is to never.
+ */
+ #suspendexpire = 90d
+
+ /*
+ * The length of time a user using an unconfirmed account has
+ * before the account will be released for general use again.
+ *
+ * This directive is only required if the e-mail registration option is enabled.
+ */
+ #unconfirmedexpire = 1d
+
+ /*
+ * The maximum number of nicks allowed in a group.
+ *
+ * This directive is optional, but recommended. If not set or set to 0, no limits will be applied.
+ */
+ maxaliases = 16
+
+ /*
+ * The maximum number of entries allowed on a nickname's access list.
+ */
+ accessmax = 32
+
+ /*
+ * The username (and possibly hostname) used for the fake user created when NickServ collides
+ * a user. Should be in the user@host format.
+ */
+ enforceruser = "enforcer"
+ enforcerhost = "localhost.net"
+
+ /*
+ * The delay before a NickServ collided nick is released.
+ */
+ releasetimeout = 1m
+
+ /*
+ * Allow the use of the IMMED option in the NickServ SET KILL command.
+ *
+ * This directive is optional.
+ */
+ #allowkillimmed = yes
+
+ /*
+ * If set, the NickServ GROUP command won't allow any group change. This is recommended for
+ * better performance and to protect against nick stealing, however users will have less
+ * flexibility.
+ *
+ * This directive is optional, but recommended.
+ */
+ #nogroupchange = yes
+
+ /*
+ * The maximum number of nicks to be returned for a NickServ LIST command.
+ */
+ listmax = 50
+
+ /*
+ * When a user's nick is forcibly changed to enforce a "nick kill", their new nick will start
+ * with this value. The rest will be made up of 6 or 7 digits.
+ */
+ guestnickprefix = "Guest"
+
+ /*
+ * Prevents the use of the DROP, FORBID, GETPASS, and SET PASSWORD commands by Services Admins
+ * on other Services Admins or the Services Root(s).
+ *
+ * This directive is optional, but recommended.
+ */
+ secureadmins = yes
+
+ /*
+ * If set, any user wanting to use the privileges of Services Root, Services Admin, or Services
+ * Operator must have been logged as an IRC Operator with the /oper command.
+ *
+ * This directive is optional, but recommended.
+ */
+ strictprivileges = yes
+
+ /*
+ * If set, Services will set the channel modes a user has access to upon identifying, assuming
+ * they are not already set.
+ *
+ * This directive is optional.
+ */
+ modeonid = yes
+
+ /*
+ * If set, Services will add the usermask of registering users to the access list of their
+ * newly created account. If not set, users will always have to identify to NickServ before
+ * being recognized, unless they manually add an address to the access list of their account.
+ * This directive is optional.
+ */
+ addaccessonreg = yes
+
+ /*
+ * The maximum number of channels a user can have on NickServ's AJOIN command.
+ */
+ ajoinmax = 10
+}
+
+/*
+ * Core NickServ commands.
+ *
+ * In Anope modules can provide (multiple) commands, each of which has a unique command name. Once these modules
+ * are loaded you can then configure the commands to be added to any client you like with any name you like.
+ *
+ * Additionally, you may provide a permission name that must be in the opertype of users executing the command.
+ *
+ * Sane defaults are provided below that do not need to be edited unless you wish to change the default behavior.
+ */
+
+/* Give it a help command */
+command { service = "NickServ"; name = "HELP"; command = "generic/help"; }
+
+/*
+ * ns_access
+ *
+ * Provides the command nickserv/access.
+ *
+ * Used for configuring what hosts have access to your account.
+ */
+module { name = "ns_access" }
+command { service = "NickServ"; name = "ACCESS"; command = "nickserv/access"; }
+
+/*
+ * ns_ajoin
+ *
+ * Provides the command nickserv/ajoin.
+ *
+ * Used for configuring channels to join once you identify.
+ */
+module { name = "ns_ajoin" }
+command { service = "NickServ"; name = "AJOIN"; command = "nickserv/ajoin"; }
+
+/*
+ * ns_alist
+ *
+ * Provides the command nickserv/alist.
+ *
+ * Used for viewing what channels you have access to.
+ */
+module { name = "ns_alist" }
+command { service = "NickServ"; name = "ALIST"; command = "nickserv/alist"; }
+
+/*
+ * ns_cert
+ *
+ * Provides the command nickserv/cert.
+ *
+ * Used for configuring your SSL certificate list, which can be used to automatically identify you.
+ */
+module { name = "ns_cert" }
+command { service = "NickServ"; name = "CERT"; command = "nickserv/cert"; }
+
+/*
+ * ns_drop
+ *
+ * Provides the command nickserv/drop.
+ *
+ * Used for unregistering names.
+ */
+module { name = "ns_drop" }
+command { service = "NickServ"; name = "DROP"; command = "nickserv/drop"; }
+
+/*
+ * ns_getemail
+ *
+ * Provides the command nickserv/getemail.
+ *
+ * Used for getting registered accounts by searching for emails.
+ */
+module { name = "ns_getemail" }
+command { service = "NickServ"; name = "GETEMAIL"; command = "nickserv/getemail"; permission = "nickserv/getemail"; }
+
+/*
+ * ns_getpass
+ *
+ * Provides the command nickserv/getpass.
+ *
+ * Used for getting users passwords.
+ *
+ * Requires no encryption is being used.
+ */
+#module { name = "ns_getpass" }
+#command { service = "NickServ"; name = "GETPASS"; command = "nickserv/getpass"; permission = "nickserv/getpass"; }
+
+/*
+ * ns_ghost
+ *
+ * Provides the command nickserv/ghost.
+ *
+ * Used for disconnecting "ghost" sessions.
+ */
+module { name = "ns_ghost" }
+command { service = "NickServ"; name = "GHOST"; command = "nickserv/ghost"; }
+
+/*
+ * ns_group
+ *
+ * Provides the commands nickserv/group, nickserv/glist, and nickserv/ungroup.
+ *
+ * Used for controlling nick groups.
+ */
+module { name = "ns_group" }
+command { service = "NickServ"; name = "GLIST"; command = "nickserv/glist"; }
+command { service = "NickServ"; name = "GROUP"; command = "nickserv/group"; }
+command { service = "NickServ"; name = "UNGROUP"; command = "nickserv/ungroup"; }
+
+/*
+ * ns_identify
+ *
+ * Provides the command nickserv/identify.
+ *
+ * Used for identifying to accounts.
+ */
+module { name = "ns_identify" }
+command { service = "NickServ"; name = "ID"; command = "nickserv/identify"; }
+command { service = "NickServ"; name = "IDENTIFY"; command = "nickserv/identify"; }
+
+/*
+ * ns_info
+ *
+ * Provides the command nickserv/info.
+ *
+ * Used for gathering information about an account.
+ */
+module { name = "ns_info" }
+command { service = "NickServ"; name = "INFO"; command = "nickserv/info"; }
+
+/*
+ * ns_list
+ *
+ * Provides the command nickserv/list.
+ *
+ * Used for retrieving and searching the registered account list.
+ */
+module { name = "ns_list" }
+command { service = "NickServ"; name = "LIST"; command = "nickserv/list"; }
+
+/*
+ * ns_logout
+ *
+ * Provides the command nickserv/logout.
+ *
+ * Used for logging out of your account.
+ */
+module { name = "ns_logout" }
+command { service = "NickServ"; name = "LOGOUT"; command = "nickserv/logout"; }
+
+/*
+ * ns_recover
+ *
+ * Provides the command nickserv/recover.
+ *
+ * Used for forcing someone on your nick to a guest nick.
+ */
+module { name = "ns_recover" }
+command { service = "NickServ"; name = "RECOVER"; command = "nickserv/recover"; }
+
+/*
+ * ns_register
+ *
+ * Provides the commands nickserv/confirm, nickserv/register, and nickserv/resend.
+ *
+ * Used for registering accounts.
+ */
+module { name = "ns_register" }
+command { service = "NickServ"; name = "CONFIRM"; command = "nickserv/confirm"; }
+command { service = "NickServ"; name = "REGISTER"; command = "nickserv/register"; }
+command { service = "NickServ"; name = "RESEND"; command = "nickserv/resend"; }
+
+/*
+ * ns_release
+ *
+ * Provides the command nickserv/release.
+ *
+ * Used for releasing names held by nickserv/recover.
+ */
+module { name = "ns_release" }
+command { service = "NickServ"; name = "RELEASE"; command = "nickserv/release"; }
+
+/*
+ * ns_resetpass
+ *
+ * Provides the command nickserv/resetpass.
+ *
+ * Used for resetting passwords by emailing users a temporary one.
+ */
+module { name = "ns_resetpass" }
+command { service = "NickServ"; name = "RESETPASS"; command = "nickserv/resetpass"; }
+
+/*
+ * ns_saset
+ *
+ * Provides commands nickserv/saset, nickserv/saset/display, and nickserv/saset/password.
+ *
+ * Used as a help wrapper for SASET commands, and used to force change users display name or password.
+ */
+module { name = "ns_saset" }
+command { service = "NickServ"; name = "SASET"; command = "nickserv/saset"; }
+command { service = "NickServ"; name = "SASET DISPLAY"; command = "nickserv/saset/display"; }
+command { service = "NickServ"; name = "SASET PASSWORD"; command = "nickserv/saset/password"; }
+
+/*
+ * ns_set
+ *
+ * Provides the commands nickserv/set, nickserv/set/display, and nickserv/set/password.
+ *
+ * Used as a help wrapper for SET commands, and used for users to change their display name or password.
+ */
+module { name = "ns_set" }
+command { service = "NickServ"; name = "SET"; command = "nickserv/set"; }
+command { service = "NickServ"; name = "SET DISPLAY"; command = "nickserv/set/display"; }
+command { service = "NickServ"; name = "SET PASSWORD"; command = "nickserv/set/password"; }
+
+/*
+ * ns_set_autoop
+ *
+ * Provides the commands nickserv/set/autoop and nickserv/saset/autoop.
+ *
+ * Used for setting autoop, which determines whether or not modes are automatically set on you when joining a channel.
+ */
+module { name = "ns_set_autoop" }
+command { service = "NickServ"; name = "SET AUTOOP"; command = "nickserv/set/autoop"; }
+command { service = "NickServ"; name = "SASET AUTOOP"; command = "nickserv/saset/autoop"; permission = "nickserv/saset/autoop"; }
+
+/*
+ * ns_set_email
+ *
+ * Provides the commands nickserv/set/email and nickserv/saset/email.
+ *
+ * Used for setting users email addresses.
+ */
+module { name = "ns_set_email" }
+command { service = "NickServ"; name = "SET EMAIL"; command = "nickserv/set/email"; }
+command { service = "NickServ"; name = "SASET EMAIL"; command = "nickserv/saset/email"; permission = "nickserv/saset/email"; }
+
+/*
+ * ns_set_greet
+ *
+ * Provides the commands nickserv/set/greet and nickserv/saset/greet.
+ *
+ * Used for changing users greet message, which is displayed when they enter channels.
+ */
+module { name = "ns_set_greet" }
+command { service = "NickServ"; name = "SET GREET"; command = "nickserv/set/greet"; }
+command { service = "NickServ"; name = "SASET GREET"; command = "nickserv/saset/greet"; permission = "nickserv/saset/greet"; }
+
+/*
+ * ns_set_hide
+ *
+ * Provides the commands nickserv/set/hide and nickserv/saset/hide.
+ *
+ * Used for configuring which options are publically shown in nickserv/info for your account.
+ */
+module { name = "ns_set_hide" }
+command { service = "NickServ"; name = "SET HIDE"; command = "nickserv/set/hide"; }
+command { service = "NickServ"; name = "SASET HIDE"; command = "nickserv/saset/hide"; permission = "nickserv/saset/hide"; }
+
+/*
+ * ns_set_kill
+ *
+ * Provides the commands nickserv/set/kill and nickserv/saset/kill.
+ *
+ * Used for configuring if and for how long other users are allowed to use your nick.
+ */
+module { name = "ns_set_kill" }
+command { service = "NickServ"; name = "SET KILL"; command = "nickserv/set/kill"; }
+command { service = "NickServ"; name = "SASET KILL"; command = "nickserv/saset/kill"; permission = "nickserv/saset/kill"; }
+
+/*
+ * ns_set_language
+ *
+ * Provides the commands nickserv/set/language and nickserv/saset/language.
+ *
+ * Used for configuring what language services use when messaging you.
+ */
+module { name = "ns_set_language" }
+command { service = "NickServ"; name = "SET LANGUAGE"; command = "nickserv/set/language"; }
+command { service = "NickServ"; name = "SASET LANGUAGE"; command = "nickserv/saset/language"; permission = "nickserv/saset/language"; }
+
+/*
+ * ns_set_message
+ *
+ * Provides the commands nickserv/set/message and nickserv/saset/message.
+ *
+ * Used to configure how services send messages to you.
+ */
+module { name = "ns_set_message" }
+command { service = "NickServ"; name = "SET MESSAGE"; command = "nickserv/set/message"; }
+command { service = "NickServ"; name = "SASET MESSAGE"; command = "nickserv/saset/message"; permission = "nickserv/saset/message"; }
+
+/*
+ * ns_set_private
+ *
+ * Provides the commands nickserv/set/private and nickserv/saset/private.
+ *
+ * Used for configuring whether or not your account shows up in nickserv/list.
+ */
+module { name = "ns_set_private" }
+command { service = "NickServ"; name = "SET PRIVATE"; command = "nickserv/set/private"; }
+command { service = "NickServ"; name = "SASET PRIVATE"; command = "nickserv/saset/private"; permission = "nickserv/saset/private"; }
+
+/*
+ * ns_set_secure
+ *
+ * Provides the commands nickserv/set/secure and nickserv/saset/secure.
+ *
+ * Used for configuring whether you can gain access to your nick by simply being recognized by nickserv/access.
+ */
+module { name = "ns_set_secure" }
+command { service = "NickServ"; name = "SET SECURE"; command = "nickserv/set/secure"; }
+command { service = "NickServ"; name = "SASET SECURE"; command = "nickserv/saset/secure"; permission = "nickserv/saset/secure"; }
+
+/*
+ * ns_saset_noexpire
+ *
+ * Provides the command nickserv/saset/noexpire.
+ *
+ * Used for configuring noexpire, which prevents nicks from expiring.
+ */
+module { name = "ns_saset_noexpire" }
+command { service = "NickServ"; name = "SASET NOEXPIRE"; command = "nickserv/saset/noexpire"; permission = "nickserv/saset/noexpire" }
+
+/*
+ * ns_sendpass
+ *
+ * Provides the command nickserv/sendpass.
+ *
+ * Used to send users their password via email.
+ *
+ * Requires that no encryption is being used.
+ */
+module { name = "ns_sendpass" }
+command { service = "NickServ"; name = "SENDPASS"; command = "nickserv/sendpass"; permission = "nickserv/sendpass"; }
+
+/*
+ * ns_set_misc
+ *
+ * Provides the command nickserv/set/misc.
+ *
+ * Allows you to create arbitrary commands to set data, and have that data show up in nickserv/info.
+ */
+module { name = "ns_set_misc" }
+command { service = "NickServ"; name = "SET URL"; command = "nickserv/set/misc"; }
+command { service = "NickServ"; name = "SET ICQ"; command = "nickserv/set/misc"; }
+
+/*
+ * ns_status
+ *
+ * Provides the nickserv/status command.
+ *
+ * Used to determine if a user is recognized or identified by services.
+ */
+module { name = "ns_status" }
+command { service = "NickServ"; name = "STATUS"; command = "nickserv/status"; }
+
+/*
+ * ns_suspend
+ *
+ * Provides the commands nickserv/suspend and nickserv/unsuspend.
+ *
+ * Used to suspend and unsuspend nicknames. Suspended nicknames can not be used but their settings are stored.
+ */
+module { name = "ns_suspend" }
+command { service = "NickServ"; name = "SUSPEND"; command = "nickserv/suspend"; permission = "nickserv/suspend"; }
+command { service = "NickServ"; name = "UNSUSPEND"; command = "nickserv/unsuspend"; permission = "nickserv/suspend"; }
+
+/*
+ * ns_update
+ *
+ * Provides the command nickserv/update.
+ *
+ * Used to update your status on all channels, turn on your vHost, etc.
+ */
+module { name = "ns_update" }
+command { service = "NickServ"; name = "UPDATE"; command = "nickserv/update"; }
+
diff --git a/data/operserv.example.conf b/data/operserv.example.conf
new file mode 100644
index 000000000..48d6c4b42
--- /dev/null
+++ b/data/operserv.example.conf
@@ -0,0 +1,579 @@
+/*
+ * Example configuration file for OperServ.
+ */
+
+/*
+ * First, create the service.
+ */
+service
+{
+ /*
+ * The name of the OperServ client
+ */
+ nick = "OperServ"
+
+ /*
+ * The username of the OperServ client.
+ */
+ user = "services"
+
+ /*
+ * The hostname of the OperServ client.
+ */
+ host = "localhost.net"
+
+ /*
+ * The realname of the OperServ client.
+ */
+ gecos = "Operator Service"
+}
+
+/*
+ * Core OperServ module.
+ *
+ * Provides essential functionality for OperServ.
+ */
+module { name = "os_main" }
+
+/*
+ * Configuration for OperServ provided by os_main.
+ */
+operserv
+{
+ /*
+ * The name of the client that should be OperServ.
+ */
+ name = "OperServ"
+
+ /*
+ * If set, Services Admins will be able to use SUPERADMIN [ON|OFF] which will temporarily grant
+ * them extra privileges such as being a founder on ALL channels.
+ *
+ * This directive is optional.
+ */
+ #superadmin = yes
+
+ /*
+ * These define the default expiration times for, respectively, AKILLs, CHANKILLs, SNLINEs,
+ * SQLINEs, and SZLINEs.
+ */
+ autokillexpiry = 30d
+ chankillexpiry = 30d
+ snlineexpiry = 30d
+ sqlineexpiry = 30d
+ szlineexpiry = 30d
+
+ /*
+ * If set, this option will make Services send an AKILL command immediately after it has been
+ * added with AKILL ADD. This eliminates the need for killing the user after the AKILL has
+ * been added.
+ *
+ * This directive is optional, but recommended.
+ */
+ akillonadd = yes
+
+ /*
+ * If set, this option will make Services send an (SVS)KILL command immediately after SNLINE ADD.
+ * This eliminates the need for killing the user after the SNLINE has been added.
+ *
+ *This directive is optional.
+ */
+ #killonsnline = yes
+
+ /*
+ * If set, this option will make Services send an (SVS)KILL command immediately after SQLINE ADD.
+ * This eliminates the need for killing the user after the SQLINE has been added.
+ *
+ * This directive is optional.
+ */
+ #killonsqline = yes
+
+ /*
+ * Defines what actions should trigger notifications. The list must be separated by spaces.
+ *
+ * The notifications are:
+ * - oper: A user has become an IRC operator
+ * - bados: A non-IRCop attempts to use OperServ
+ * - akillexpire: An AKILL has expired
+ * - snlineexpire: An SNLINE has expired
+ * - sqlineexpire: An SQLINE has expired
+ * - szlineexpire: An SZLINE has expired
+ * - exceptionexpire: A session exception has expired
+ *
+ * This directive is optional, if left blank, there will be no notifications.
+ */
+ notifications = "oper"
+
+ /*
+ * Enables session limiting. Session limiting prevents users from connecting more than a certain
+ * number of times from the same host at the same time - thus preventing most types of cloning.
+ * Once a host reaches it's session limit, all clients attempting to connect from that host will
+ * be killed. Exceptions to the default session limit can be defined via the exception list. It
+ * should be noted that session limiting, along with a large exception list, can degrade Services'
+ * performance.
+ *
+ * See the source and comments in sessions.c and the online help for more information about
+ * session limiting.
+ *
+ * This directive is optional.
+ */
+ limitsessions = yes
+
+ /*
+ * Default session limit per host. Once a host reaches it's session limit, all clients attempting
+ * to connect from that host will be killed. A value of zero means an unlimited session limit.
+ *
+ * This directive is optional.
+ * If not given and session limiting is enabled, it will default to no limit.
+ */
+ defaultsessionlimit = 3
+
+ /*
+ * The maximum session limit that may be set for a host in an exception.
+ *
+ * This directive is only required if session limiting is enabled.
+ */
+ maxsessionlimit = 100
+
+ /*
+ * Sets the default expiry time for session exceptions.
+ *
+ * This directive is only required if session limiting is enabled.
+ */
+ exceptionexpiry = 1d
+
+ /*
+ * The message that will be NOTICE'd to a user just before they are removed from the network because
+ * their host's session limit has been exceeded. It may be used to give a slightly more descriptive
+ * reason for the impending kill as opposed to simply "Session limit exceeded".
+ *
+ * This directive is optional, if not set, nothing will be sent.
+ */
+ sessionlimitexceeded = "The session limit for your host %s has been exceeded."
+
+ /*
+ * Same as above, but should be used to provide a website address where users can find out more
+ * about session limits and how to go about applying for an exception.
+ *
+ * Note: This directive has been intentionally commented out in an effort to remind you to change
+ * the URL it contains. It is recommended that you supply an address/URL where people can get help
+ * regarding session limits.
+ *
+ * This directive is optional, if not set, nothing will be sent.
+ */
+ #sessionlimitdetailsloc = "Please visit http://your.website.url/ for more information about session limits."
+
+ /*
+ * If set and is not 0, this directive tells Services to add an AKILL the number of subsequent kills
+ * for the same host exceeds this value, preventing the network from experiencing KILL floods.
+ *
+ * This directive is optional.
+ */
+ maxsessionkill = 15
+
+ /*
+ * Sets the expiry time for AKILLs set for hosts exceeding the maxsessionkill directive limit.
+ *
+ * This directive is optional, if not set, defaults to 30 minutes.
+ */
+ sessionautokillexpiry = 30m
+
+ /*
+ * Adds the nickname of the IRC Operator issuing an AKILL to the kill reason.
+ *
+ * This directive is optional.
+ */
+ addakiller = yes
+
+ /*
+ * If set, only IRC Operators will be permitted to use OperServ, regardless of module-based command
+ * access restrictions.
+ *
+ * This directive is optional, but recommended.
+ */
+ opersonly = yes
+}
+
+/*
+ * Core OperServ commands.
+ *
+ * In Anope modules can provide (multiple) commands, each of which has a unique command name. Once these modules
+ * are loaded you can then configure the commands to be added to any client you like with any name you like.
+ *
+ * Additionally, you may provide a permission name that must be in the opertype of users executing the command.
+ *
+ * Sane defaults are provided below that do not need to be edited unless you wish to change the default behavior.
+ */
+
+/* Give it a help command */
+command { service = "OperServ"; name = "HELP"; command = "generic/help"; }
+
+/*
+ * os_akill
+ *
+ * Provides the command operserv/akill.
+ *
+ * Used to ban users from the network.
+ */
+module { name = "os_akill" }
+command { service = "OperServ"; name = "AKILL"; command = "operserv/akill"; permission = "operserv/akill"; }
+
+/*
+ * os_chankill
+ *
+ * Provides the command operserv/chankill.
+ *
+ * Used to akill uses from an entire channel.
+ */
+module { name = "os_chankill" }
+command { service = "OperServ"; name = "CHANKILL"; command = "operserv/chankill"; permission = "operserv/chankill"; }
+
+/*
+ * os_defcon
+ *
+ * Provides the command operserv/defcon.
+ *
+ * Allows you to set services in defcon mode, which can be used to restrict services access
+ * during bot attacks.
+ */
+#module { name = "os_defcon" }
+#command { service = "OperServ"; name = "DEFCON"; command = "operserv/defcon"; }
+defcon
+{
+ /*
+ * Default DefCon level (1-5) to use when starting Services up. Level 5 constitutes normal operation
+ * while level 1 constitutes the most restrictive operation. If this setting is left out or set to
+ * 0, DefCon will be disabled and the rest of this block will be ignored.
+ */
+ #defaultlevel = 5
+
+ /*
+ * The following 4 directives define what operations will take place when DefCon is set to levels
+ * 1 through 4. Each level is a list that must be separated by spaces.
+ *
+ * The following operations can be defined at each level:
+ * - nonewchannels: Disables registering new channels
+ * - nonewnicks: Disables registering new nicks
+ * - nomlockchanges: Disables changing MLOCK on registered channels
+ * - forcechanmodes: Forces all channels to have the modes given in the later chanmodes directive
+ * - reducedsessions: Reduces the session limit to the value given in the later sessionlimit directive
+ * - nonewclients: KILL any new clients trying to connect
+ * - operonly: Services will ignore all non-IRCops
+ * - silentoperonly: Services will silently ignore all non-IRCops
+ * - akillnewclients: AKILL any new clients trying to connect
+ * - nonewmemos: No new memos will be sent to block MemoServ attacks
+ */
+ level4 = "nonewchannels nonewnicks nomlockchanges reducedsessions"
+ level3 = "nonewchannels nonewnicks nomlockchanges forcechanmodes reducedsessions"
+ level2 = "nonewchannels nonewnicks nomlockchanges forcechanmodes reducedsessions silentoperonly"
+ level1 = "nonewchannels nonewnicks nomlockchanges forcechanmodes reducedsessions silentoperonly akillnewclients"
+
+ /*
+ * New session limit to use when a DefCon level is using "reduced" session limiting.
+ */
+ #sessionlimit = 2
+
+ /*
+ * Length of time to add an AKILL for when DefCon is preventing new clients from connecting to the
+ * network.
+ */
+ #akillexpire = 5m
+
+ /*
+ * The channel modes to set on all channels when the DefCon channel mode system is in use.
+ *
+ * Note 1: Choose these modes carefully, because when DefCon switches to a level which does NOT have
+ * the mode setting selected, Services will set the reverse on all channels, e.g. if this setting
+ * is +RN when DefCon is used, all channels will be set to +RN, when DefCon is removed, all
+ * channels will be set to -RN. You don't want to set this to +k for example, because when DefCon
+ * is removed all channels with -k.
+ *
+ * Note 2: MLOCKed modes will not be lost.
+ */
+ #chanmodes = "+R"
+
+ /*
+ * This value can be used to automatically return the network to DefCon level 5 after the specified
+ * time period, just in case any IRC Operator forgets to remove a DefCon setting.
+ *
+ * This directive is optional.
+ */
+ #timeout = 15m
+
+ /*
+ * If set, Services will send a global message on DefCon level changes.
+ *
+ * This directive is optional.
+ */
+ #globalondefcon = yes
+
+ /*
+ * If set, Services will send the global message defined in the message directive on DefCon level
+ * changes.
+ *
+ * This directive is optional.
+ */
+ #globalondefconmore = yes
+
+ /*
+ * Defines the message that will be sent on DefCon level changes when globalondefconmore is set.
+ *
+ * This directive is required only when globalondefconmore is set.
+ */
+ #message = "Put your message to send your users here. Dont forget to uncomment globalondefconmore"
+
+ /*
+ * Defines the message that will be sent when DefCon is returned to level 5. This directive is optional,
+ * and will also override globalondefcon and globalondefconmore when set.
+ */
+ #offmessage = "Services are now back to normal, sorry for any inconvenience"
+
+ /*
+ * Defines the reason to use when clients are KILLed or AKILLed from the network while the proper
+ * DefCon operation is in effect.
+ */
+ #akillreason = "This network is currently not accepting connections, please try again later"
+}
+
+/*
+ * os_list
+ *
+ * Provides the commands operserv/chanlist and operserv/userlist.
+ *
+ * Used to list and search the channels and users currently on the network.
+ */
+module { name = "os_list" }
+command { service = "OperServ"; name = "CHANLIST"; command = "operserv/chanlist"; }
+command { service = "OperServ"; name = "USERLIST"; command = "operserv/userlist"; }
+
+/*
+ * os_config
+ *
+ * Provides the command operserv/config.
+ *
+ * Used to view and set configuration options while services are running.
+ */
+module { name = "os_config" }
+command { service = "OperServ"; name = "CONFIG"; command = "operserv/config"; permission = "operserv/config"; }
+
+/*
+ * os_forbid
+ *
+ * Provides the command operserv/forbid.
+ *
+ * Used to forbid specific nicks, channels, emails, etc. from being used.
+ */
+module { name = "os_forbid" }
+command { service = "OperServ"; name = "FORBID"; command = "operserv/forbid"; permission = "operserv/forbid"; }
+
+/*
+ * os_ignore
+ *
+ * Provides the command operserv/ignore.
+ *
+ * Used to make Services ignore users.
+ */
+module { name = "os_ignore" }
+command { service = "OperServ"; name = "IGNORE"; command = "operserv/ignore"; permission = "operserv/ignore"; }
+
+/*
+ * os_jupe
+ *
+ * Provides the command operserv/jupe.
+ *
+ * Used to disconnect servers from the network and prevent them from relinking.
+ */
+module { name = "os_jupe" }
+command { service = "OperServ"; name = "JUPE"; command = "operserv/jupe"; permission = "operserv/jupe"; }
+
+/*
+ * os_kick
+ *
+ * Provides the command operserv/kick.
+ *
+ * Used to kick users from channels.
+ */
+module { name = "os_kick" }
+command { service = "OperServ"; name = "KICK"; command = "operserv/kick"; permission = "operserv/kick"; }
+
+/*
+ * os_kill
+ *
+ * Provides the command operserv/kill.
+ *
+ * Used to forcibly disconnect users from the network.
+ */
+module { name = "os_kill" }
+command { service = "OperServ"; name = "KILL"; command = "operserv/kill"; permission = "operserv/kill"; }
+
+/*
+ * os_login
+ *
+ * Provides the command operserv/login.
+ *
+ * Used to login to OperServ, only required if your oper block requires this.
+ */
+module { name = "os_login" }
+command { service = "OperServ"; name = "LOGIN"; command = "operserv/login"; }
+
+/*
+ * os_mode
+ *
+ * Provides the commands operserv/mode and operserv/umode.
+ *
+ * Used to change user and channel modes.
+ */
+module { name = "os_mode" }
+command { service = "OperServ"; name = "MODE"; command = "operserv/mode"; permission = "operserv/mode"; }
+command { service = "OperServ"; name = "UMODE"; command = "operserv/umode"; permission = "operserv/umode"; }
+
+/*
+ * os_modinfo
+ *
+ * Provides the commands operserv/modinfo and operserv/modlist.
+ *
+ * Used to show information about loaded modules.
+ */
+module { name = "os_modinfo" }
+command { service = "OperServ"; name = "MODINFO"; command = "operserv/modinfo"; }
+command { service = "OperServ"; name = "MODLIST"; command = "operserv/modlist"; permission = "operserv/modlist"; }
+
+/*
+ * os_module
+ *
+ * Provides the commands operserv/modload, operserv/modreload, and operserv/modunload.
+ *
+ * Used to load, reload, and unload modules.
+ */
+module { name = "os_module" }
+command { service = "OperServ"; name = "MODLOAD"; command = "operserv/modload"; permission = "operserv/modload"; }
+command { service = "OperServ"; name = "MODRELOAD"; command = "operserv/modreload"; permission = "operserv/modload"; }
+command { service = "OperServ"; name = "MODUNLOAD"; command = "operserv/modunload"; permission = "operserv/modload"; }
+
+/*
+ * os_news
+ *
+ * Provides the commands operserv/logonnews, operserv/opernews, and operserv/randomnews.
+ *
+ * Used to configure news notices shown to users when they connect, and opers when they oper.
+ */
+module { name = "os_news" }
+command { service = "OperServ"; name = "LOGONNEWS"; command = "operserv/logonnews"; permission = "operserv/news"; }
+command { service = "OperServ"; name = "OPERNEWS"; command = "operserv/opernews"; permission = "operserv/news"; }
+command { service = "OperServ"; name = "RANDOMNEWS"; command = "operserv/randomnews"; permission = "operserv/news"; }
+
+/*
+ * os_noop
+ *
+ * Provides the command operserv/noop.
+ *
+ * Used to NOOP a server, which prevents users from opering on that server.
+ */
+module { name = "os_noop" }
+command { service = "OperServ"; name = "NOOP"; command = "operserv/noop"; permission = "operserv/noop"; }
+
+/*
+ * os_oline
+ *
+ * Provides the command operserv/oline.
+ *
+ * What even does this do.
+ */
+module { name = "os_oline" }
+command { service = "OperServ"; name = "OLINE"; command = "operserv/oline"; permission = "operserv/oline"; }
+
+/*
+ * os_oper
+ *
+ * Provides the command opersev/oper.
+ *
+ * Used to configure opers and show information about opertypes.
+ */
+module { name = "os_oper" }
+command { service = "OperServ"; name = "OPER"; command = "operserv/oper"; permission = "operserv/oper"; }
+
+/*
+ * os_reload
+ *
+ * Provides the command operserv/relad.
+ *
+ * Used to reload the services.conf configuration file.
+ */
+module { name = "os_reload" }
+command { service = "OperServ"; name = "RELOAD"; command = "operserv/reload"; permission = "operserv/reload"; }
+
+/*
+ * os_session
+ *
+ * Provides the commands operserv/exception and operserv/session.
+ *
+ * Used to manage the session limit exception list, and view currently active sessions.
+ */
+module { name = "os_session" }
+command { service = "OperServ"; name = "EXCEPTION"; command = "operserv/exception"; permission = "operserv/exception"; }
+command { service = "OperServ"; name = "SESSION"; command = "operserv/session"; permission = "operserv/session"; }
+
+/*
+ * os_set
+ *
+ * Provides the command operserv/set.
+ *
+ * Used to set various settinsg such as superadmin, debug mode, etc.
+ */
+module { name = "os_set" }
+command { service = "OperServ"; name = "SET"; command = "operserv/set"; permission = "operserv/set"; }
+
+/*
+ * os_shutdown
+ *
+ * Provides the commands operserv/quit, operserv/restart, and operserv/shutdown.
+ *
+ * Used to quit, restart, or shutdown services.
+ */
+module { name = "os_shutdown" }
+command { service = "OperServ"; name = "QUIT"; command = "operserv/quit"; permission = "operserv/quit"; }
+command { service = "OperServ"; name = "RESTART"; command = "operserv/restart"; permission = "operserv/restart"; }
+command { service = "OperServ"; name = "SHUTDOWN"; command = "operserv/shutdown"; permission = "operserv/shutdown"; }
+
+/*
+ * os_stats
+ *
+ * Provides the operserv/stats command.
+ *
+ * Used to show statistics about services.
+ */
+module { name = "os_stats" }
+command { service = "OperServ"; name = "STATS"; command = "operserv/stats"; permission = "operserv/stats"; }
+
+/*
+ * os_svsnick
+ *
+ * Provides the operserv/svsnick command.
+ *
+ * Used to force change user's nicks.
+ */
+module { name = "os_svsnick" }
+command { service = "OperServ"; name = "SVSNICK"; command = "operserv/svsnick"; permission = "operserv/svsnick"; }
+
+/*
+ * os_sxline
+ *
+ * Provides the operserv/snline, operserv/sqline, and operserv/szline commands.
+ *
+ * Used to ban different things such as realnames, nicknames, and IPs.
+ */
+module { name = "os_sxline" }
+command { service = "OperServ"; name = "SNLINE"; command = "operserv/snline"; permission = "operserv/snline"; }
+command { service = "OperServ"; name = "SQLINE"; command = "operserv/sqline"; permission = "operserv/sqline"; }
+command { service = "OperServ"; name = "SZLINE"; command = "operserv/szline"; permission = "operserv/szline"; }
+
+/*
+ * os_update
+ *
+ * Provides the opersev/update command.
+ *
+ * Use to immediately update the databases.
+ */
+module { name = "os_update" }
+command { service = "OperServ"; name = "UPDATE"; command = "operserv/update"; permission = "operserv/update"; }
+
diff --git a/data/mysql/tables.sql b/data/tables.sql
index 4f9665869..4f9665869 100644
--- a/data/mysql/tables.sql
+++ b/data/tables.sql