summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2011-08-05 05:35:31 -0400
committerAdam <Adam@anope.org>2011-08-05 05:35:31 -0400
commite66063e6304538d34c40460ca0aa2be5ddb6bdec (patch)
treef50fe31097160f8f794669809e4f4ef87f477672
parent9ec18a3b020932eee6242c878149c484f49b13cb (diff)
Rewrote the example configurations and split them
up into seperate files for each pseudo client. Also reorganized how the modules are stored, and made most of the old "extra" modules "core"
-rw-r--r--CMakeLists.txt2
-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
-rw-r--r--docs/TODO1
-rwxr-xr-xlanguage/update.sh2
-rw-r--r--modules/CMakeLists.txt4
-rw-r--r--modules/commands/bs_assign.cpp (renamed from modules/core/bs_assign.cpp)0
-rw-r--r--modules/commands/bs_badwords.cpp (renamed from modules/core/bs_badwords.cpp)0
-rw-r--r--modules/commands/bs_bot.cpp (renamed from modules/core/bs_bot.cpp)0
-rw-r--r--modules/commands/bs_botlist.cpp (renamed from modules/core/bs_botlist.cpp)0
-rw-r--r--modules/commands/bs_control.cpp (renamed from modules/core/bs_control.cpp)0
-rw-r--r--modules/commands/bs_info.cpp (renamed from modules/core/bs_info.cpp)0
-rw-r--r--modules/commands/bs_kick.cpp (renamed from modules/core/bs_kick.cpp)0
-rw-r--r--modules/commands/bs_set.cpp (renamed from modules/core/bs_set.cpp)0
-rw-r--r--modules/commands/cs_access.cpp (renamed from modules/core/cs_access.cpp)0
-rw-r--r--modules/commands/cs_akick.cpp (renamed from modules/core/cs_akick.cpp)0
-rw-r--r--modules/commands/cs_appendtopic.cpp (renamed from modules/extra/cs_appendtopic.cpp)0
-rw-r--r--modules/commands/cs_ban.cpp (renamed from modules/core/cs_ban.cpp)0
-rw-r--r--modules/commands/cs_clearusers.cpp (renamed from modules/core/cs_clearusers.cpp)0
-rw-r--r--modules/commands/cs_clone.cpp (renamed from modules/core/cs_clone.cpp)0
-rw-r--r--modules/commands/cs_drop.cpp (renamed from modules/core/cs_drop.cpp)0
-rw-r--r--modules/commands/cs_enforce.cpp (renamed from modules/extra/cs_enforce.cpp)0
-rw-r--r--modules/commands/cs_entrymsg.cpp (renamed from modules/extra/cs_entrymsg.cpp)0
-rw-r--r--modules/commands/cs_flags.cpp (renamed from modules/core/cs_flags.cpp)0
-rw-r--r--modules/commands/cs_getkey.cpp (renamed from modules/core/cs_getkey.cpp)0
-rw-r--r--modules/commands/cs_info.cpp (renamed from modules/core/cs_info.cpp)0
-rw-r--r--modules/commands/cs_invite.cpp (renamed from modules/core/cs_invite.cpp)0
-rw-r--r--modules/commands/cs_kick.cpp (renamed from modules/core/cs_kick.cpp)0
-rw-r--r--modules/commands/cs_list.cpp (renamed from modules/core/cs_list.cpp)0
-rw-r--r--modules/commands/cs_mode.cpp (renamed from modules/core/cs_mode.cpp)0
-rw-r--r--modules/commands/cs_modes.cpp (renamed from modules/core/cs_modes.cpp)0
-rw-r--r--modules/commands/cs_register.cpp (renamed from modules/core/cs_register.cpp)0
-rw-r--r--modules/commands/cs_saset.cpp (renamed from modules/core/cs_saset.cpp)0
-rw-r--r--modules/commands/cs_saset_noexpire.cpp (renamed from modules/core/cs_saset_noexpire.cpp)0
-rw-r--r--modules/commands/cs_set.cpp (renamed from modules/core/cs_set.cpp)0
-rw-r--r--modules/commands/cs_set_bantype.cpp (renamed from modules/core/cs_set_bantype.cpp)0
-rw-r--r--modules/commands/cs_set_description.cpp (renamed from modules/core/cs_set_description.cpp)0
-rw-r--r--modules/commands/cs_set_founder.cpp (renamed from modules/core/cs_set_founder.cpp)0
-rw-r--r--modules/commands/cs_set_keeptopic.cpp (renamed from modules/core/cs_set_keeptopic.cpp)0
-rw-r--r--modules/commands/cs_set_misc.cpp (renamed from modules/extra/cs_set_misc.cpp)0
-rw-r--r--modules/commands/cs_set_opnotice.cpp (renamed from modules/core/cs_set_opnotice.cpp)0
-rw-r--r--modules/commands/cs_set_peace.cpp (renamed from modules/core/cs_set_peace.cpp)0
-rw-r--r--modules/commands/cs_set_persist.cpp (renamed from modules/core/cs_set_persist.cpp)0
-rw-r--r--modules/commands/cs_set_private.cpp (renamed from modules/core/cs_set_private.cpp)0
-rw-r--r--modules/commands/cs_set_restricted.cpp (renamed from modules/core/cs_set_restricted.cpp)0
-rw-r--r--modules/commands/cs_set_secure.cpp (renamed from modules/core/cs_set_secure.cpp)0
-rw-r--r--modules/commands/cs_set_securefounder.cpp (renamed from modules/core/cs_set_securefounder.cpp)0
-rw-r--r--modules/commands/cs_set_secureops.cpp (renamed from modules/core/cs_set_secureops.cpp)0
-rw-r--r--modules/commands/cs_set_signkick.cpp (renamed from modules/core/cs_set_signkick.cpp)0
-rw-r--r--modules/commands/cs_set_successor.cpp (renamed from modules/core/cs_set_successor.cpp)0
-rw-r--r--modules/commands/cs_set_topiclock.cpp (renamed from modules/core/cs_set_topiclock.cpp)0
-rw-r--r--modules/commands/cs_suspend.cpp (renamed from modules/core/cs_suspend.cpp)0
-rw-r--r--modules/commands/cs_sync.cpp (renamed from modules/extra/cs_sync.cpp)0
-rw-r--r--modules/commands/cs_tban.cpp (renamed from modules/extra/cs_tban.cpp)0
-rw-r--r--modules/commands/cs_topic.cpp (renamed from modules/core/cs_topic.cpp)0
-rw-r--r--modules/commands/cs_unban.cpp (renamed from modules/core/cs_unban.cpp)0
-rw-r--r--modules/commands/cs_xop.cpp (renamed from modules/core/cs_xop.cpp)0
-rw-r--r--modules/commands/gl_global.cpp (renamed from modules/core/gl_global.cpp)0
-rw-r--r--modules/commands/help.cpp (renamed from modules/core/help.cpp)0
-rw-r--r--modules/commands/hs_del.cpp (renamed from modules/core/hs_del.cpp)0
-rw-r--r--modules/commands/hs_group.cpp (renamed from modules/core/hs_group.cpp)0
-rw-r--r--modules/commands/hs_list.cpp (renamed from modules/core/hs_list.cpp)0
-rw-r--r--modules/commands/hs_off.cpp (renamed from modules/core/hs_off.cpp)0
-rw-r--r--modules/commands/hs_on.cpp (renamed from modules/core/hs_on.cpp)0
-rw-r--r--modules/commands/hs_request.cpp (renamed from modules/extra/hs_request.cpp)0
-rw-r--r--modules/commands/hs_set.cpp (renamed from modules/core/hs_set.cpp)0
-rw-r--r--modules/commands/ms_cancel.cpp (renamed from modules/core/ms_cancel.cpp)0
-rw-r--r--modules/commands/ms_check.cpp (renamed from modules/core/ms_check.cpp)0
-rw-r--r--modules/commands/ms_del.cpp (renamed from modules/core/ms_del.cpp)0
-rw-r--r--modules/commands/ms_ignore.cpp (renamed from modules/core/ms_ignore.cpp)0
-rw-r--r--modules/commands/ms_info.cpp (renamed from modules/core/ms_info.cpp)0
-rw-r--r--modules/commands/ms_list.cpp (renamed from modules/core/ms_list.cpp)0
-rw-r--r--modules/commands/ms_read.cpp (renamed from modules/core/ms_read.cpp)0
-rw-r--r--modules/commands/ms_rsend.cpp (renamed from modules/core/ms_rsend.cpp)0
-rw-r--r--modules/commands/ms_send.cpp (renamed from modules/core/ms_send.cpp)0
-rw-r--r--modules/commands/ms_sendall.cpp (renamed from modules/core/ms_sendall.cpp)0
-rw-r--r--modules/commands/ms_set.cpp (renamed from modules/core/ms_set.cpp)0
-rw-r--r--modules/commands/ms_staff.cpp (renamed from modules/core/ms_staff.cpp)0
-rw-r--r--modules/commands/ns_access.cpp (renamed from modules/core/ns_access.cpp)0
-rw-r--r--modules/commands/ns_ajoin.cpp (renamed from modules/core/ns_ajoin.cpp)0
-rw-r--r--modules/commands/ns_alist.cpp (renamed from modules/core/ns_alist.cpp)0
-rw-r--r--modules/commands/ns_cert.cpp (renamed from modules/core/ns_cert.cpp)0
-rw-r--r--modules/commands/ns_drop.cpp (renamed from modules/core/ns_drop.cpp)0
-rw-r--r--modules/commands/ns_getemail.cpp (renamed from modules/core/ns_getemail.cpp)0
-rw-r--r--modules/commands/ns_getpass.cpp (renamed from modules/core/ns_getpass.cpp)0
-rw-r--r--modules/commands/ns_ghost.cpp (renamed from modules/core/ns_ghost.cpp)0
-rw-r--r--modules/commands/ns_group.cpp (renamed from modules/core/ns_group.cpp)0
-rw-r--r--modules/commands/ns_identify.cpp (renamed from modules/core/ns_identify.cpp)0
-rw-r--r--modules/commands/ns_info.cpp (renamed from modules/core/ns_info.cpp)0
-rw-r--r--modules/commands/ns_list.cpp (renamed from modules/core/ns_list.cpp)0
-rw-r--r--modules/commands/ns_logout.cpp (renamed from modules/core/ns_logout.cpp)0
-rw-r--r--modules/commands/ns_recover.cpp (renamed from modules/core/ns_recover.cpp)0
-rw-r--r--modules/commands/ns_register.cpp (renamed from modules/core/ns_register.cpp)0
-rw-r--r--modules/commands/ns_release.cpp (renamed from modules/core/ns_release.cpp)0
-rw-r--r--modules/commands/ns_resetpass.cpp (renamed from modules/core/ns_resetpass.cpp)0
-rw-r--r--modules/commands/ns_saset.cpp (renamed from modules/core/ns_saset.cpp)0
-rw-r--r--modules/commands/ns_saset_noexpire.cpp (renamed from modules/core/ns_saset_noexpire.cpp)0
-rw-r--r--modules/commands/ns_sendpass.cpp (renamed from modules/core/ns_sendpass.cpp)0
-rw-r--r--modules/commands/ns_set.cpp (renamed from modules/core/ns_set.cpp)0
-rw-r--r--modules/commands/ns_set_autoop.cpp (renamed from modules/core/ns_set_autoop.cpp)0
-rw-r--r--modules/commands/ns_set_email.cpp (renamed from modules/core/ns_set_email.cpp)0
-rw-r--r--modules/commands/ns_set_greet.cpp (renamed from modules/core/ns_set_greet.cpp)0
-rw-r--r--modules/commands/ns_set_hide.cpp (renamed from modules/core/ns_set_hide.cpp)0
-rw-r--r--modules/commands/ns_set_kill.cpp (renamed from modules/core/ns_set_kill.cpp)0
-rw-r--r--modules/commands/ns_set_language.cpp (renamed from modules/core/ns_set_language.cpp)0
-rw-r--r--modules/commands/ns_set_message.cpp (renamed from modules/core/ns_set_message.cpp)0
-rw-r--r--modules/commands/ns_set_misc.cpp (renamed from modules/extra/ns_set_misc.cpp)0
-rw-r--r--modules/commands/ns_set_private.cpp (renamed from modules/core/ns_set_private.cpp)0
-rw-r--r--modules/commands/ns_set_secure.cpp (renamed from modules/core/ns_set_secure.cpp)0
-rw-r--r--modules/commands/ns_status.cpp (renamed from modules/core/ns_status.cpp)0
-rw-r--r--modules/commands/ns_suspend.cpp (renamed from modules/core/ns_suspend.cpp)0
-rw-r--r--modules/commands/ns_update.cpp (renamed from modules/core/ns_update.cpp)0
-rw-r--r--modules/commands/os_akill.cpp (renamed from modules/core/os_akill.cpp)0
-rw-r--r--modules/commands/os_chankill.cpp (renamed from modules/core/os_chankill.cpp)0
-rw-r--r--modules/commands/os_config.cpp (renamed from modules/core/os_config.cpp)0
-rw-r--r--modules/commands/os_defcon.cpp (renamed from modules/extra/os_defcon.cpp)0
-rw-r--r--modules/commands/os_forbid.cpp (renamed from modules/core/os_forbid.cpp)0
-rw-r--r--modules/commands/os_forbid.h (renamed from modules/core/os_forbid.h)0
-rw-r--r--modules/commands/os_ignore.cpp (renamed from modules/core/os_ignore.cpp)0
-rw-r--r--modules/commands/os_ignore.h (renamed from modules/core/os_ignore.h)0
-rw-r--r--modules/commands/os_jupe.cpp (renamed from modules/core/os_jupe.cpp)0
-rw-r--r--modules/commands/os_kick.cpp (renamed from modules/core/os_kick.cpp)0
-rw-r--r--modules/commands/os_kill.cpp (renamed from modules/core/os_kill.cpp)0
-rw-r--r--modules/commands/os_list.cpp (renamed from modules/core/os_list.cpp)0
-rw-r--r--modules/commands/os_login.cpp (renamed from modules/core/os_login.cpp)0
-rw-r--r--modules/commands/os_mode.cpp (renamed from modules/core/os_mode.cpp)0
-rw-r--r--modules/commands/os_modinfo.cpp (renamed from modules/core/os_modinfo.cpp)0
-rw-r--r--modules/commands/os_module.cpp (renamed from modules/core/os_module.cpp)0
-rw-r--r--modules/commands/os_news.cpp (renamed from modules/core/os_news.cpp)0
-rw-r--r--modules/commands/os_news.h (renamed from modules/core/os_news.h)0
-rw-r--r--modules/commands/os_noop.cpp (renamed from modules/core/os_noop.cpp)0
-rw-r--r--modules/commands/os_oline.cpp (renamed from modules/core/os_oline.cpp)0
-rw-r--r--modules/commands/os_oper.cpp (renamed from modules/core/os_oper.cpp)0
-rw-r--r--modules/commands/os_reload.cpp (renamed from modules/core/os_reload.cpp)0
-rw-r--r--modules/commands/os_session.cpp (renamed from modules/core/os_session.cpp)0
-rw-r--r--modules/commands/os_session.h (renamed from modules/core/os_session.h)0
-rw-r--r--modules/commands/os_set.cpp (renamed from modules/core/os_set.cpp)0
-rw-r--r--modules/commands/os_shutdown.cpp (renamed from modules/core/os_shutdown.cpp)0
-rw-r--r--modules/commands/os_stats.cpp (renamed from modules/core/os_stats.cpp)0
-rw-r--r--modules/commands/os_svsnick.cpp (renamed from modules/core/os_svsnick.cpp)0
-rw-r--r--modules/commands/os_sxline.cpp (renamed from modules/core/os_sxline.cpp)0
-rw-r--r--modules/commands/os_update.cpp (renamed from modules/core/os_update.cpp)0
-rw-r--r--modules/database/db_mysql.cpp (renamed from modules/core/db_mysql.cpp)2
-rw-r--r--modules/database/db_mysql_live.cpp (renamed from modules/core/db_mysql_live.cpp)0
-rw-r--r--modules/database/db_plain.cpp (renamed from modules/core/db_plain.cpp)2
-rw-r--r--modules/encryption/enc_md5.cpp (renamed from modules/core/enc_md5.cpp)0
-rw-r--r--modules/encryption/enc_none.cpp (renamed from modules/core/enc_none.cpp)0
-rw-r--r--modules/encryption/enc_old.cpp (renamed from modules/core/enc_old.cpp)0
-rw-r--r--modules/encryption/enc_sha1.cpp (renamed from modules/core/enc_sha1.cpp)0
-rw-r--r--modules/encryption/enc_sha256.cpp (renamed from modules/core/enc_sha256.cpp)0
-rw-r--r--modules/extra/language/cs_appendtopic.de_DE.po37
-rw-r--r--modules/extra/language/cs_appendtopic.it_IT.po39
-rw-r--r--modules/extra/language/cs_appendtopic.nl_NL.po38
-rw-r--r--modules/extra/language/cs_appendtopic.pt_PT.po36
-rw-r--r--modules/extra/language/cs_appendtopic.ru_RU.po41
-rw-r--r--modules/extra/language/cs_enforce.de_DE.po86
-rw-r--r--modules/extra/language/cs_enforce.it_IT.po86
-rw-r--r--modules/extra/language/cs_enforce.nl_NL.po89
-rw-r--r--modules/extra/language/cs_enforce.pt_PT.po88
-rw-r--r--modules/extra/language/cs_enforce.ru_RU.po90
-rw-r--r--modules/extra/language/cs_tban.de_DE.po40
-rw-r--r--modules/extra/language/cs_tban.it_IT.po41
-rw-r--r--modules/extra/language/cs_tban.nl_NL.po41
-rw-r--r--modules/extra/language/cs_tban.pt_PT.po40
-rw-r--r--modules/extra/language/cs_tban.ru_RU.po42
-rw-r--r--modules/extra/language/hs_request.it_IT.po149
-rw-r--r--modules/extra/language/hs_request.nl_NL.po150
-rw-r--r--modules/extra/language/hs_request.pt_PT.po148
-rw-r--r--modules/extra/language/hs_request.ru_RU.po151
-rw-r--r--modules/extra/language/ns_maxemail.de_DE.po28
-rw-r--r--modules/extra/language/ns_maxemail.it_IT.po32
-rw-r--r--modules/extra/language/ns_maxemail.nl_NL.po28
-rw-r--r--modules/extra/language/ns_maxemail.pt_PT.po28
-rw-r--r--modules/extra/language/ns_maxemail.ru_RU.po30
-rw-r--r--modules/pseudoclients/botserv.h (renamed from modules/core/botserv.h)0
-rw-r--r--modules/pseudoclients/bs_main.cpp (renamed from modules/core/bs_main.cpp)0
-rw-r--r--modules/pseudoclients/cs_main.cpp (renamed from modules/core/cs_main.cpp)0
-rw-r--r--modules/pseudoclients/gl_main.cpp (renamed from modules/core/gl_main.cpp)0
-rw-r--r--modules/pseudoclients/global.h (renamed from modules/core/global.h)0
-rw-r--r--modules/pseudoclients/hs_main.cpp (renamed from modules/core/hs_main.cpp)0
-rw-r--r--modules/pseudoclients/memoserv.h (renamed from modules/core/memoserv.h)0
-rw-r--r--modules/pseudoclients/ms_main.cpp (renamed from modules/core/ms_main.cpp)0
-rw-r--r--modules/pseudoclients/nickserv.h (renamed from modules/core/nickserv.h)0
-rw-r--r--modules/pseudoclients/ns_main.cpp (renamed from modules/core/ns_main.cpp)0
-rw-r--r--modules/pseudoclients/os_main.cpp (renamed from modules/core/os_main.cpp)0
-rw-r--r--modules/third/README2
-rw-r--r--modules/third/language/CMakeLists.txt (renamed from modules/extra/language/CMakeLists.txt)0
-rw-r--r--modules/third/language/README1
-rwxr-xr-xmodules/third/language/update.sh (renamed from modules/extra/language/update.sh)0
198 files changed, 2745 insertions, 2954 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c2106b9da..ad890bc51 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -222,7 +222,7 @@ option(USE_RUN_CC_PL "Use run-cc.pl for building" OFF)
# Use the following directories as includes
# Note that it is important the binary include directory comes before the
# source include directory so the precompiled headers work correctly.
-include_directories(${Anope_BINARY_DIR}/include ${Anope_SOURCE_DIR}/include ${Anope_BINARY_DIR}/language ${Anope_SOURCE_DIR}/modules/core)
+include_directories(${Anope_BINARY_DIR}/include ${Anope_SOURCE_DIR}/include ${Anope_BINARY_DIR}/language ${Anope_SOURCE_DIR}/modules/pseudoclients)
# If using Windows, always add the _WIN32 define
if(WIN32)
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
diff --git a/docs/TODO b/docs/TODO
index a69b3cfb2..4914ffbc0 100644
--- a/docs/TODO
+++ b/docs/TODO
@@ -32,3 +32,4 @@ Future
[ ] Unique IDs on each AKILL/blah so that networks may use them as ticket IDs
[ ] HS ACTIVATE -ALL (rob sez this all needs reviewing)
[ ] No nickname ownership?
+[ ] More commands need to be split up such as /bs bot, /ms set, /bs kick, /bs set, /os set? etc.
diff --git a/language/update.sh b/language/update.sh
index 8302d813c..28aa39f7d 100755
--- a/language/update.sh
+++ b/language/update.sh
@@ -4,7 +4,7 @@ rm anope.pot
touch anope.pot
cd ..
-FILES=`find ./ -name *.cpp -o -name *.h | grep -v /modules/extra/`
+FILES=`find ./ -name *.cpp -o -name *.h | grep -v /modules/third/`
for f in $FILES
do
xgettext -C -s -d Anope -j -o language/anope.pot --from-code=utf-8 --keyword --keyword=_ $f
diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt
index 724899041..d4bd3f7a1 100644
--- a/modules/CMakeLists.txt
+++ b/modules/CMakeLists.txt
@@ -1,4 +1,4 @@
-add_subdirectory("extra/language")
+add_subdirectory("third/language")
# Get a list of ALL files and directories within the current directory
file(GLOB MODULES_FOLDERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*")
@@ -96,7 +96,7 @@ foreach(MODULE_FOLDER ${MODULES_FOLDERS})
# Get a list of ALL files and directories within this modules directory
file(GLOB SUBMODULE_DIRS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "${MODULE_FOLDER}/*")
remove_item_from_list(SUBMODULE_DIRS "CMakeFiles")
- remove_item_from_list(SUBMODULE_DIRS "extra/language")
+ remove_item_from_list(SUBMODULE_DIRS "third/language")
foreach(SUBDIR ${SUBMODULE_DIRS})
if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIR}")
diff --git a/modules/core/bs_assign.cpp b/modules/commands/bs_assign.cpp
index 803368994..803368994 100644
--- a/modules/core/bs_assign.cpp
+++ b/modules/commands/bs_assign.cpp
diff --git a/modules/core/bs_badwords.cpp b/modules/commands/bs_badwords.cpp
index a27dca2d4..a27dca2d4 100644
--- a/modules/core/bs_badwords.cpp
+++ b/modules/commands/bs_badwords.cpp
diff --git a/modules/core/bs_bot.cpp b/modules/commands/bs_bot.cpp
index 7500d1926..7500d1926 100644
--- a/modules/core/bs_bot.cpp
+++ b/modules/commands/bs_bot.cpp
diff --git a/modules/core/bs_botlist.cpp b/modules/commands/bs_botlist.cpp
index ee7e4d2d8..ee7e4d2d8 100644
--- a/modules/core/bs_botlist.cpp
+++ b/modules/commands/bs_botlist.cpp
diff --git a/modules/core/bs_control.cpp b/modules/commands/bs_control.cpp
index 16a5b372a..16a5b372a 100644
--- a/modules/core/bs_control.cpp
+++ b/modules/commands/bs_control.cpp
diff --git a/modules/core/bs_info.cpp b/modules/commands/bs_info.cpp
index b48a0b296..b48a0b296 100644
--- a/modules/core/bs_info.cpp
+++ b/modules/commands/bs_info.cpp
diff --git a/modules/core/bs_kick.cpp b/modules/commands/bs_kick.cpp
index 3f433f773..3f433f773 100644
--- a/modules/core/bs_kick.cpp
+++ b/modules/commands/bs_kick.cpp
diff --git a/modules/core/bs_set.cpp b/modules/commands/bs_set.cpp
index ccd1bb615..ccd1bb615 100644
--- a/modules/core/bs_set.cpp
+++ b/modules/commands/bs_set.cpp
diff --git a/modules/core/cs_access.cpp b/modules/commands/cs_access.cpp
index 777b0c176..777b0c176 100644
--- a/modules/core/cs_access.cpp
+++ b/modules/commands/cs_access.cpp
diff --git a/modules/core/cs_akick.cpp b/modules/commands/cs_akick.cpp
index 437bf5572..437bf5572 100644
--- a/modules/core/cs_akick.cpp
+++ b/modules/commands/cs_akick.cpp
diff --git a/modules/extra/cs_appendtopic.cpp b/modules/commands/cs_appendtopic.cpp
index c9af50613..c9af50613 100644
--- a/modules/extra/cs_appendtopic.cpp
+++ b/modules/commands/cs_appendtopic.cpp
diff --git a/modules/core/cs_ban.cpp b/modules/commands/cs_ban.cpp
index 759649662..759649662 100644
--- a/modules/core/cs_ban.cpp
+++ b/modules/commands/cs_ban.cpp
diff --git a/modules/core/cs_clearusers.cpp b/modules/commands/cs_clearusers.cpp
index 18dc75479..18dc75479 100644
--- a/modules/core/cs_clearusers.cpp
+++ b/modules/commands/cs_clearusers.cpp
diff --git a/modules/core/cs_clone.cpp b/modules/commands/cs_clone.cpp
index 5ede6a9e4..5ede6a9e4 100644
--- a/modules/core/cs_clone.cpp
+++ b/modules/commands/cs_clone.cpp
diff --git a/modules/core/cs_drop.cpp b/modules/commands/cs_drop.cpp
index eb01875db..eb01875db 100644
--- a/modules/core/cs_drop.cpp
+++ b/modules/commands/cs_drop.cpp
diff --git a/modules/extra/cs_enforce.cpp b/modules/commands/cs_enforce.cpp
index 26885c9b0..26885c9b0 100644
--- a/modules/extra/cs_enforce.cpp
+++ b/modules/commands/cs_enforce.cpp
diff --git a/modules/extra/cs_entrymsg.cpp b/modules/commands/cs_entrymsg.cpp
index 3aa8ed862..3aa8ed862 100644
--- a/modules/extra/cs_entrymsg.cpp
+++ b/modules/commands/cs_entrymsg.cpp
diff --git a/modules/core/cs_flags.cpp b/modules/commands/cs_flags.cpp
index 48f1a22f1..48f1a22f1 100644
--- a/modules/core/cs_flags.cpp
+++ b/modules/commands/cs_flags.cpp
diff --git a/modules/core/cs_getkey.cpp b/modules/commands/cs_getkey.cpp
index 4a6d62442..4a6d62442 100644
--- a/modules/core/cs_getkey.cpp
+++ b/modules/commands/cs_getkey.cpp
diff --git a/modules/core/cs_info.cpp b/modules/commands/cs_info.cpp
index ef026563e..ef026563e 100644
--- a/modules/core/cs_info.cpp
+++ b/modules/commands/cs_info.cpp
diff --git a/modules/core/cs_invite.cpp b/modules/commands/cs_invite.cpp
index 27b4b03a3..27b4b03a3 100644
--- a/modules/core/cs_invite.cpp
+++ b/modules/commands/cs_invite.cpp
diff --git a/modules/core/cs_kick.cpp b/modules/commands/cs_kick.cpp
index b98d0953d..b98d0953d 100644
--- a/modules/core/cs_kick.cpp
+++ b/modules/commands/cs_kick.cpp
diff --git a/modules/core/cs_list.cpp b/modules/commands/cs_list.cpp
index a79c047c4..a79c047c4 100644
--- a/modules/core/cs_list.cpp
+++ b/modules/commands/cs_list.cpp
diff --git a/modules/core/cs_mode.cpp b/modules/commands/cs_mode.cpp
index e67abd85a..e67abd85a 100644
--- a/modules/core/cs_mode.cpp
+++ b/modules/commands/cs_mode.cpp
diff --git a/modules/core/cs_modes.cpp b/modules/commands/cs_modes.cpp
index cee2f9460..cee2f9460 100644
--- a/modules/core/cs_modes.cpp
+++ b/modules/commands/cs_modes.cpp
diff --git a/modules/core/cs_register.cpp b/modules/commands/cs_register.cpp
index 117212519..117212519 100644
--- a/modules/core/cs_register.cpp
+++ b/modules/commands/cs_register.cpp
diff --git a/modules/core/cs_saset.cpp b/modules/commands/cs_saset.cpp
index 699c5bc2c..699c5bc2c 100644
--- a/modules/core/cs_saset.cpp
+++ b/modules/commands/cs_saset.cpp
diff --git a/modules/core/cs_saset_noexpire.cpp b/modules/commands/cs_saset_noexpire.cpp
index 1e085496f..1e085496f 100644
--- a/modules/core/cs_saset_noexpire.cpp
+++ b/modules/commands/cs_saset_noexpire.cpp
diff --git a/modules/core/cs_set.cpp b/modules/commands/cs_set.cpp
index 65719ce91..65719ce91 100644
--- a/modules/core/cs_set.cpp
+++ b/modules/commands/cs_set.cpp
diff --git a/modules/core/cs_set_bantype.cpp b/modules/commands/cs_set_bantype.cpp
index 94d2aa151..94d2aa151 100644
--- a/modules/core/cs_set_bantype.cpp
+++ b/modules/commands/cs_set_bantype.cpp
diff --git a/modules/core/cs_set_description.cpp b/modules/commands/cs_set_description.cpp
index 5c2cd447d..5c2cd447d 100644
--- a/modules/core/cs_set_description.cpp
+++ b/modules/commands/cs_set_description.cpp
diff --git a/modules/core/cs_set_founder.cpp b/modules/commands/cs_set_founder.cpp
index 2169af972..2169af972 100644
--- a/modules/core/cs_set_founder.cpp
+++ b/modules/commands/cs_set_founder.cpp
diff --git a/modules/core/cs_set_keeptopic.cpp b/modules/commands/cs_set_keeptopic.cpp
index 05578a2e5..05578a2e5 100644
--- a/modules/core/cs_set_keeptopic.cpp
+++ b/modules/commands/cs_set_keeptopic.cpp
diff --git a/modules/extra/cs_set_misc.cpp b/modules/commands/cs_set_misc.cpp
index 8f145ab88..8f145ab88 100644
--- a/modules/extra/cs_set_misc.cpp
+++ b/modules/commands/cs_set_misc.cpp
diff --git a/modules/core/cs_set_opnotice.cpp b/modules/commands/cs_set_opnotice.cpp
index 018b89437..018b89437 100644
--- a/modules/core/cs_set_opnotice.cpp
+++ b/modules/commands/cs_set_opnotice.cpp
diff --git a/modules/core/cs_set_peace.cpp b/modules/commands/cs_set_peace.cpp
index 3a045fc6d..3a045fc6d 100644
--- a/modules/core/cs_set_peace.cpp
+++ b/modules/commands/cs_set_peace.cpp
diff --git a/modules/core/cs_set_persist.cpp b/modules/commands/cs_set_persist.cpp
index 3cc9564c4..3cc9564c4 100644
--- a/modules/core/cs_set_persist.cpp
+++ b/modules/commands/cs_set_persist.cpp
diff --git a/modules/core/cs_set_private.cpp b/modules/commands/cs_set_private.cpp
index 108b11569..108b11569 100644
--- a/modules/core/cs_set_private.cpp
+++ b/modules/commands/cs_set_private.cpp
diff --git a/modules/core/cs_set_restricted.cpp b/modules/commands/cs_set_restricted.cpp
index 5d675d2e7..5d675d2e7 100644
--- a/modules/core/cs_set_restricted.cpp
+++ b/modules/commands/cs_set_restricted.cpp
diff --git a/modules/core/cs_set_secure.cpp b/modules/commands/cs_set_secure.cpp
index 26e8c5768..26e8c5768 100644
--- a/modules/core/cs_set_secure.cpp
+++ b/modules/commands/cs_set_secure.cpp
diff --git a/modules/core/cs_set_securefounder.cpp b/modules/commands/cs_set_securefounder.cpp
index 7afc2e32d..7afc2e32d 100644
--- a/modules/core/cs_set_securefounder.cpp
+++ b/modules/commands/cs_set_securefounder.cpp
diff --git a/modules/core/cs_set_secureops.cpp b/modules/commands/cs_set_secureops.cpp
index 4c3c54b05..4c3c54b05 100644
--- a/modules/core/cs_set_secureops.cpp
+++ b/modules/commands/cs_set_secureops.cpp
diff --git a/modules/core/cs_set_signkick.cpp b/modules/commands/cs_set_signkick.cpp
index 0d421576d..0d421576d 100644
--- a/modules/core/cs_set_signkick.cpp
+++ b/modules/commands/cs_set_signkick.cpp
diff --git a/modules/core/cs_set_successor.cpp b/modules/commands/cs_set_successor.cpp
index f7ed8dba9..f7ed8dba9 100644
--- a/modules/core/cs_set_successor.cpp
+++ b/modules/commands/cs_set_successor.cpp
diff --git a/modules/core/cs_set_topiclock.cpp b/modules/commands/cs_set_topiclock.cpp
index e670385ba..e670385ba 100644
--- a/modules/core/cs_set_topiclock.cpp
+++ b/modules/commands/cs_set_topiclock.cpp
diff --git a/modules/core/cs_suspend.cpp b/modules/commands/cs_suspend.cpp
index d59ffb44b..d59ffb44b 100644
--- a/modules/core/cs_suspend.cpp
+++ b/modules/commands/cs_suspend.cpp
diff --git a/modules/extra/cs_sync.cpp b/modules/commands/cs_sync.cpp
index 2937cc4fc..2937cc4fc 100644
--- a/modules/extra/cs_sync.cpp
+++ b/modules/commands/cs_sync.cpp
diff --git a/modules/extra/cs_tban.cpp b/modules/commands/cs_tban.cpp
index 404279bef..404279bef 100644
--- a/modules/extra/cs_tban.cpp
+++ b/modules/commands/cs_tban.cpp
diff --git a/modules/core/cs_topic.cpp b/modules/commands/cs_topic.cpp
index 1b5de11c3..1b5de11c3 100644
--- a/modules/core/cs_topic.cpp
+++ b/modules/commands/cs_topic.cpp
diff --git a/modules/core/cs_unban.cpp b/modules/commands/cs_unban.cpp
index cc3c68e91..cc3c68e91 100644
--- a/modules/core/cs_unban.cpp
+++ b/modules/commands/cs_unban.cpp
diff --git a/modules/core/cs_xop.cpp b/modules/commands/cs_xop.cpp
index 1b9348026..1b9348026 100644
--- a/modules/core/cs_xop.cpp
+++ b/modules/commands/cs_xop.cpp
diff --git a/modules/core/gl_global.cpp b/modules/commands/gl_global.cpp
index 80c42e017..80c42e017 100644
--- a/modules/core/gl_global.cpp
+++ b/modules/commands/gl_global.cpp
diff --git a/modules/core/help.cpp b/modules/commands/help.cpp
index 2a4f25b6c..2a4f25b6c 100644
--- a/modules/core/help.cpp
+++ b/modules/commands/help.cpp
diff --git a/modules/core/hs_del.cpp b/modules/commands/hs_del.cpp
index 541986aff..541986aff 100644
--- a/modules/core/hs_del.cpp
+++ b/modules/commands/hs_del.cpp
diff --git a/modules/core/hs_group.cpp b/modules/commands/hs_group.cpp
index 8d6fbd630..8d6fbd630 100644
--- a/modules/core/hs_group.cpp
+++ b/modules/commands/hs_group.cpp
diff --git a/modules/core/hs_list.cpp b/modules/commands/hs_list.cpp
index 589eef3e1..589eef3e1 100644
--- a/modules/core/hs_list.cpp
+++ b/modules/commands/hs_list.cpp
diff --git a/modules/core/hs_off.cpp b/modules/commands/hs_off.cpp
index a3f11c2bd..a3f11c2bd 100644
--- a/modules/core/hs_off.cpp
+++ b/modules/commands/hs_off.cpp
diff --git a/modules/core/hs_on.cpp b/modules/commands/hs_on.cpp
index 0ba124ba1..0ba124ba1 100644
--- a/modules/core/hs_on.cpp
+++ b/modules/commands/hs_on.cpp
diff --git a/modules/extra/hs_request.cpp b/modules/commands/hs_request.cpp
index 7686794f5..7686794f5 100644
--- a/modules/extra/hs_request.cpp
+++ b/modules/commands/hs_request.cpp
diff --git a/modules/core/hs_set.cpp b/modules/commands/hs_set.cpp
index 4711022db..4711022db 100644
--- a/modules/core/hs_set.cpp
+++ b/modules/commands/hs_set.cpp
diff --git a/modules/core/ms_cancel.cpp b/modules/commands/ms_cancel.cpp
index e5beffa10..e5beffa10 100644
--- a/modules/core/ms_cancel.cpp
+++ b/modules/commands/ms_cancel.cpp
diff --git a/modules/core/ms_check.cpp b/modules/commands/ms_check.cpp
index 3019e270f..3019e270f 100644
--- a/modules/core/ms_check.cpp
+++ b/modules/commands/ms_check.cpp
diff --git a/modules/core/ms_del.cpp b/modules/commands/ms_del.cpp
index 991adff2b..991adff2b 100644
--- a/modules/core/ms_del.cpp
+++ b/modules/commands/ms_del.cpp
diff --git a/modules/core/ms_ignore.cpp b/modules/commands/ms_ignore.cpp
index c8b9c19e6..c8b9c19e6 100644
--- a/modules/core/ms_ignore.cpp
+++ b/modules/commands/ms_ignore.cpp
diff --git a/modules/core/ms_info.cpp b/modules/commands/ms_info.cpp
index 9fdb467c9..9fdb467c9 100644
--- a/modules/core/ms_info.cpp
+++ b/modules/commands/ms_info.cpp
diff --git a/modules/core/ms_list.cpp b/modules/commands/ms_list.cpp
index 26821a413..26821a413 100644
--- a/modules/core/ms_list.cpp
+++ b/modules/commands/ms_list.cpp
diff --git a/modules/core/ms_read.cpp b/modules/commands/ms_read.cpp
index f275f8d7d..f275f8d7d 100644
--- a/modules/core/ms_read.cpp
+++ b/modules/commands/ms_read.cpp
diff --git a/modules/core/ms_rsend.cpp b/modules/commands/ms_rsend.cpp
index 37c633e02..37c633e02 100644
--- a/modules/core/ms_rsend.cpp
+++ b/modules/commands/ms_rsend.cpp
diff --git a/modules/core/ms_send.cpp b/modules/commands/ms_send.cpp
index 9397e7ad7..9397e7ad7 100644
--- a/modules/core/ms_send.cpp
+++ b/modules/commands/ms_send.cpp
diff --git a/modules/core/ms_sendall.cpp b/modules/commands/ms_sendall.cpp
index 7af5ac7af..7af5ac7af 100644
--- a/modules/core/ms_sendall.cpp
+++ b/modules/commands/ms_sendall.cpp
diff --git a/modules/core/ms_set.cpp b/modules/commands/ms_set.cpp
index 1aa3f469d..1aa3f469d 100644
--- a/modules/core/ms_set.cpp
+++ b/modules/commands/ms_set.cpp
diff --git a/modules/core/ms_staff.cpp b/modules/commands/ms_staff.cpp
index 6264dbea4..6264dbea4 100644
--- a/modules/core/ms_staff.cpp
+++ b/modules/commands/ms_staff.cpp
diff --git a/modules/core/ns_access.cpp b/modules/commands/ns_access.cpp
index df9ae6eed..df9ae6eed 100644
--- a/modules/core/ns_access.cpp
+++ b/modules/commands/ns_access.cpp
diff --git a/modules/core/ns_ajoin.cpp b/modules/commands/ns_ajoin.cpp
index 4f35f28b8..4f35f28b8 100644
--- a/modules/core/ns_ajoin.cpp
+++ b/modules/commands/ns_ajoin.cpp
diff --git a/modules/core/ns_alist.cpp b/modules/commands/ns_alist.cpp
index f502b4344..f502b4344 100644
--- a/modules/core/ns_alist.cpp
+++ b/modules/commands/ns_alist.cpp
diff --git a/modules/core/ns_cert.cpp b/modules/commands/ns_cert.cpp
index fbd75d597..fbd75d597 100644
--- a/modules/core/ns_cert.cpp
+++ b/modules/commands/ns_cert.cpp
diff --git a/modules/core/ns_drop.cpp b/modules/commands/ns_drop.cpp
index 7960652ff..7960652ff 100644
--- a/modules/core/ns_drop.cpp
+++ b/modules/commands/ns_drop.cpp
diff --git a/modules/core/ns_getemail.cpp b/modules/commands/ns_getemail.cpp
index fa27e5174..fa27e5174 100644
--- a/modules/core/ns_getemail.cpp
+++ b/modules/commands/ns_getemail.cpp
diff --git a/modules/core/ns_getpass.cpp b/modules/commands/ns_getpass.cpp
index 9ebea5263..9ebea5263 100644
--- a/modules/core/ns_getpass.cpp
+++ b/modules/commands/ns_getpass.cpp
diff --git a/modules/core/ns_ghost.cpp b/modules/commands/ns_ghost.cpp
index 37dcef9c7..37dcef9c7 100644
--- a/modules/core/ns_ghost.cpp
+++ b/modules/commands/ns_ghost.cpp
diff --git a/modules/core/ns_group.cpp b/modules/commands/ns_group.cpp
index 2e23e1f51..2e23e1f51 100644
--- a/modules/core/ns_group.cpp
+++ b/modules/commands/ns_group.cpp
diff --git a/modules/core/ns_identify.cpp b/modules/commands/ns_identify.cpp
index b0a375cd2..b0a375cd2 100644
--- a/modules/core/ns_identify.cpp
+++ b/modules/commands/ns_identify.cpp
diff --git a/modules/core/ns_info.cpp b/modules/commands/ns_info.cpp
index 5a6d9dc0c..5a6d9dc0c 100644
--- a/modules/core/ns_info.cpp
+++ b/modules/commands/ns_info.cpp
diff --git a/modules/core/ns_list.cpp b/modules/commands/ns_list.cpp
index 96049ba02..96049ba02 100644
--- a/modules/core/ns_list.cpp
+++ b/modules/commands/ns_list.cpp
diff --git a/modules/core/ns_logout.cpp b/modules/commands/ns_logout.cpp
index 476330a11..476330a11 100644
--- a/modules/core/ns_logout.cpp
+++ b/modules/commands/ns_logout.cpp
diff --git a/modules/core/ns_recover.cpp b/modules/commands/ns_recover.cpp
index 5e45aab9a..5e45aab9a 100644
--- a/modules/core/ns_recover.cpp
+++ b/modules/commands/ns_recover.cpp
diff --git a/modules/core/ns_register.cpp b/modules/commands/ns_register.cpp
index 552551994..552551994 100644
--- a/modules/core/ns_register.cpp
+++ b/modules/commands/ns_register.cpp
diff --git a/modules/core/ns_release.cpp b/modules/commands/ns_release.cpp
index 20a3e295c..20a3e295c 100644
--- a/modules/core/ns_release.cpp
+++ b/modules/commands/ns_release.cpp
diff --git a/modules/core/ns_resetpass.cpp b/modules/commands/ns_resetpass.cpp
index b0d40226f..b0d40226f 100644
--- a/modules/core/ns_resetpass.cpp
+++ b/modules/commands/ns_resetpass.cpp
diff --git a/modules/core/ns_saset.cpp b/modules/commands/ns_saset.cpp
index a4aa2f422..a4aa2f422 100644
--- a/modules/core/ns_saset.cpp
+++ b/modules/commands/ns_saset.cpp
diff --git a/modules/core/ns_saset_noexpire.cpp b/modules/commands/ns_saset_noexpire.cpp
index 1bff9b461..1bff9b461 100644
--- a/modules/core/ns_saset_noexpire.cpp
+++ b/modules/commands/ns_saset_noexpire.cpp
diff --git a/modules/core/ns_sendpass.cpp b/modules/commands/ns_sendpass.cpp
index ca185c68b..ca185c68b 100644
--- a/modules/core/ns_sendpass.cpp
+++ b/modules/commands/ns_sendpass.cpp
diff --git a/modules/core/ns_set.cpp b/modules/commands/ns_set.cpp
index ad7acb5a4..ad7acb5a4 100644
--- a/modules/core/ns_set.cpp
+++ b/modules/commands/ns_set.cpp
diff --git a/modules/core/ns_set_autoop.cpp b/modules/commands/ns_set_autoop.cpp
index ff178141f..ff178141f 100644
--- a/modules/core/ns_set_autoop.cpp
+++ b/modules/commands/ns_set_autoop.cpp
diff --git a/modules/core/ns_set_email.cpp b/modules/commands/ns_set_email.cpp
index f0914eb51..f0914eb51 100644
--- a/modules/core/ns_set_email.cpp
+++ b/modules/commands/ns_set_email.cpp
diff --git a/modules/core/ns_set_greet.cpp b/modules/commands/ns_set_greet.cpp
index 03bcd3834..03bcd3834 100644
--- a/modules/core/ns_set_greet.cpp
+++ b/modules/commands/ns_set_greet.cpp
diff --git a/modules/core/ns_set_hide.cpp b/modules/commands/ns_set_hide.cpp
index e0fb0e85e..e0fb0e85e 100644
--- a/modules/core/ns_set_hide.cpp
+++ b/modules/commands/ns_set_hide.cpp
diff --git a/modules/core/ns_set_kill.cpp b/modules/commands/ns_set_kill.cpp
index f57a93893..f57a93893 100644
--- a/modules/core/ns_set_kill.cpp
+++ b/modules/commands/ns_set_kill.cpp
diff --git a/modules/core/ns_set_language.cpp b/modules/commands/ns_set_language.cpp
index 3429ad688..3429ad688 100644
--- a/modules/core/ns_set_language.cpp
+++ b/modules/commands/ns_set_language.cpp
diff --git a/modules/core/ns_set_message.cpp b/modules/commands/ns_set_message.cpp
index 677002c78..677002c78 100644
--- a/modules/core/ns_set_message.cpp
+++ b/modules/commands/ns_set_message.cpp
diff --git a/modules/extra/ns_set_misc.cpp b/modules/commands/ns_set_misc.cpp
index f0ee269cc..f0ee269cc 100644
--- a/modules/extra/ns_set_misc.cpp
+++ b/modules/commands/ns_set_misc.cpp
diff --git a/modules/core/ns_set_private.cpp b/modules/commands/ns_set_private.cpp
index 63fec57d6..63fec57d6 100644
--- a/modules/core/ns_set_private.cpp
+++ b/modules/commands/ns_set_private.cpp
diff --git a/modules/core/ns_set_secure.cpp b/modules/commands/ns_set_secure.cpp
index 31314a5a5..31314a5a5 100644
--- a/modules/core/ns_set_secure.cpp
+++ b/modules/commands/ns_set_secure.cpp
diff --git a/modules/core/ns_status.cpp b/modules/commands/ns_status.cpp
index 9d8b58fcb..9d8b58fcb 100644
--- a/modules/core/ns_status.cpp
+++ b/modules/commands/ns_status.cpp
diff --git a/modules/core/ns_suspend.cpp b/modules/commands/ns_suspend.cpp
index 50cf039ce..50cf039ce 100644
--- a/modules/core/ns_suspend.cpp
+++ b/modules/commands/ns_suspend.cpp
diff --git a/modules/core/ns_update.cpp b/modules/commands/ns_update.cpp
index d870e3532..d870e3532 100644
--- a/modules/core/ns_update.cpp
+++ b/modules/commands/ns_update.cpp
diff --git a/modules/core/os_akill.cpp b/modules/commands/os_akill.cpp
index 05602a746..05602a746 100644
--- a/modules/core/os_akill.cpp
+++ b/modules/commands/os_akill.cpp
diff --git a/modules/core/os_chankill.cpp b/modules/commands/os_chankill.cpp
index 9ce895c59..9ce895c59 100644
--- a/modules/core/os_chankill.cpp
+++ b/modules/commands/os_chankill.cpp
diff --git a/modules/core/os_config.cpp b/modules/commands/os_config.cpp
index 1d1fead33..1d1fead33 100644
--- a/modules/core/os_config.cpp
+++ b/modules/commands/os_config.cpp
diff --git a/modules/extra/os_defcon.cpp b/modules/commands/os_defcon.cpp
index ea513e1dc..ea513e1dc 100644
--- a/modules/extra/os_defcon.cpp
+++ b/modules/commands/os_defcon.cpp
diff --git a/modules/core/os_forbid.cpp b/modules/commands/os_forbid.cpp
index d4b4c2b41..d4b4c2b41 100644
--- a/modules/core/os_forbid.cpp
+++ b/modules/commands/os_forbid.cpp
diff --git a/modules/core/os_forbid.h b/modules/commands/os_forbid.h
index b91aa3be8..b91aa3be8 100644
--- a/modules/core/os_forbid.h
+++ b/modules/commands/os_forbid.h
diff --git a/modules/core/os_ignore.cpp b/modules/commands/os_ignore.cpp
index 9f50ec967..9f50ec967 100644
--- a/modules/core/os_ignore.cpp
+++ b/modules/commands/os_ignore.cpp
diff --git a/modules/core/os_ignore.h b/modules/commands/os_ignore.h
index 056161a79..056161a79 100644
--- a/modules/core/os_ignore.h
+++ b/modules/commands/os_ignore.h
diff --git a/modules/core/os_jupe.cpp b/modules/commands/os_jupe.cpp
index a689b33e2..a689b33e2 100644
--- a/modules/core/os_jupe.cpp
+++ b/modules/commands/os_jupe.cpp
diff --git a/modules/core/os_kick.cpp b/modules/commands/os_kick.cpp
index 341ea1ee6..341ea1ee6 100644
--- a/modules/core/os_kick.cpp
+++ b/modules/commands/os_kick.cpp
diff --git a/modules/core/os_kill.cpp b/modules/commands/os_kill.cpp
index 11a0636ef..11a0636ef 100644
--- a/modules/core/os_kill.cpp
+++ b/modules/commands/os_kill.cpp
diff --git a/modules/core/os_list.cpp b/modules/commands/os_list.cpp
index 9a582f97b..9a582f97b 100644
--- a/modules/core/os_list.cpp
+++ b/modules/commands/os_list.cpp
diff --git a/modules/core/os_login.cpp b/modules/commands/os_login.cpp
index 94a82e334..94a82e334 100644
--- a/modules/core/os_login.cpp
+++ b/modules/commands/os_login.cpp
diff --git a/modules/core/os_mode.cpp b/modules/commands/os_mode.cpp
index b3e62ca25..b3e62ca25 100644
--- a/modules/core/os_mode.cpp
+++ b/modules/commands/os_mode.cpp
diff --git a/modules/core/os_modinfo.cpp b/modules/commands/os_modinfo.cpp
index 38d9cf905..38d9cf905 100644
--- a/modules/core/os_modinfo.cpp
+++ b/modules/commands/os_modinfo.cpp
diff --git a/modules/core/os_module.cpp b/modules/commands/os_module.cpp
index 562e130aa..562e130aa 100644
--- a/modules/core/os_module.cpp
+++ b/modules/commands/os_module.cpp
diff --git a/modules/core/os_news.cpp b/modules/commands/os_news.cpp
index 9c9aae0a4..9c9aae0a4 100644
--- a/modules/core/os_news.cpp
+++ b/modules/commands/os_news.cpp
diff --git a/modules/core/os_news.h b/modules/commands/os_news.h
index c55f56d42..c55f56d42 100644
--- a/modules/core/os_news.h
+++ b/modules/commands/os_news.h
diff --git a/modules/core/os_noop.cpp b/modules/commands/os_noop.cpp
index 2eec522a3..2eec522a3 100644
--- a/modules/core/os_noop.cpp
+++ b/modules/commands/os_noop.cpp
diff --git a/modules/core/os_oline.cpp b/modules/commands/os_oline.cpp
index adebc52a1..adebc52a1 100644
--- a/modules/core/os_oline.cpp
+++ b/modules/commands/os_oline.cpp
diff --git a/modules/core/os_oper.cpp b/modules/commands/os_oper.cpp
index 237c0b5bc..237c0b5bc 100644
--- a/modules/core/os_oper.cpp
+++ b/modules/commands/os_oper.cpp
diff --git a/modules/core/os_reload.cpp b/modules/commands/os_reload.cpp
index d4d8eac7c..d4d8eac7c 100644
--- a/modules/core/os_reload.cpp
+++ b/modules/commands/os_reload.cpp
diff --git a/modules/core/os_session.cpp b/modules/commands/os_session.cpp
index 990cd1b4b..990cd1b4b 100644
--- a/modules/core/os_session.cpp
+++ b/modules/commands/os_session.cpp
diff --git a/modules/core/os_session.h b/modules/commands/os_session.h
index faab37934..faab37934 100644
--- a/modules/core/os_session.h
+++ b/modules/commands/os_session.h
diff --git a/modules/core/os_set.cpp b/modules/commands/os_set.cpp
index 2a50f851c..2a50f851c 100644
--- a/modules/core/os_set.cpp
+++ b/modules/commands/os_set.cpp
diff --git a/modules/core/os_shutdown.cpp b/modules/commands/os_shutdown.cpp
index bc3a19353..bc3a19353 100644
--- a/modules/core/os_shutdown.cpp
+++ b/modules/commands/os_shutdown.cpp
diff --git a/modules/core/os_stats.cpp b/modules/commands/os_stats.cpp
index 2c20395d0..2c20395d0 100644
--- a/modules/core/os_stats.cpp
+++ b/modules/commands/os_stats.cpp
diff --git a/modules/core/os_svsnick.cpp b/modules/commands/os_svsnick.cpp
index dc7c77a6c..dc7c77a6c 100644
--- a/modules/core/os_svsnick.cpp
+++ b/modules/commands/os_svsnick.cpp
diff --git a/modules/core/os_sxline.cpp b/modules/commands/os_sxline.cpp
index f949cb7d2..f949cb7d2 100644
--- a/modules/core/os_sxline.cpp
+++ b/modules/commands/os_sxline.cpp
diff --git a/modules/core/os_update.cpp b/modules/commands/os_update.cpp
index 776835cf7..776835cf7 100644
--- a/modules/core/os_update.cpp
+++ b/modules/commands/os_update.cpp
diff --git a/modules/core/db_mysql.cpp b/modules/database/db_mysql.cpp
index 4e6a7de4f..59ab412b3 100644
--- a/modules/core/db_mysql.cpp
+++ b/modules/database/db_mysql.cpp
@@ -1,6 +1,6 @@
#include "module.h"
#include "../extra/sql.h"
-#include "os_session.h"
+#include "../commands/os_session.h"
static Anope::string ToString(const std::vector<Anope::string> &strings)
{
diff --git a/modules/core/db_mysql_live.cpp b/modules/database/db_mysql_live.cpp
index ecfdc70d1..ecfdc70d1 100644
--- a/modules/core/db_mysql_live.cpp
+++ b/modules/database/db_mysql_live.cpp
diff --git a/modules/core/db_plain.cpp b/modules/database/db_plain.cpp
index c41cea2d2..e2ade7974 100644
--- a/modules/core/db_plain.cpp
+++ b/modules/database/db_plain.cpp
@@ -11,7 +11,7 @@
/*************************************************************************/
#include "module.h"
-#include "os_session.h"
+#include "../commands/os_session.h"
Anope::string DatabaseFile;
std::stringstream db_buffer;
diff --git a/modules/core/enc_md5.cpp b/modules/encryption/enc_md5.cpp
index 109f31dfc..109f31dfc 100644
--- a/modules/core/enc_md5.cpp
+++ b/modules/encryption/enc_md5.cpp
diff --git a/modules/core/enc_none.cpp b/modules/encryption/enc_none.cpp
index 180b431c2..180b431c2 100644
--- a/modules/core/enc_none.cpp
+++ b/modules/encryption/enc_none.cpp
diff --git a/modules/core/enc_old.cpp b/modules/encryption/enc_old.cpp
index e68887c49..e68887c49 100644
--- a/modules/core/enc_old.cpp
+++ b/modules/encryption/enc_old.cpp
diff --git a/modules/core/enc_sha1.cpp b/modules/encryption/enc_sha1.cpp
index 4fe321bdc..4fe321bdc 100644
--- a/modules/core/enc_sha1.cpp
+++ b/modules/encryption/enc_sha1.cpp
diff --git a/modules/core/enc_sha256.cpp b/modules/encryption/enc_sha256.cpp
index 3034f3731..3034f3731 100644
--- a/modules/core/enc_sha256.cpp
+++ b/modules/encryption/enc_sha256.cpp
diff --git a/modules/extra/language/cs_appendtopic.de_DE.po b/modules/extra/language/cs_appendtopic.de_DE.po
deleted file mode 100644
index 2305709c1..000000000
--- a/modules/extra/language/cs_appendtopic.de_DE.po
+++ /dev/null
@@ -1,37 +0,0 @@
-# German translations for cs_appendtopic
-# German messages for cs_appendtopic
-# Copyright (C) 2011 Anope Team
-# This file is distributed under the same license as Anope IRC Services
-# Adam <adam@anope.org>, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Anope\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-06-17 13:49-0400\n"
-"PO-Revision-Date: 2010-09-25 20:57-0400\n"
-"Last-Translator: Adam <adam@anope.org>\n"
-"Language-Team: German\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../cs_appendtopic.cpp:50
-msgid "Add text to a channels topic"
-msgstr "Fьgt einen Text zu einem Channel-Topic hinzu."
-
-#: ../cs_appendtopic.cpp:90 ../cs_appendtopic.cpp:101
-msgid "Syntax: APPENDTOPIC channel text"
-msgstr "Syntax: APPENDTOPIC Channel Text"
-
-#: ../cs_appendtopic.cpp:92
-msgid ""
-"This command allows users to append text to a currently set\n"
-"channel topic. When TOPICLOCK is on, the topic is updated and\n"
-"the new, updated topic is locked."
-msgstr ""
-"Dieser Befehl erlaubt Benutzern, einen Text zu dem vorhandenen Channel-"
-"Topic\n"
-"hinzuzufьgen. Wenn TOPICLOCK gesetzt ist, wird das Topic aktualisiert\n"
-"und das neue, aktualisierte Topic wird gesperrt."
diff --git a/modules/extra/language/cs_appendtopic.it_IT.po b/modules/extra/language/cs_appendtopic.it_IT.po
deleted file mode 100644
index 43620d0b2..000000000
--- a/modules/extra/language/cs_appendtopic.it_IT.po
+++ /dev/null
@@ -1,39 +0,0 @@
-# Italian translations for cs_appendtopic
-# Traduzioni italiane per il cs_appendtopic
-# Copyright (C) 2011 Anope Team
-# This file is distributed under the same license as Anope IRC Services
-# Adam <adam@anope.org>, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Anope\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-06-17 13:49-0400\n"
-"PO-Revision-Date: 2010-09-25 21:04-0400\n"
-"Last-Translator: Adam <adam@anope.org>\n"
-"Language-Team: Italian\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../cs_appendtopic.cpp:50
-#, fuzzy
-msgid "Add text to a channels topic"
-msgstr " APPENDTOPIC Aggiunge del testo al topic di un canale"
-
-#: ../cs_appendtopic.cpp:90 ../cs_appendtopic.cpp:101
-msgid "Syntax: APPENDTOPIC channel text"
-msgstr "Sintassi: APPENDTOPIC canale testo"
-
-#: ../cs_appendtopic.cpp:92
-msgid ""
-"This command allows users to append text to a currently set\n"
-"channel topic. When TOPICLOCK is on, the topic is updated and\n"
-"the new, updated topic is locked."
-msgstr ""
-"Questo comando permette agli utenti di aggiungere del testo ad un topic di "
-"un canale\n"
-"giа impostato. Se TOPICLOCK и attivato, il topic viene aggiornato e il nuovo "
-"topic\n"
-"viene bloccato."
diff --git a/modules/extra/language/cs_appendtopic.nl_NL.po b/modules/extra/language/cs_appendtopic.nl_NL.po
deleted file mode 100644
index 21d81eaba..000000000
--- a/modules/extra/language/cs_appendtopic.nl_NL.po
+++ /dev/null
@@ -1,38 +0,0 @@
-# Dutch translations for cs_appendtopic
-# Engelse vertalingen voor het cs_appendtopic
-# Copyright (C) 2011 Anope Team
-# This file is distributed under the same license as Anope IRC Services
-# Adam <adam@anope.org>, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Anope\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-06-17 13:49-0400\n"
-"PO-Revision-Date: 2010-09-25 20:55-0400\n"
-"Last-Translator: Adam <adam@anope.org>\n"
-"Language-Team: Dutch\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../cs_appendtopic.cpp:50
-#, fuzzy
-msgid "Add text to a channels topic"
-msgstr " APPENDTOPIC Voeg tekst aan een kanaal onderwerp toe"
-
-#: ../cs_appendtopic.cpp:90 ../cs_appendtopic.cpp:101
-msgid "Syntax: APPENDTOPIC channel text"
-msgstr "Gebruik: APPENDTOPIC kanaal tekst"
-
-#: ../cs_appendtopic.cpp:92
-msgid ""
-"This command allows users to append text to a currently set\n"
-"channel topic. When TOPICLOCK is on, the topic is updated and\n"
-"the new, updated topic is locked."
-msgstr ""
-"Dit command stelt gebruikers in staat om text toe te voegen\n"
-"achter het huidige onderwerp van een kanaal. Als TOPICLOCK aan\n"
-"staat, zal het onderwerp worden bijgewerkt en zal het nieuwe,\n"
-"bijgewerkte topic worden geforceerd."
diff --git a/modules/extra/language/cs_appendtopic.pt_PT.po b/modules/extra/language/cs_appendtopic.pt_PT.po
deleted file mode 100644
index e97d94a90..000000000
--- a/modules/extra/language/cs_appendtopic.pt_PT.po
+++ /dev/null
@@ -1,36 +0,0 @@
-# Portuguese translations for cs_appendtopic
-# Copyright (C) 2011 Anope Team
-# This file is distributed under the same license as Anope IRC Services
-# Adam <adam@anope.org>, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Anope\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-06-17 13:49-0400\n"
-"PO-Revision-Date: 2010-09-25 21:00-0400\n"
-"Last-Translator: Adam <adam@anope.org>\n"
-"Language-Team: Portuguese\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../cs_appendtopic.cpp:50
-#, fuzzy
-msgid "Add text to a channels topic"
-msgstr " APPENDTOPIC Adiciona texto ao tуpico de um canal"
-
-#: ../cs_appendtopic.cpp:90 ../cs_appendtopic.cpp:101
-msgid "Syntax: APPENDTOPIC channel text"
-msgstr "Sintaxe: APPENDTOPIC canal texto"
-
-#: ../cs_appendtopic.cpp:92
-msgid ""
-"This command allows users to append text to a currently set\n"
-"channel topic. When TOPICLOCK is on, the topic is updated and\n"
-"the new, updated topic is locked."
-msgstr ""
-"Este comando permite aos usuбrios anexar texto a um tуpico de canal\n"
-"jб definido. Quando TOPICLOCK estб ativado, o tуpico й atualizado e\n"
-"o novo tуpico й travado."
diff --git a/modules/extra/language/cs_appendtopic.ru_RU.po b/modules/extra/language/cs_appendtopic.ru_RU.po
deleted file mode 100644
index cb5566a8c..000000000
--- a/modules/extra/language/cs_appendtopic.ru_RU.po
+++ /dev/null
@@ -1,41 +0,0 @@
-# Russian translations for cs_appendtopic
-# ?????????? ???????? ??? ?????? cs_appendtopic
-# Copyright (C) 2011 Anope Team
-# This file is distributed under the same license as Anope IRC Services
-# Adam <adam@anope.org>, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Anope\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-06-17 13:49-0400\n"
-"PO-Revision-Date: 2010-09-25 21:02-0400\n"
-"Last-Translator: Adam <adam@anope.org>\n"
-"Language-Team: Russian\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
-"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-
-#: ../cs_appendtopic.cpp:50
-#, fuzzy
-msgid "Add text to a channels topic"
-msgstr " APPENDTOPIC Добавляет текст к топику канала"
-
-#: ../cs_appendtopic.cpp:90 ../cs_appendtopic.cpp:101
-msgid "Syntax: APPENDTOPIC channel text"
-msgstr "Синтаксис: APPENDTOPIC #канал текст"
-
-#: ../cs_appendtopic.cpp:92
-msgid ""
-"This command allows users to append text to a currently set\n"
-"channel topic. When TOPICLOCK is on, the topic is updated and\n"
-"the new, updated topic is locked."
-msgstr ""
-"Данная команда позволяет добавить текст к топику, который установлен на "
-"указанном\n"
-"канале. Если активирован режим TOPICLOCK, топик будет обновлен и "
-"заблокирован.\n"
-"Примечание: текст будет ДОБАВЛЕН к топику, то есть старый топик удален НЕ "
-"БУДЕТ."
diff --git a/modules/extra/language/cs_enforce.de_DE.po b/modules/extra/language/cs_enforce.de_DE.po
deleted file mode 100644
index 5e8ccd94b..000000000
--- a/modules/extra/language/cs_enforce.de_DE.po
+++ /dev/null
@@ -1,86 +0,0 @@
-# German translations for cs_enforce
-# German messages for cs_enforce
-# Copyright (C) 2011 Anope Team
-# This file is distributed under the same license as Anope IRC Services
-# Adam <adam@anope.org>, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Anope\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-06-17 13:49-0400\n"
-"PO-Revision-Date: 2010-09-25 21:12-0400\n"
-"Last-Translator: Adam <adam@anope.org>\n"
-"Language-Team: German\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../cs_enforce.cpp:127
-#, fuzzy
-msgid "Enforce various channel modes and set options"
-msgstr " ENFORCE Erzwingt verschieden Modes und SET Optionen"
-
-#: ../cs_enforce.cpp:180
-msgid ""
-"Enforce various channel modes and set options. The channel\n"
-"option indicates what channel to enforce the modes and options\n"
-"on. The what option indicates what modes and options to\n"
-"enforce, and can be any of SET, SECUREOPS, RESTRICTED, MODES,\n"
-"or +R. When left out, it defaults to SET.\n"
-" \n"
-"If what is SET, it will enforce SECUREOPS and RESTRICTED\n"
-"on the users currently in the channel, if they are set. Give\n"
-"SECUREOPS to enforce the SECUREOPS option, even if it is not\n"
-"enabled. Use RESTRICTED to enfore the RESTRICTED option, also\n"
-"if it's not enabled."
-msgstr ""
-"Erzwingt verschieden Modes und SET Optionen. Die Channel\n"
-"Option zeigt dir den Channel an, indem Modes und Optionen\n"
-"zu erzwingen sind. Die was Option zeigt dir welche Modes\n"
-"und Optionen zu erzwingen sind. Die kцnnen nur SET, SECUREOPS,\n"
-"RESTRICTED, MODES oder +R sein.Default ist SET.\n"
-" \n"
-"Wenn was SET ist, wird SECUREOPS und RESTRICTED\n"
-"auf die User die z.Z.in Channel sind erzwungen, wenn sie AN sind.\n"
-"Benutze SECUREOPS oder RESTRICTED , um die Optionen einzeln\n"
-"zu erzwingen, also wenn sie nicht eingeschaltet sind."
-
-#: ../cs_enforce.cpp:147 ../cs_enforce.cpp:152 ../cs_enforce.cpp:157
-#: ../cs_enforce.cpp:162 ../cs_enforce.cpp:167
-#, c-format
-msgid "Enforced %s"
-msgstr "Erzwungen %s"
-
-#: ../cs_enforce.cpp:193
-msgid ""
-"If what is MODES, it will enforce channelmode +R if it is\n"
-"set. If +R is specified for what, the +R channelmode will\n"
-"also be enforced, but even if it is not set. If it is not set,\n"
-"users will be banned to ensure they don't just rejoin."
-msgstr ""
-"Wenn was MODES ist, wird das ChannelMode +R erzwungen\n"
-"falls an. Wenn was +R ist, wird +R erzwungen aber eben\n"
-"wenn noch nicht als Channel-Mode ist. Wenn +R noch nicht als\n"
-"Channel-Mode war werden alle User aus den Channel gebannt um\n"
-"sicher zu sein das sie nicht rejoinen."
-
-#: ../cs_enforce.cpp:198
-msgid ""
-"If what is MODES, nothing will be enforced, since it would\n"
-"enforce modes that the current ircd does not support. If +R is\n"
-"specified for what, an equalivant of channelmode +R on\n"
-"other ircds will be enforced. All users that are in the channel\n"
-"but have not identified for their nickname will be kicked and\n"
-"banned from the channel."
-msgstr ""
-"Wenn was MODES ist, wird nichts erzwungen weil es MODES seine\n"
-"kцnnen die dein IRCD nicht unterstьtzt. Wenn was +R ist\n"
-"oder ein Modes was auf ein anderen IRCD gleich +R ist, wird es\n"
-"erzwungen. Alle User die nicht fьr deren Nicknamen identifiziert\n"
-"sind werden aus den Channel gekickt und gebannt."
-
-#: ../cs_enforce.cpp:178 ../cs_enforce.cpp:210
-msgid "Syntax: ENFORCE channel [what]"
-msgstr "Syntax: ENFORCE Channel [was]"
diff --git a/modules/extra/language/cs_enforce.it_IT.po b/modules/extra/language/cs_enforce.it_IT.po
deleted file mode 100644
index 4721e823f..000000000
--- a/modules/extra/language/cs_enforce.it_IT.po
+++ /dev/null
@@ -1,86 +0,0 @@
-# Italian translations for cs_enforce
-# Traduzioni italiane per il cs_enforce
-# Copyright (C) 2011 Anope Team
-# This file is distributed under the same license as Anope IRC Services
-# Adam <adam@anope.org>, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Anope\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-06-17 13:49-0400\n"
-"PO-Revision-Date: 2010-09-25 21:55-0400\n"
-"Last-Translator: Adam <adam@anope.org>\n"
-"Language-Team: Italian\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../cs_enforce.cpp:127
-#, fuzzy
-msgid "Enforce various channel modes and set options"
-msgstr " ENFORCE Forza diversi modi di canale ed opzioni SET"
-
-#: ../cs_enforce.cpp:180
-msgid ""
-"Enforce various channel modes and set options. The channel\n"
-"option indicates what channel to enforce the modes and options\n"
-"on. The what option indicates what modes and options to\n"
-"enforce, and can be any of SET, SECUREOPS, RESTRICTED, MODES,\n"
-"or +R. When left out, it defaults to SET.\n"
-" \n"
-"If what is SET, it will enforce SECUREOPS and RESTRICTED\n"
-"on the users currently in the channel, if they are set. Give\n"
-"SECUREOPS to enforce the SECUREOPS option, even if it is not\n"
-"enabled. Use RESTRICTED to enfore the RESTRICTED option, also\n"
-"if it's not enabled."
-msgstr ""
-"Forza diversi modi di canale ed opzioni SET. Il parametro canale\n"
-"indica il canale sul quale forzare i modi e le opzioni. Il parametro\n"
-"cosa indica i modi e le opzioni da forzare, e possono essere\n"
-"qualsiasi delle opzioni SET, SECUREOPS, RESTRICTED, MODES, o +R.\n"
-"Se non specificato, viene sottointeso SET.\n"
-" \n"
-"Se cosa и SET, forzerа SECUREOPS e RESTRICTED sugli utenti\n"
-"attualmente nel canale, se sono impostati. Specifica SECUREOPS per\n"
-"forzare l'opzione SECUREOPS, anche se non и attivata. Specifica\n"
-"RESTRICTED per forzare l'opzione RESTRICTED, anche se non и\n"
-"attivata."
-
-#: ../cs_enforce.cpp:147 ../cs_enforce.cpp:152 ../cs_enforce.cpp:157
-#: ../cs_enforce.cpp:162 ../cs_enforce.cpp:167
-#, c-format
-msgid "Enforced %s"
-msgstr "Forzato %s"
-
-#: ../cs_enforce.cpp:193
-msgid ""
-"If what is MODES, it will enforce channelmode +R if it is\n"
-"set. If +R is specified for what, the +R channelmode will\n"
-"also be enforced, but even if it is not set. If it is not set,\n"
-"users will be banned to ensure they don't just rejoin."
-msgstr ""
-"Se cosa и MODES, forzerа il modo del canale +R se и impostato.\n"
-"Se +R и specificato per cosa, il modo del canale +R verrа\n"
-"forzato, anche se non и impostato. Se non и impostato, gli utenti\n"
-"verranno bannati per assicurare che non rientrino semplicemente."
-
-#: ../cs_enforce.cpp:198
-msgid ""
-"If what is MODES, nothing will be enforced, since it would\n"
-"enforce modes that the current ircd does not support. If +R is\n"
-"specified for what, an equalivant of channelmode +R on\n"
-"other ircds will be enforced. All users that are in the channel\n"
-"but have not identified for their nickname will be kicked and\n"
-"banned from the channel."
-msgstr ""
-"Se cosa и MODES, niente verrа forzato, siccome forzerebbe\n"
-"dei modi che l'ircd in uso non supporterebbe. Se +R и specificato\n"
-"per cosa, un modo equivalente a +R sui altri ircd verrа\n"
-"forzato. Tutti gli utenti presenti nel canale ma non identificati\n"
-"per il loro nickname verranno bannati ed espulsi dal canale."
-
-#: ../cs_enforce.cpp:178 ../cs_enforce.cpp:210
-msgid "Syntax: ENFORCE channel [what]"
-msgstr "Sintassi: ENFORCE canale [cosa]"
diff --git a/modules/extra/language/cs_enforce.nl_NL.po b/modules/extra/language/cs_enforce.nl_NL.po
deleted file mode 100644
index 935e8dce7..000000000
--- a/modules/extra/language/cs_enforce.nl_NL.po
+++ /dev/null
@@ -1,89 +0,0 @@
-# Dutch translations for cs_enforce
-# Engelse vertalingen voor het cs_enforce
-# Copyright (C) 2011 Anope Team
-# This file is distributed under the same license as the Anope IRC Services
-# Adam <adam@anope.org>, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Anope\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-06-17 13:49-0400\n"
-"PO-Revision-Date: 2010-09-25 21:07-0400\n"
-"Last-Translator: Adam <adam@anope.org>\n"
-"Language-Team: Dutch\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../cs_enforce.cpp:127
-#, fuzzy
-msgid "Enforce various channel modes and set options"
-msgstr " ENFORCE Forceer enkele kanaalmodes en set-opties"
-
-#: ../cs_enforce.cpp:180
-msgid ""
-"Enforce various channel modes and set options. The channel\n"
-"option indicates what channel to enforce the modes and options\n"
-"on. The what option indicates what modes and options to\n"
-"enforce, and can be any of SET, SECUREOPS, RESTRICTED, MODES,\n"
-"or +R. When left out, it defaults to SET.\n"
-" \n"
-"If what is SET, it will enforce SECUREOPS and RESTRICTED\n"
-"on the users currently in the channel, if they are set. Give\n"
-"SECUREOPS to enforce the SECUREOPS option, even if it is not\n"
-"enabled. Use RESTRICTED to enfore the RESTRICTED option, also\n"
-"if it's not enabled."
-msgstr ""
-"Forceer enkele kannalmodes en set-opties. De kanaal optie\n"
-"geeft aan op welk kanaal de modes en opties geforceerd moeten\n"
-"worden. De wat optie geeft aan welke modes en opties\n"
-"geforceerd moeten worden; dit kan SET, SECUREOPS, RESTRICTED,\n"
-"MODES, of +R zijn. Indien weggelaten is dit standaard SET.\n"
-" \n"
-"Als er voor wat SET wordt ingevuld, zullen SECUREOPS en\n"
-"RESTRICTED geforceerd worden op de gebruikers in het kanaal,\n"
-"maar alleen als die opties aangezet zijn voor het kanaal. Als\n"
-"SECUREOPS of RESTRICTED wordt gegeven voor wat zal die optie\n"
-"altijd geforceerd worden, ook als die niet is aangezet."
-
-#: ../cs_enforce.cpp:147 ../cs_enforce.cpp:152 ../cs_enforce.cpp:157
-#: ../cs_enforce.cpp:162 ../cs_enforce.cpp:167
-#, c-format
-msgid "Enforced %s"
-msgstr ""
-
-#: ../cs_enforce.cpp:193
-msgid ""
-"If what is MODES, it will enforce channelmode +R if it is\n"
-"set. If +R is specified for what, the +R channelmode will\n"
-"also be enforced, but even if it is not set. If it is not set,\n"
-"users will be banned to ensure they don't just rejoin."
-msgstr ""
-"Als er voor wat MODES wordt ingevuld, zal kanaalmode +R worden\n"
-"geforceerd, als die op het kanaal aan staat. Als +R wordt ingevuld,\n"
-"zal kanaalmode +R worden geforceerd, maar ook als die niet aanstaat voor het "
-"kanaal. Als +R niet aan staat, zullen alle ook\n"
-"gebanned worden om te zorgen dat ze niet opnieuw het kanaal binnen\n"
-"kunnen komen."
-
-#: ../cs_enforce.cpp:198
-msgid ""
-"If what is MODES, nothing will be enforced, since it would\n"
-"enforce modes that the current ircd does not support. If +R is\n"
-"specified for what, an equalivant of channelmode +R on\n"
-"other ircds will be enforced. All users that are in the channel\n"
-"but have not identified for their nickname will be kicked and\n"
-"banned from the channel."
-msgstr ""
-"Als er voor wat MODES wordt ingevuld, zal er niks gebeuren.\n"
-"Normaal gesproken wordt er een kanaalmode geforceerd die op deze\n"
-"server niet ondersteund wordt. Als +R wordt ingevuld voor wat\n"
-"zullen alle gebruikers die in het kanaal zitten maar zich niet\n"
-"hebben geidentificeerd voor hun nick uit het kanaal gekicked en\n"
-"verbannen worden."
-
-#: ../cs_enforce.cpp:178 ../cs_enforce.cpp:210
-msgid "Syntax: ENFORCE channel [what]"
-msgstr "Syntax: ENFORCE kanaal [wat]"
diff --git a/modules/extra/language/cs_enforce.pt_PT.po b/modules/extra/language/cs_enforce.pt_PT.po
deleted file mode 100644
index 955ea87aa..000000000
--- a/modules/extra/language/cs_enforce.pt_PT.po
+++ /dev/null
@@ -1,88 +0,0 @@
-# Portuguese translations for cs_enforce
-# Copyright (C) 2011 Anope Team
-# This file is distributed under the same license as the Anope IRC Services
-# Adam <adam@anope.org>, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Anope\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-06-17 13:49-0400\n"
-"PO-Revision-Date: 2010-09-25 21:24-0400\n"
-"Last-Translator: Adam <adam@anope.org>\n"
-"Language-Team: Portuguese\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../cs_enforce.cpp:127
-#, fuzzy
-msgid "Enforce various channel modes and set options"
-msgstr ""
-" ENFORCE Verifica o cumprimento de vбrios modos de canal e opзхes "
-"ajustadas"
-
-#: ../cs_enforce.cpp:180
-msgid ""
-"Enforce various channel modes and set options. The channel\n"
-"option indicates what channel to enforce the modes and options\n"
-"on. The what option indicates what modes and options to\n"
-"enforce, and can be any of SET, SECUREOPS, RESTRICTED, MODES,\n"
-"or +R. When left out, it defaults to SET.\n"
-" \n"
-"If what is SET, it will enforce SECUREOPS and RESTRICTED\n"
-"on the users currently in the channel, if they are set. Give\n"
-"SECUREOPS to enforce the SECUREOPS option, even if it is not\n"
-"enabled. Use RESTRICTED to enfore the RESTRICTED option, also\n"
-"if it's not enabled."
-msgstr ""
-"Verifica o cumprimento de vбrios modos de canal e opзхes ajustadas.\n"
-"O campo canal indica qual canal deve ter os modos e opзхes verificadas\n"
-"O campo opзгo indica quais modos e opзхes devem ser verificadas,\n"
-"e pode ser: SET, SECUREOPS, RESTRICTED, MODES ou +R\n"
-"Quando deixado em branco, o padrгo й SET.\n"
-" \n"
-"Se opзгo for SET, serгo verificadas as opзхes SECUREOPS e RESTRICTED\n"
-"para usuбrios que estiverem no canal, caso elas estejam ativadas. Use\n"
-"SECUREOPS para verificar a opзгo SECUREOPS, mesmo que ela nгo esteja "
-"ativada\n"
-"Use RESTRICTED para verificar a opзгo RESTRICTED, mesmo que ela nгo esteja\n"
-"ativada."
-
-#: ../cs_enforce.cpp:147 ../cs_enforce.cpp:152 ../cs_enforce.cpp:157
-#: ../cs_enforce.cpp:162 ../cs_enforce.cpp:167
-#, c-format
-msgid "Enforced %s"
-msgstr "Verificado %s"
-
-#: ../cs_enforce.cpp:193
-msgid ""
-"If what is MODES, it will enforce channelmode +R if it is\n"
-"set. If +R is specified for what, the +R channelmode will\n"
-"also be enforced, but even if it is not set. If it is not set,\n"
-"users will be banned to ensure they don't just rejoin."
-msgstr ""
-"Se opзгo for MODES, serб verificado o modo de canal +R caso ele\n"
-"esteja ativado. Se +R for especificado para opзгo, o modo de canal\n"
-"+R tambйm serб verificado, mesmo que ele nгo esteja ativado. Se ele nгo\n"
-"estiver ativado, os usuбrios serгo banidos para evitar que reentrem no canal."
-
-#: ../cs_enforce.cpp:198
-msgid ""
-"If what is MODES, nothing will be enforced, since it would\n"
-"enforce modes that the current ircd does not support. If +R is\n"
-"specified for what, an equalivant of channelmode +R on\n"
-"other ircds will be enforced. All users that are in the channel\n"
-"but have not identified for their nickname will be kicked and\n"
-"banned from the channel."
-msgstr ""
-"Se opзгo for MODES, nada serб verificado, visto que isto poderia\n"
-"verificar modos que o IRCd atual nгo suporta. Se +R for especificado\n"
-"para opзгo, um equivalente ao modo de canal +R em outros IRCds\n"
-"serб verificado. Todos os usuбrios que estгo no canal, mas nгo estejam\n"
-"identificados para seus nicks serгo kickados e banidos do canal."
-
-#: ../cs_enforce.cpp:178 ../cs_enforce.cpp:210
-msgid "Syntax: ENFORCE channel [what]"
-msgstr "Sintaxe: ENFORCE canal [opзгo]"
diff --git a/modules/extra/language/cs_enforce.ru_RU.po b/modules/extra/language/cs_enforce.ru_RU.po
deleted file mode 100644
index 2beef37cd..000000000
--- a/modules/extra/language/cs_enforce.ru_RU.po
+++ /dev/null
@@ -1,90 +0,0 @@
-# Russian translations for cs_enforce
-# ?????????? ???????? ??? ?????? cs_enforce
-# Copyright (C) 2011 Anope Team
-# This file is distributed under the same license as Anope IRC Services
-# Adam <adam@anope.org>, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Anope\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-06-17 13:49-0400\n"
-"PO-Revision-Date: 2010-09-25 21:38-0400\n"
-"Last-Translator: Adam <adam@anope.org>\n"
-"Language-Team: Russian\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
-"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-
-#: ../cs_enforce.cpp:127
-#, fuzzy
-msgid "Enforce various channel modes and set options"
-msgstr ""
-" ENFORCE Перепроверка и установка различных режимов и опций канала"
-
-#: ../cs_enforce.cpp:180
-msgid ""
-"Enforce various channel modes and set options. The channel\n"
-"option indicates what channel to enforce the modes and options\n"
-"on. The what option indicates what modes and options to\n"
-"enforce, and can be any of SET, SECUREOPS, RESTRICTED, MODES,\n"
-"or +R. When left out, it defaults to SET.\n"
-" \n"
-"If what is SET, it will enforce SECUREOPS and RESTRICTED\n"
-"on the users currently in the channel, if they are set. Give\n"
-"SECUREOPS to enforce the SECUREOPS option, even if it is not\n"
-"enabled. Use RESTRICTED to enfore the RESTRICTED option, also\n"
-"if it's not enabled."
-msgstr ""
-"Перепроверка и установка различных режимов и опций канала.\n"
-"Параметр указывает какие опции или режимы канала должны быть\n"
-"перепроверены. В качестве параметра могут быть указаны: SET, SECUREOPS,\n"
-"RESTRICTED, MODES, или +R. Если параметр не указан, по-умолчанию будет SET.\n"
-" \n"
-"Если в качестве параметра указано SET, будут перепроверены опции\n"
-"SECUREOPS и RESTRICTED относительно пользователей на указанном канале\n"
-"(при условии, что опции включены). Отдельно указанный параметр SECUREOPS\n"
-"применит опцию SECUREOPS (даже если она НЕ установлена). Параметр\n"
-"RESTRICTED применит опцию RESTRICTED (даже если она НЕ установлена)"
-
-#: ../cs_enforce.cpp:147 ../cs_enforce.cpp:152 ../cs_enforce.cpp:157
-#: ../cs_enforce.cpp:162 ../cs_enforce.cpp:167
-#, c-format
-msgid "Enforced %s"
-msgstr "Перепроверено: %s"
-
-#: ../cs_enforce.cpp:193
-msgid ""
-"If what is MODES, it will enforce channelmode +R if it is\n"
-"set. If +R is specified for what, the +R channelmode will\n"
-"also be enforced, but even if it is not set. If it is not set,\n"
-"users will be banned to ensure they don't just rejoin."
-msgstr ""
-"Если в качестве параметра указано MODES, будет перепроверен режим +R\n"
-"(если он установлен). Отдельно указанный параметр +R применит\n"
-"канальный режим +R, даже если он не установлен, и забанит всех "
-"пользователей,\n"
-"которые не идентифицировались к своему нику или не имеют зарегистрированного "
-"ника."
-
-#: ../cs_enforce.cpp:198
-msgid ""
-"If what is MODES, nothing will be enforced, since it would\n"
-"enforce modes that the current ircd does not support. If +R is\n"
-"specified for what, an equalivant of channelmode +R on\n"
-"other ircds will be enforced. All users that are in the channel\n"
-"but have not identified for their nickname will be kicked and\n"
-"banned from the channel."
-msgstr ""
-"Если в качестве параметра указано MODES, перепроверка осуществлена\n"
-"НЕ БУДЕТ, так как текущий IRCD не поддерживает необходимые режимы.\n"
-"Отдельно указанный параметр +R применит канальный режим, эквивалентный\n"
-"режиму +R и забанит всех пользователей, которые не идентифицировались к "
-"своему\n"
-"нику или не имеют зарегистрированного ника."
-
-#: ../cs_enforce.cpp:178 ../cs_enforce.cpp:210
-msgid "Syntax: ENFORCE channel [what]"
-msgstr "Синтаксис: ENFORCE #канал параметр"
diff --git a/modules/extra/language/cs_tban.de_DE.po b/modules/extra/language/cs_tban.de_DE.po
deleted file mode 100644
index 37ae58466..000000000
--- a/modules/extra/language/cs_tban.de_DE.po
+++ /dev/null
@@ -1,40 +0,0 @@
-# German translations for cs_tban
-# German messages for cs_tban
-# Copyright (C) 2011 Anope Team
-# This file is distributed under the same license as the Anope IRC Services
-# Adam <adam@anope.org>, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Anope\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-06-17 13:49-0400\n"
-"PO-Revision-Date: 2010-09-26 00:16-0400\n"
-"Last-Translator: Adam <adam@anope.org>\n"
-"Language-Team: German\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../cs_tban.cpp:85
-#, c-format
-msgid "%s banned from %s, will auto-expire in %s"
-msgstr "%s gebannt von %s, wird auto-auslaufen in %s"
-
-#: ../cs_tban.cpp:95
-msgid ""
-"Bans the given user from a channel for a specified length of\n"
-"time. If the ban is removed before by hand, it will NOT be replaced."
-msgstr ""
-"Bant ein User fьr eine bestimmte Zeit aus ein Channel\n"
-"Wenn der Ban manuell entfernt wird, wird es NICHT ersetzt."
-
-#: ../cs_tban.cpp:61
-#, fuzzy
-msgid "Bans the user for a given length of time"
-msgstr " TBAN Bant ein User fьr eine bestimmte Zeit aus ein Channel"
-
-#: ../cs_tban.cpp:103
-msgid "Syntax: TBAN channel nick time"
-msgstr "Syntax: TBAN Channel Nickname Zeit"
diff --git a/modules/extra/language/cs_tban.it_IT.po b/modules/extra/language/cs_tban.it_IT.po
deleted file mode 100644
index 3989c74d7..000000000
--- a/modules/extra/language/cs_tban.it_IT.po
+++ /dev/null
@@ -1,41 +0,0 @@
-# Italian translations for cs_tban
-# Traduzioni italiane per il cs_tban
-# Copyright (C) 2011 Anope Team
-# This file is distributed under the same license as the Anope IRC Services
-# Adam <adam@anope.org>, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Anope\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-06-17 13:49-0400\n"
-"PO-Revision-Date: 2010-09-26 00:22-0400\n"
-"Last-Translator: Adam <adam@anope.org>\n"
-"Language-Team: Italian\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../cs_tban.cpp:85
-#, c-format
-msgid "%s banned from %s, will auto-expire in %s"
-msgstr "%s bannato da %s, scadrа automaticamente tra %s"
-
-#: ../cs_tban.cpp:95
-msgid ""
-"Bans the given user from a channel for a specified length of\n"
-"time. If the ban is removed before by hand, it will NOT be replaced."
-msgstr ""
-"Banna l'utente specificato da un canale per un periodo di tempo\n"
-"specificato. Se il ban viene rimosso a mano prima della scadenza, NON verrа "
-"rimpiazzato."
-
-#: ../cs_tban.cpp:61
-#, fuzzy
-msgid "Bans the user for a given length of time"
-msgstr " TBAN Banna l'utente per un periodo di tempo specificato"
-
-#: ../cs_tban.cpp:103
-msgid "Syntax: TBAN channel nick time"
-msgstr "Sintassi: TBAN canale nick tempo"
diff --git a/modules/extra/language/cs_tban.nl_NL.po b/modules/extra/language/cs_tban.nl_NL.po
deleted file mode 100644
index 18239f383..000000000
--- a/modules/extra/language/cs_tban.nl_NL.po
+++ /dev/null
@@ -1,41 +0,0 @@
-# Dutch translations for cs_tban
-# Engelse vertalingen voor het cs_tban
-# Copyright (C) 2011 Anope Team
-# This file is distributed under the same license as the Anope IRC Services
-# Adam <adam@anope.org>, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Anope\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-06-17 13:49-0400\n"
-"PO-Revision-Date: 2010-09-26 00:15-0400\n"
-"Last-Translator: Adam <adam@anope.org>\n"
-"Language-Team: Dutch\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../cs_tban.cpp:85
-#, c-format
-msgid "%s banned from %s, will auto-expire in %s"
-msgstr "%s verbannen van %s, zal verlopen in %s"
-
-#: ../cs_tban.cpp:95
-msgid ""
-"Bans the given user from a channel for a specified length of\n"
-"time. If the ban is removed before by hand, it will NOT be replaced."
-msgstr ""
-"Verbant de gegeven gebruiken van het gegeven kanaal voor de\n"
-"gegeven tijdsduur. Als de verbanning eerder wordt verwijderd,\n"
-"zal deze NIET worden vervangen."
-
-#: ../cs_tban.cpp:61
-#, fuzzy
-msgid "Bans the user for a given length of time"
-msgstr " TBAN Verban een gebruiker voor een bepaalde tijd"
-
-#: ../cs_tban.cpp:103
-msgid "Syntax: TBAN channel nick time"
-msgstr "Syntax: TBAN kanaal nick tijd"
diff --git a/modules/extra/language/cs_tban.pt_PT.po b/modules/extra/language/cs_tban.pt_PT.po
deleted file mode 100644
index 944d977fd..000000000
--- a/modules/extra/language/cs_tban.pt_PT.po
+++ /dev/null
@@ -1,40 +0,0 @@
-# Portuguese translations for cs_tban
-# Copyright (C) 2011 Anope Team
-# This file is distributed under the same license as the Anope IRC Services
-# Adam <adam@anope.org>, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Anope\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-06-17 13:49-0400\n"
-"PO-Revision-Date: 2010-09-26 00:18-0400\n"
-"Last-Translator: Adam <adam@anope.org>\n"
-"Language-Team: Portuguese\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../cs_tban.cpp:85
-#, c-format
-msgid "%s banned from %s, will auto-expire in %s"
-msgstr "%s foi banido do %s, irб auto-expirar em %s"
-
-#: ../cs_tban.cpp:95
-msgid ""
-"Bans the given user from a channel for a specified length of\n"
-"time. If the ban is removed before by hand, it will NOT be replaced."
-msgstr ""
-"Bane de um canal o usuбrio especificado por um determinado perнodo de\n"
-"tempo. Se o ban for removido manualmente antes do tempo, ele nгo serб "
-"recolocado."
-
-#: ../cs_tban.cpp:61
-#, fuzzy
-msgid "Bans the user for a given length of time"
-msgstr " TBAN Bane o usuбrio por um determinado perнodo de tempo"
-
-#: ../cs_tban.cpp:103
-msgid "Syntax: TBAN channel nick time"
-msgstr "Sintaxe: TBAN canal nick tempo"
diff --git a/modules/extra/language/cs_tban.ru_RU.po b/modules/extra/language/cs_tban.ru_RU.po
deleted file mode 100644
index 881c9ea79..000000000
--- a/modules/extra/language/cs_tban.ru_RU.po
+++ /dev/null
@@ -1,42 +0,0 @@
-# Russian translations for cs_tban
-# ?????????? ???????? ??? ?????? cs_tban
-# Copyright (C) 2011 Anope Team
-# This file is distributed under the same license as the Anope IRC Services
-# Adam <adam@anope.org>, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Anope\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-06-17 13:49-0400\n"
-"PO-Revision-Date: 2010-09-26 00:20-0400\n"
-"Last-Translator: Adam <adam@anope.org>\n"
-"Language-Team: Russian\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
-"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-
-#: ../cs_tban.cpp:85
-#, c-format
-msgid "%s banned from %s, will auto-expire in %s"
-msgstr "Установленный бан %s на канале %s истечет через %s секунд"
-
-#: ../cs_tban.cpp:95
-msgid ""
-"Bans the given user from a channel for a specified length of\n"
-"time. If the ban is removed before by hand, it will NOT be replaced."
-msgstr ""
-"Банит пользователя на указанный промежуток времени в секундах\n"
-"Примечание: удаленный вручную (до своего истечения) бан НЕ БУДЕТ\n"
-"переустановлен сервисами автоматически!"
-
-#: ../cs_tban.cpp:61
-#, fuzzy
-msgid "Bans the user for a given length of time"
-msgstr " TBAN Банит пользователя на указанный промежуток времени"
-
-#: ../cs_tban.cpp:103
-msgid "Syntax: TBAN channel nick time"
-msgstr "Синтаксис: TBAN #канал ник время"
diff --git a/modules/extra/language/hs_request.it_IT.po b/modules/extra/language/hs_request.it_IT.po
deleted file mode 100644
index 5fa437bad..000000000
--- a/modules/extra/language/hs_request.it_IT.po
+++ /dev/null
@@ -1,149 +0,0 @@
-# Italian translations for hs_request
-# Traduzioni italiane per il hs_request
-# Copyright (C) 2011 Anope Team
-# This file is distributed under the same license as Anope IRC Services
-# Adam <adam@anope.org>, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Anope\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-06-17 13:50-0400\n"
-"PO-Revision-Date: 2010-09-25 23:42-0400\n"
-"Last-Translator: Adam <adam@anope.org>\n"
-"Language-Team: Italian\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../hs_request.cpp:267
-#, c-format
-msgid "#%d Nick:%s, vhost:%s (%s - %s)"
-msgstr ""
-
-#: ../hs_request.cpp:265
-#, c-format
-msgid "#%d Nick:%s, vhost:%s@%s (%s - %s)"
-msgstr ""
-
-#: ../hs_request.cpp:180 ../hs_request.cpp:238
-msgid "A memo informing the user will also be sent."
-msgstr "Viene inviato un memo per informare l'utente."
-
-#: ../hs_request.cpp:178
-msgid "Activate the requested vHost for the given nick."
-msgstr "Attiva il vHost richiesto per il nick specificato."
-
-#: ../hs_request.cpp:139
-#, fuzzy
-msgid "Approve the requested vHost of a user"
-msgstr "Attiva il vHost richiesto per il nick specificato."
-
-#: ../hs_request.cpp:286
-msgid "Convenience command for LIST +req"
-msgstr ""
-
-#: ../hs_request.cpp:271
-#, c-format
-msgid "Displayed all records (Count: %d)"
-msgstr ""
-
-#: ../hs_request.cpp:166 ../hs_request.cpp:227
-#, c-format
-msgid "No request for nick %s found."
-msgstr "Nessuna richiesta trovata per il nick %s."
-
-#: ../hs_request.cpp:105
-#, c-format
-msgid "Please wait %d seconds before requesting a new vHost"
-msgstr "Prego attendere %d secondi prima di richiedere un nuovo vHost"
-
-#: ../hs_request.cpp:236
-msgid "Reject the requested vHost for the given nick."
-msgstr "Rifiuta il vHost richiesto per il nick specificato."
-
-#: ../hs_request.cpp:196
-#, fuzzy
-msgid "Reject the requested vHost of a user"
-msgstr "Rifiuta il vHost richiesto per il nick specificato."
-
-#: ../hs_request.cpp:52
-#, fuzzy
-msgid "Request a vHost for your nick"
-msgstr " REQUEST Richiede un vHost per il tuo nick"
-
-#: ../hs_request.cpp:122
-msgid ""
-"Request the given vHost to be actived for your nick by the\n"
-"network administrators. Please be patient while your request\n"
-"is being considered."
-msgstr ""
-"Richiede l'attivazione del vHost specificato per il tuo nick da parte\n"
-"degli amministratori di rete. Sei pregato di pazientare finchи la tua\n"
-"richiesta viene elaborata."
-
-#: ../hs_request.cpp:176 ../hs_request.cpp:187
-msgid "Syntax: ACTIVATE nick"
-msgstr "Sintassi: ACTIVATE nick"
-
-#: ../hs_request.cpp:234 ../hs_request.cpp:245
-msgid "Syntax: REJECT nick"
-msgstr "Sintassi: REJECT nick"
-
-#: ../hs_request.cpp:68 ../hs_request.cpp:120 ../hs_request.cpp:130
-msgid "Syntax: REQUEST vhost"
-msgstr "Sintassi: REQUEST vhost"
-
-#: ../hs_request.cpp:296
-msgid "Syntax: WAITING"
-msgstr "Sintassi: WAITING"
-
-#: ../hs_request.cpp:298
-msgid ""
-"This command is provided for convenience. It is essentially\n"
-"the same as performing a LIST +req ."
-msgstr ""
-"Questo comando и per comoditа. Praticamente и la stessa cosa che\n"
-"eseguire un LIST +req ."
-
-#: ../hs_request.cpp:111
-msgid "Your vHost has been requested"
-msgstr "Il tuo vHost и stato richiesto"
-
-#: ../hs_request.cpp:158
-msgid "[auto memo] Your requested vHost has been approved."
-msgstr "[auto memo] Il vHost da te richiesto и stato approvato."
-
-#: ../hs_request.cpp:218
-msgid "[auto memo] Your requested vHost has been rejected."
-msgstr "[auto memo] Il vHost da te richiesto и stato rifiutato."
-
-#: ../hs_request.cpp:216
-#, c-format
-msgid "[auto memo] Your requested vHost has been rejected. Reason: %s"
-msgstr "[auto memo] Il vHost da te richiesto и stato rifiutato. Motivo: %s"
-
-#: ../hs_request.cpp:438
-#, fuzzy, c-format
-msgid "[auto memo] vHost %s has been requested by %s."
-msgstr "[auto memo] и stato richiesto il vHost %s."
-
-#: ../hs_request.cpp:160
-#, c-format
-msgid "vHost for %s has been activated"
-msgstr "Il vHost per %s и stato attivato"
-
-#: ../hs_request.cpp:223
-#, c-format
-msgid "vHost for %s has been rejected"
-msgstr "Il vHost per %s и stato rifiutato"
-
-#~ msgid ""
-#~ " ACTIVATE Approve the requested vHost of a user\n"
-#~ " REJECT Reject the requested vHost of a user\n"
-#~ " WAITING Convenience command for LIST +req"
-#~ msgstr ""
-#~ " ACTIVATE Approva il vHost richiesto di un utente\n"
-#~ " REJECT Rifiuta il vHost richiesto di un utente\n"
-#~ " WAITING Comando per LIST +req"
diff --git a/modules/extra/language/hs_request.nl_NL.po b/modules/extra/language/hs_request.nl_NL.po
deleted file mode 100644
index 2f1f065a1..000000000
--- a/modules/extra/language/hs_request.nl_NL.po
+++ /dev/null
@@ -1,150 +0,0 @@
-# Dutch translations for hs_request
-# Engelse vertalingen voor het hs_request
-# Copyright (C) 2011 Anope Team
-# This file is distributed under the same license as Anope IRC Services
-# Adam <adam@anope.org>, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Anope\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-06-17 13:50-0400\n"
-"PO-Revision-Date: 2010-09-25 22:26-0400\n"
-"Last-Translator: Adam <adam@anope.org>\n"
-"Language-Team: Dutch\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../hs_request.cpp:267
-#, c-format
-msgid "#%d Nick:%s, vhost:%s (%s - %s)"
-msgstr ""
-
-#: ../hs_request.cpp:265
-#, c-format
-msgid "#%d Nick:%s, vhost:%s@%s (%s - %s)"
-msgstr ""
-
-#: ../hs_request.cpp:180 ../hs_request.cpp:238
-msgid "A memo informing the user will also be sent."
-msgstr ""
-"Een memo die de gebruiker op de hoogste stelt zal ook worden verstuurd."
-
-#: ../hs_request.cpp:178
-msgid "Activate the requested vHost for the given nick."
-msgstr "Activeer de aangevraagde vHost voor de gegeven nick."
-
-#: ../hs_request.cpp:139
-#, fuzzy
-msgid "Approve the requested vHost of a user"
-msgstr "Activeer de aangevraagde vHost voor de gegeven nick."
-
-#: ../hs_request.cpp:286
-msgid "Convenience command for LIST +req"
-msgstr ""
-
-#: ../hs_request.cpp:271
-#, c-format
-msgid "Displayed all records (Count: %d)"
-msgstr ""
-
-#: ../hs_request.cpp:166 ../hs_request.cpp:227
-#, c-format
-msgid "No request for nick %s found."
-msgstr "Geen aanvraag voor nick %s gevonden."
-
-#: ../hs_request.cpp:105
-#, c-format
-msgid "Please wait %d seconds before requesting a new vHost"
-msgstr "Wacht %d seconden voor je een nieuwe vHost aanvraagt"
-
-#: ../hs_request.cpp:236
-msgid "Reject the requested vHost for the given nick."
-msgstr "Keur de aangevraagde vHost voor de gegeven nick af."
-
-#: ../hs_request.cpp:196
-#, fuzzy
-msgid "Reject the requested vHost of a user"
-msgstr "Keur de aangevraagde vHost voor de gegeven nick af."
-
-#: ../hs_request.cpp:52
-#, fuzzy
-msgid "Request a vHost for your nick"
-msgstr " REQUEST Vraag een vHost aan voor je nick"
-
-#: ../hs_request.cpp:122
-msgid ""
-"Request the given vHost to be actived for your nick by the\n"
-"network administrators. Please be patient while your request\n"
-"is being considered."
-msgstr ""
-"Verzoek de gegeven vHost te activeren voor jouw nick bij de\n"
-"netwerk beheerders. Het kan even duren voordat je aanvraag\n"
-"afgehandeld wordt."
-
-#: ../hs_request.cpp:176 ../hs_request.cpp:187
-msgid "Syntax: ACTIVATE nick"
-msgstr "Gebruik: ACTIVATE nick"
-
-#: ../hs_request.cpp:234 ../hs_request.cpp:245
-msgid "Syntax: REJECT nick"
-msgstr "Gebruik: REJECT nick"
-
-#: ../hs_request.cpp:68 ../hs_request.cpp:120 ../hs_request.cpp:130
-msgid "Syntax: REQUEST vhost"
-msgstr "Gebruik: REQUEST vhost"
-
-#: ../hs_request.cpp:296
-msgid "Syntax: WAITING"
-msgstr "Gebruik: WAITING"
-
-#: ../hs_request.cpp:298
-msgid ""
-"This command is provided for convenience. It is essentially\n"
-"the same as performing a LIST +req ."
-msgstr ""
-"Dit commando is beschikbaar als handigheid. Het is simpelweg\n"
-"hetzelfde als LIST +req ."
-
-#: ../hs_request.cpp:111
-msgid "Your vHost has been requested"
-msgstr "Je vHost is aangevraagd"
-
-#: ../hs_request.cpp:158
-msgid "[auto memo] Your requested vHost has been approved."
-msgstr "[auto memo] Je aangevraagde vHost is geaccepteerd."
-
-#: ../hs_request.cpp:218
-msgid "[auto memo] Your requested vHost has been rejected."
-msgstr "[auto memo] Je aangevraagde vHost is afgekeurd."
-
-#: ../hs_request.cpp:216
-#, c-format
-msgid "[auto memo] Your requested vHost has been rejected. Reason: %s"
-msgstr "[auto memo] Je aangevraagde vHost is afgekeurd. Reden: %s"
-
-#: ../hs_request.cpp:438
-#, fuzzy, c-format
-msgid "[auto memo] vHost %s has been requested by %s."
-msgstr "[auto memo] vHost %s is aangevraagd."
-
-#: ../hs_request.cpp:160
-#, c-format
-msgid "vHost for %s has been activated"
-msgstr "vHost voor %s is geactiveerd"
-
-#: ../hs_request.cpp:223
-#, c-format
-msgid "vHost for %s has been rejected"
-msgstr "vHost voor %s is afgekeurd"
-
-#~ msgid ""
-#~ " ACTIVATE Approve the requested vHost of a user\n"
-#~ " REJECT Reject the requested vHost of a user\n"
-#~ " WAITING Convenience command for LIST +req"
-#~ msgstr ""
-#~ " ACTIVATE Activeer de aangevraagde vHost voor een gebruiker\n"
-#~ " REJECT Keur de aangevraagde vHost voor een gebruiker af\n"
-#~ " WAITING Snelkoppeling naar LIST +req"
diff --git a/modules/extra/language/hs_request.pt_PT.po b/modules/extra/language/hs_request.pt_PT.po
deleted file mode 100644
index 74f767395..000000000
--- a/modules/extra/language/hs_request.pt_PT.po
+++ /dev/null
@@ -1,148 +0,0 @@
-# Portuguese translations for hs_request
-# Copyright (C) 2011 Anope Team
-# This file is distributed under the same license as Anope IRC Services
-# Adam <adam@anope.org>, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Anope\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-06-17 13:50-0400\n"
-"PO-Revision-Date: 2010-09-25 22:48-0400\n"
-"Last-Translator: Adam <adam@anope.org>\n"
-"Language-Team: Portuguese\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../hs_request.cpp:267
-#, c-format
-msgid "#%d Nick:%s, vhost:%s (%s - %s)"
-msgstr ""
-
-#: ../hs_request.cpp:265
-#, c-format
-msgid "#%d Nick:%s, vhost:%s@%s (%s - %s)"
-msgstr ""
-
-#: ../hs_request.cpp:180 ../hs_request.cpp:238
-msgid "A memo informing the user will also be sent."
-msgstr "Um memo informando o usuбrio tambйm serб enviado."
-
-#: ../hs_request.cpp:178
-msgid "Activate the requested vHost for the given nick."
-msgstr "Ativa o vHost solicitado para o nick fornecido."
-
-#: ../hs_request.cpp:139
-#, fuzzy
-msgid "Approve the requested vHost of a user"
-msgstr "Ativa o vHost solicitado para o nick fornecido."
-
-#: ../hs_request.cpp:286
-msgid "Convenience command for LIST +req"
-msgstr ""
-
-#: ../hs_request.cpp:271
-#, c-format
-msgid "Displayed all records (Count: %d)"
-msgstr ""
-
-#: ../hs_request.cpp:166 ../hs_request.cpp:227
-#, c-format
-msgid "No request for nick %s found."
-msgstr "Nenhum pedido encontrado para o nick %s."
-
-#: ../hs_request.cpp:105
-#, c-format
-msgid "Please wait %d seconds before requesting a new vHost"
-msgstr "Por favor, espere %d segundos antes de fazer um novo pedido de vHost"
-
-#: ../hs_request.cpp:236
-msgid "Reject the requested vHost for the given nick."
-msgstr "Recusa o pedido de vHost para o nick fornecido."
-
-#: ../hs_request.cpp:196
-#, fuzzy
-msgid "Reject the requested vHost of a user"
-msgstr "Recusa o pedido de vHost para o nick fornecido."
-
-#: ../hs_request.cpp:52
-#, fuzzy
-msgid "Request a vHost for your nick"
-msgstr " REQUEST Request a vHost for your nick"
-
-#: ../hs_request.cpp:122
-msgid ""
-"Request the given vHost to be actived for your nick by the\n"
-"network administrators. Please be patient while your request\n"
-"is being considered."
-msgstr ""
-"Solicita a ativaзгo do vHost fornecido em seu nick pelos\n"
-"administradores da rede. Por favor, tenha paciкncia\n"
-"enquanto seu pedido й analisado."
-
-#: ../hs_request.cpp:176 ../hs_request.cpp:187
-msgid "Syntax: ACTIVATE nick"
-msgstr "Sintaxe: ACTIVATE nick"
-
-#: ../hs_request.cpp:234 ../hs_request.cpp:245
-msgid "Syntax: REJECT nick"
-msgstr "Sintaxe: REJECT nick"
-
-#: ../hs_request.cpp:68 ../hs_request.cpp:120 ../hs_request.cpp:130
-msgid "Syntax: REQUEST vhost"
-msgstr "Sintaxe: REQUEST vhost"
-
-#: ../hs_request.cpp:296
-msgid "Syntax: WAITING"
-msgstr "Sintaxe: WAITING"
-
-#: ../hs_request.cpp:298
-msgid ""
-"This command is provided for convenience. It is essentially\n"
-"the same as performing a LIST +req ."
-msgstr ""
-"Este comando й usado por conveniкncia. Й essencialmente\n"
-"o mesmo que fazer um LIST +req"
-
-#: ../hs_request.cpp:111
-msgid "Your vHost has been requested"
-msgstr "Seu pedido de vHost foi encaminhado"
-
-#: ../hs_request.cpp:158
-msgid "[auto memo] Your requested vHost has been approved."
-msgstr "[Auto Memo] Seu pedido de vHost foi aprovado."
-
-#: ../hs_request.cpp:218
-msgid "[auto memo] Your requested vHost has been rejected."
-msgstr "[Auto Memo] Seu pedido de vHost foi recusado."
-
-#: ../hs_request.cpp:216
-#, c-format
-msgid "[auto memo] Your requested vHost has been rejected. Reason: %s"
-msgstr "[Auto Memo] Seu pedido de vHost foi recusado. Motivo: %s"
-
-#: ../hs_request.cpp:438
-#, fuzzy, c-format
-msgid "[auto memo] vHost %s has been requested by %s."
-msgstr "[Auto Memo] O vHost %s foi solicitado."
-
-#: ../hs_request.cpp:160
-#, c-format
-msgid "vHost for %s has been activated"
-msgstr "O vHost para %s foi ativado"
-
-#: ../hs_request.cpp:223
-#, c-format
-msgid "vHost for %s has been rejected"
-msgstr "O vHost de %s foi recusado"
-
-#~ msgid ""
-#~ " ACTIVATE Approve the requested vHost of a user\n"
-#~ " REJECT Reject the requested vHost of a user\n"
-#~ " WAITING Convenience command for LIST +req"
-#~ msgstr ""
-#~ " ACTIVATE Aprova o pedido de vHost de um usuбrio\n"
-#~ " REJECT Recusa o pedido de vHost de um usuбrio\n"
-#~ " WAITING Comando para LISTAR +req"
diff --git a/modules/extra/language/hs_request.ru_RU.po b/modules/extra/language/hs_request.ru_RU.po
deleted file mode 100644
index 81c905802..000000000
--- a/modules/extra/language/hs_request.ru_RU.po
+++ /dev/null
@@ -1,151 +0,0 @@
-# Russian translations for hs_request
-# ?????????? ???????? ??? ?????? PACKAGE.
-# Copyright (C) 2011 Anope Team
-# This file is distributed under the same license as Anope IRC Services
-# Adam <adam@anope.org>, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Anope\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-06-17 13:50-0400\n"
-"PO-Revision-Date: 2010-09-25 23:27-0400\n"
-"Last-Translator: Adam <adam@anope.org>\n"
-"Language-Team: Russian\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
-"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-
-#: ../hs_request.cpp:267
-#, c-format
-msgid "#%d Nick:%s, vhost:%s (%s - %s)"
-msgstr ""
-
-#: ../hs_request.cpp:265
-#, c-format
-msgid "#%d Nick:%s, vhost:%s@%s (%s - %s)"
-msgstr ""
-
-#: ../hs_request.cpp:180 ../hs_request.cpp:238
-msgid "A memo informing the user will also be sent."
-msgstr "Пользователю будет послано авто-уведомление об активации его запроса."
-
-#: ../hs_request.cpp:178
-msgid "Activate the requested vHost for the given nick."
-msgstr "Утвердить запрашиваемый vHost для указанного ника."
-
-#: ../hs_request.cpp:139
-#, fuzzy
-msgid "Approve the requested vHost of a user"
-msgstr "Утвердить запрашиваемый vHost для указанного ника."
-
-#: ../hs_request.cpp:286
-msgid "Convenience command for LIST +req"
-msgstr ""
-
-#: ../hs_request.cpp:271
-#, c-format
-msgid "Displayed all records (Count: %d)"
-msgstr ""
-
-#: ../hs_request.cpp:166 ../hs_request.cpp:227
-#, c-format
-msgid "No request for nick %s found."
-msgstr "Запрос на vHost для ника %s не найден."
-
-#: ../hs_request.cpp:105
-#, c-format
-msgid "Please wait %d seconds before requesting a new vHost"
-msgstr "Пожалуйста, подождите %d секунд, прежде чем запрашивать новый vHost"
-
-#: ../hs_request.cpp:236
-msgid "Reject the requested vHost for the given nick."
-msgstr "Отклонить запрашиваемый vHost для указанного ника."
-
-#: ../hs_request.cpp:196
-#, fuzzy
-msgid "Reject the requested vHost of a user"
-msgstr "Отклонить запрашиваемый vHost для указанного ника."
-
-#: ../hs_request.cpp:52
-#, fuzzy
-msgid "Request a vHost for your nick"
-msgstr " REQUEST Запрос на vHost для вашего текущего ника"
-
-#: ../hs_request.cpp:122
-msgid ""
-"Request the given vHost to be actived for your nick by the\n"
-"network administrators. Please be patient while your request\n"
-"is being considered."
-msgstr ""
-"Отправляет запрос на активацию vHost, который будет рассмотрен одним из\n"
-"администраторов сети. Просьба проявить терпение, пока запрос\n"
-"рассматривается администрацией."
-
-#: ../hs_request.cpp:176 ../hs_request.cpp:187
-msgid "Syntax: ACTIVATE nick"
-msgstr "Синтаксис: ACTIVATE ник"
-
-#: ../hs_request.cpp:234 ../hs_request.cpp:245
-msgid "Syntax: REJECT nick"
-msgstr "Синтаксис: REJECT ник"
-
-#: ../hs_request.cpp:68 ../hs_request.cpp:120 ../hs_request.cpp:130
-msgid "Syntax: REQUEST vhost"
-msgstr "Синтаксис: REQUEST vHost"
-
-#: ../hs_request.cpp:296
-msgid "Syntax: WAITING"
-msgstr "Синтаксис: WAITING"
-
-#: ../hs_request.cpp:298
-msgid ""
-"This command is provided for convenience. It is essentially\n"
-"the same as performing a LIST +req ."
-msgstr ""
-"Данная команда создана для удобства использования и выводит список "
-"запросов,\n"
-"ожидающих обработки. Аналогичная команда: LIST +req ."
-
-#: ../hs_request.cpp:111
-msgid "Your vHost has been requested"
-msgstr "Ваш запрос на vHost отправлен."
-
-#: ../hs_request.cpp:158
-msgid "[auto memo] Your requested vHost has been approved."
-msgstr "[авто-сообщение] Запрашиваемый вами vHost утвержден и активирован."
-
-#: ../hs_request.cpp:218
-msgid "[auto memo] Your requested vHost has been rejected."
-msgstr "[авто-сообщение] Запрашиваемый вами vHost отклонен."
-
-#: ../hs_request.cpp:216
-#, c-format
-msgid "[auto memo] Your requested vHost has been rejected. Reason: %s"
-msgstr "[авто-сообщение] Запрашиваемый вами vHost отклонен. Причина: %s"
-
-#: ../hs_request.cpp:438
-#, fuzzy, c-format
-msgid "[auto memo] vHost %s has been requested by %s."
-msgstr "[авто-сообщение] Был запрошен vHost %s"
-
-#: ../hs_request.cpp:160
-#, c-format
-msgid "vHost for %s has been activated"
-msgstr "vHost для %s успешно активирован"
-
-#: ../hs_request.cpp:223
-#, c-format
-msgid "vHost for %s has been rejected"
-msgstr "vHost для %s отклонен."
-
-#~ msgid ""
-#~ " ACTIVATE Approve the requested vHost of a user\n"
-#~ " REJECT Reject the requested vHost of a user\n"
-#~ " WAITING Convenience command for LIST +req"
-#~ msgstr ""
-#~ " ACTIVATE Утвердить запрашиваемый пользователем vHost\n"
-#~ " REJECT Отклонить запрашиваемый пользователем vHost\n"
-#~ " WAITING Список запросов ожидающих обработки (аналог LIST +req)"
diff --git a/modules/extra/language/ns_maxemail.de_DE.po b/modules/extra/language/ns_maxemail.de_DE.po
deleted file mode 100644
index fe1f3aef4..000000000
--- a/modules/extra/language/ns_maxemail.de_DE.po
+++ /dev/null
@@ -1,28 +0,0 @@
-# German translations for ns_maxemail
-# German messages for ns_maxemail
-# Copyright (C) 2011 Anope Team
-# This file is distributed under the same license as Anope IRC Services
-# Adam <adam@anope.org>, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Anope\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-02-04 03:41-0500\n"
-"PO-Revision-Date: 2010-09-26 00:03-0400\n"
-"Last-Translator: Adam <adam@anope.org>\n"
-"Language-Team: German\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../ns_maxemail.cpp:33
-#, fuzzy, c-format
-msgid "The given email address has reached its usage limit of %d users."
-msgstr "Die angegebene eMail hat die limit Begrenzung von %d User erreicht."
-
-#: ../ns_maxemail.cpp:31
-#, fuzzy
-msgid "The given email address has reached its usage limit of 1 user."
-msgstr "Die angegebene eMail hat die limit Begrenzung von 1 User erreicht."
diff --git a/modules/extra/language/ns_maxemail.it_IT.po b/modules/extra/language/ns_maxemail.it_IT.po
deleted file mode 100644
index 1cd1a4083..000000000
--- a/modules/extra/language/ns_maxemail.it_IT.po
+++ /dev/null
@@ -1,32 +0,0 @@
-# Italian translations for ns_maxemail
-# Traduzioni italiane per il ns_maxemail
-# Copyright (C) 2011 Anope Team
-# This file is distributed under the same license as Anope IRC Services
-# Adam <adam@anope.org>, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Anope\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-02-04 03:41-0500\n"
-"PO-Revision-Date: 2010-09-26 00:11-0400\n"
-"Last-Translator: Adam <adam@anope.org>\n"
-"Language-Team: Italian\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../ns_maxemail.cpp:33
-#, fuzzy, c-format
-msgid "The given email address has reached its usage limit of %d users."
-msgstr ""
-"L'indirizzo email specificato ha raggiunto il suo limite d'utilizzo di %d "
-"utenti."
-
-#: ../ns_maxemail.cpp:31
-#, fuzzy
-msgid "The given email address has reached its usage limit of 1 user."
-msgstr ""
-"L'indirizzo email specificato ha raggiunto il suo limite d'utilizzo di 1 "
-"utente."
diff --git a/modules/extra/language/ns_maxemail.nl_NL.po b/modules/extra/language/ns_maxemail.nl_NL.po
deleted file mode 100644
index fb84c786a..000000000
--- a/modules/extra/language/ns_maxemail.nl_NL.po
+++ /dev/null
@@ -1,28 +0,0 @@
-# Dutch translations for ns_maxemail
-# Engelse vertalingen voor het ns_maxemail
-# Copyright (C) 2011 Anope Team
-# This file is distributed under the same license as Anope IRC Services
-# Adam <adam@anope.org>, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Anope\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-02-04 03:41-0500\n"
-"PO-Revision-Date: 2010-09-25 23:57-0400\n"
-"Last-Translator: Adam <adam@anope.org>\n"
-"Language-Team: Dutch\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../ns_maxemail.cpp:33
-#, fuzzy, c-format
-msgid "The given email address has reached its usage limit of %d users."
-msgstr "Het gegeven email adres heeft de limiet van %d gebruikers bereikt."
-
-#: ../ns_maxemail.cpp:31
-#, fuzzy
-msgid "The given email address has reached its usage limit of 1 user."
-msgstr "Het gegeven email adres heeft de limiet van 1 gebruiker bereikt."
diff --git a/modules/extra/language/ns_maxemail.pt_PT.po b/modules/extra/language/ns_maxemail.pt_PT.po
deleted file mode 100644
index ff807f582..000000000
--- a/modules/extra/language/ns_maxemail.pt_PT.po
+++ /dev/null
@@ -1,28 +0,0 @@
-# Portuguese translations for ns_maxemail
-# Copyright (C) 2011 Anope Team
-# This file is distributed under the same license as Anope IRC Services
-# Adam <adam@anope.org>, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Anope\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-02-04 03:41-0500\n"
-"PO-Revision-Date: 2010-09-26 00:05-0400\n"
-"Last-Translator: Adam <adam@anope.org>\n"
-"Language-Team: Portuguese\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../ns_maxemail.cpp:33
-#, fuzzy, c-format
-msgid "The given email address has reached its usage limit of %d users."
-msgstr ""
-"O endereзo de email fornecido alcanзou seu limite de uso de %d usuбrios."
-
-#: ../ns_maxemail.cpp:31
-#, fuzzy
-msgid "The given email address has reached its usage limit of 1 user."
-msgstr "O endereзo de email fornecido alcanзou seu limite de uso de 1 usuбrio."
diff --git a/modules/extra/language/ns_maxemail.ru_RU.po b/modules/extra/language/ns_maxemail.ru_RU.po
deleted file mode 100644
index 1fa267d55..000000000
--- a/modules/extra/language/ns_maxemail.ru_RU.po
+++ /dev/null
@@ -1,30 +0,0 @@
-# Russian translations for ns_maxemail
-# ?????????? ???????? ??? ?????? ns_maxemail
-# Copyright (C) 2011 Anope Team
-# This file is distributed under the same license as Anope IRC Services
-# Adam <adam@anope.org>, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Anope\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-02-04 03:41-0500\n"
-"PO-Revision-Date: 2010-09-26 00:07-0400\n"
-"Last-Translator: Adam <adam@anope.org>\n"
-"Language-Team: Russian\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
-"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-
-#: ../ns_maxemail.cpp:33
-#, fuzzy, c-format
-msgid "The given email address has reached its usage limit of %d users."
-msgstr ""
-"Указанный вами email-адрес используется максимально допустимое кол-во раз: %d"
-
-#: ../ns_maxemail.cpp:31
-#, fuzzy
-msgid "The given email address has reached its usage limit of 1 user."
-msgstr "Указанный вами email-адрес уже кем-то используется."
diff --git a/modules/core/botserv.h b/modules/pseudoclients/botserv.h
index 5fa03f870..5fa03f870 100644
--- a/modules/core/botserv.h
+++ b/modules/pseudoclients/botserv.h
diff --git a/modules/core/bs_main.cpp b/modules/pseudoclients/bs_main.cpp
index 69eab6040..69eab6040 100644
--- a/modules/core/bs_main.cpp
+++ b/modules/pseudoclients/bs_main.cpp
diff --git a/modules/core/cs_main.cpp b/modules/pseudoclients/cs_main.cpp
index 5c490e4ff..5c490e4ff 100644
--- a/modules/core/cs_main.cpp
+++ b/modules/pseudoclients/cs_main.cpp
diff --git a/modules/core/gl_main.cpp b/modules/pseudoclients/gl_main.cpp
index c7ccf9209..c7ccf9209 100644
--- a/modules/core/gl_main.cpp
+++ b/modules/pseudoclients/gl_main.cpp
diff --git a/modules/core/global.h b/modules/pseudoclients/global.h
index 454e879c2..454e879c2 100644
--- a/modules/core/global.h
+++ b/modules/pseudoclients/global.h
diff --git a/modules/core/hs_main.cpp b/modules/pseudoclients/hs_main.cpp
index a6cc6bbb7..a6cc6bbb7 100644
--- a/modules/core/hs_main.cpp
+++ b/modules/pseudoclients/hs_main.cpp
diff --git a/modules/core/memoserv.h b/modules/pseudoclients/memoserv.h
index 0bf0c79ca..0bf0c79ca 100644
--- a/modules/core/memoserv.h
+++ b/modules/pseudoclients/memoserv.h
diff --git a/modules/core/ms_main.cpp b/modules/pseudoclients/ms_main.cpp
index bb6d7847e..bb6d7847e 100644
--- a/modules/core/ms_main.cpp
+++ b/modules/pseudoclients/ms_main.cpp
diff --git a/modules/core/nickserv.h b/modules/pseudoclients/nickserv.h
index b58dbd65f..b58dbd65f 100644
--- a/modules/core/nickserv.h
+++ b/modules/pseudoclients/nickserv.h
diff --git a/modules/core/ns_main.cpp b/modules/pseudoclients/ns_main.cpp
index 57323d0a5..57323d0a5 100644
--- a/modules/core/ns_main.cpp
+++ b/modules/pseudoclients/ns_main.cpp
diff --git a/modules/core/os_main.cpp b/modules/pseudoclients/os_main.cpp
index b555b9ede..b555b9ede 100644
--- a/modules/core/os_main.cpp
+++ b/modules/pseudoclients/os_main.cpp
diff --git a/modules/third/README b/modules/third/README
new file mode 100644
index 000000000..f960fba3e
--- /dev/null
+++ b/modules/third/README
@@ -0,0 +1,2 @@
+Third party modules, eg, modules not shipped with Anope are to be placed here.
+After doing so, run ./Config, make, make install and with some luck your module will work!
diff --git a/modules/extra/language/CMakeLists.txt b/modules/third/language/CMakeLists.txt
index af4dd90a6..af4dd90a6 100644
--- a/modules/extra/language/CMakeLists.txt
+++ b/modules/third/language/CMakeLists.txt
diff --git a/modules/third/language/README b/modules/third/language/README
new file mode 100644
index 000000000..c86eeefba
--- /dev/null
+++ b/modules/third/language/README
@@ -0,0 +1 @@
+Language files for third party modules are to go here.
diff --git a/modules/extra/language/update.sh b/modules/third/language/update.sh
index 1f16ea961..1f16ea961 100755
--- a/modules/extra/language/update.sh
+++ b/modules/third/language/update.sh