summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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