summaryrefslogtreecommitdiff
path: root/modules/extra
diff options
context:
space:
mode:
Diffstat (limited to 'modules/extra')
-rw-r--r--modules/extra/cs_appendtopic.cpp117
-rw-r--r--modules/extra/cs_enforce.cpp215
-rw-r--r--modules/extra/cs_entrymsg.cpp224
-rw-r--r--modules/extra/cs_set_misc.cpp110
-rw-r--r--modules/extra/cs_sync.cpp63
-rw-r--r--modules/extra/cs_tban.cpp116
-rw-r--r--modules/extra/hs_request.cpp424
-rw-r--r--modules/extra/language/CMakeLists.txt38
-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
-rwxr-xr-xmodules/extra/language/update.sh14
-rw-r--r--modules/extra/ns_set_misc.cpp126
-rw-r--r--modules/extra/os_defcon.cpp663
35 files changed, 0 insertions, 3688 deletions
diff --git a/modules/extra/cs_appendtopic.cpp b/modules/extra/cs_appendtopic.cpp
deleted file mode 100644
index c9af50613..000000000
--- a/modules/extra/cs_appendtopic.cpp
+++ /dev/null
@@ -1,117 +0,0 @@
-/* cs_appendtopic.c - Add text to a channels topic
- *
- * (C) 2003-2011 Anope Team
- * Contact us at team@anope.org
- *
- * Based on the original module by SGR <Alex_SGR@ntlworld.com>
- * Included in the Anope module pack since Anope 1.7.9
- * Anope Coder: GeniusDex <geniusdex@anope.org>
- *
- * Please read COPYING and README for further details.
- *
- * Send bug reports to the Anope Coder instead of the module
- * author, because any changes since the inclusion into anope
- * are not supported by the original author.
- */
-
-/*************************************************************************/
-
-#include "module.h"
-
-/* ------------------------------------------------------------
- * Name: cs_appendtopic
- * Author: SGR <Alex_SGR@ntlworld.com>
- * Date: 31/08/2003
- * ------------------------------------------------------------
- *
- * This module has no configurable options. For information on
- * this module, load it and refer to /ChanServ APPENDTOPIC HELP
- *
- * Thanks to dengel, Rob and Certus for all there support.
- * Especially Rob, who always manages to show me where I have
- * not allocated any memory. Even if it takes a few weeks of
- * pestering to get him to look at it.
- *
- * ------------------------------------------------------------
- */
-
-/* ---------------------------------------------------------------------- */
-/* DO NOT EDIT BELOW THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING */
-/* ---------------------------------------------------------------------- */
-
-class CommandCSAppendTopic : public Command
-{
- public:
- CommandCSAppendTopic(Module *creator) : Command(creator, "chanserv/appendtopic", 2, 2)
- {
- this->SetDesc(_("Add text to a channels topic"));
- }
-
- void Execute(CommandSource &source, const std::vector<Anope::string> &params)
- {
- const Anope::string &newtopic = params[1];
-
- User *u = source.u;
- Channel *c = findchan(params[0]);;
-
- if (!c)
- source.Reply(CHAN_X_NOT_IN_USE, params[0].c_str());
- else if (!c->ci)
- source.Reply(CHAN_X_NOT_REGISTERED, c->name.c_str());
- else if (!c->ci->HasPriv(u, CA_TOPIC))
- source.Reply(ACCESS_DENIED);
- else
- {
- Anope::string topic;
- if (!c->ci->last_topic.empty())
- {
- topic = c->ci->last_topic + " " + newtopic;
- c->ci->last_topic.clear();
- }
- else
- topic = newtopic;
-
- bool has_topiclock = c->ci->HasFlag(CI_TOPICLOCK);
- c->ci->UnsetFlag(CI_TOPICLOCK);
- c->ChangeTopic(u->nick, topic, Anope::CurTime);
- if (has_topiclock)
- c->ci->SetFlag(CI_TOPICLOCK);
-
- bool override = c->ci->HasPriv(u, CA_TOPIC);
- Log(override ? LOG_OVERRIDE : LOG_COMMAND, u, this, c->ci) << "changed topic to " << topic;
- }
- return;
- }
-
- bool OnHelp(CommandSource &source, const Anope::string &subcommand)
- {
- source.Reply(_("Syntax: APPENDTOPIC channel text"));
- source.Reply(" ");
- source.Reply(("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."));
-
- return true;
- }
-
- void OnSyntaxError(CommandSource &source, const Anope::string &subcommand)
- {
- source.Reply(_("Syntax: APPENDTOPIC channel text"));
- }
-};
-
-class CSAppendTopic : public Module
-{
- CommandCSAppendTopic commandcsappendtopic;
-
- public:
- CSAppendTopic(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, SUPPORTED),
- commandcsappendtopic(this)
- {
- this->SetAuthor("SGR");
-
- ModuleManager::RegisterService(&commandcsappendtopic);
- }
-};
-
-MODULE_INIT(CSAppendTopic)
diff --git a/modules/extra/cs_enforce.cpp b/modules/extra/cs_enforce.cpp
deleted file mode 100644
index 26885c9b0..000000000
--- a/modules/extra/cs_enforce.cpp
+++ /dev/null
@@ -1,215 +0,0 @@
-/* cs_enforce - Add a /cs ENFORCE command to enforce various set
- * options and channelmodes on a channel.
- *
- * (C) 2003-2011 Anope Team
- * Contact us at team@anope.org
- *
- * Included in the Anope module pack since Anope 1.7.9
- * Anope Coder: GeniusDex <geniusdex@anope.org>
- *
- * Please read COPYING and README for further details.
- *
- * Send any bug reports to the Anope Coder, as he will be able
- * to deal with it best.
- */
-
-#include "module.h"
-
-class CommandCSEnforce : public Command
-{
- private:
- void DoSet(Channel *c)
- {
- ChannelInfo *ci;
-
- if (!(ci = c->ci))
- return;
-
- if (ci->HasFlag(CI_SECUREOPS))
- this->DoSecureOps(c);
- if (ci->HasFlag(CI_RESTRICTED))
- this->DoRestricted(c);
- }
-
- void DoModes(Channel *c)
- {
- if (c->HasMode(CMODE_REGISTEREDONLY))
- this->DoCModeR(c);
- }
-
- void DoSecureOps(Channel *c)
- {
- ChannelInfo *ci;
- bool hadsecureops = false;
-
- if (!(ci = c->ci))
- return;
-
- /* Dirty hack to allow chan_set_correct_modes to work ok.
- * We pretend like SECUREOPS is on so it doesn't ignore that
- * part of the code. This way we can enforce SECUREOPS even
- * if it's off.
- */
- if (!ci->HasFlag(CI_SECUREOPS))
- {
- ci->SetFlag(CI_SECUREOPS);
- hadsecureops = true;
- }
-
- for (CUserList::iterator it = c->users.begin(), it_end = c->users.end(); it != it_end; ++it)
- {
- UserContainer *uc = *it;
-
- chan_set_correct_modes(uc->user, c, 0);
- }
-
- if (hadsecureops)
- ci->UnsetFlag(CI_SECUREOPS);
- }
-
- void DoRestricted(Channel *c)
- {
- ChannelInfo *ci = c->ci;
- if (ci == NULL)
- return;
-
- for (CUserList::iterator it = c->users.begin(), it_end = c->users.end(); it != it_end; )
- {
- UserContainer *uc = *it++;
- User *user = uc->user;
-
- if (ci->AccessFor(user).empty())
- {
- Anope::string mask;
- get_idealban(ci, user, mask);
- Anope::string reason = translate(user, CHAN_NOT_ALLOWED_TO_JOIN);
- c->SetMode(NULL, CMODE_BAN, mask);
- c->Kick(NULL, user, "%s", reason.c_str());
- }
- }
- }
-
- void DoCModeR(Channel *c)
- {
- ChannelInfo *ci;
- Anope::string mask;
-
- if (!(ci = c->ci))
- return;
-
- for (CUserList::iterator it = c->users.begin(), it_end = c->users.end(); it != it_end; )
- {
- UserContainer *uc = *it++;
-
- if (!uc->user->IsIdentified())
- {
- get_idealban(ci, uc->user, mask);
- Anope::string reason = translate(uc->user, CHAN_NOT_ALLOWED_TO_JOIN);
- if (!c->HasMode(CMODE_REGISTEREDONLY))
- c->SetMode(NULL, CMODE_BAN, mask);
- c->Kick(NULL, uc->user, "%s", reason.c_str());
- }
- }
- }
- public:
- CommandCSEnforce(Module *creator) : Command(creator, "chanserv/enforce", 1, 2)
- {
- this->SetDesc(_("Enforce various channel modes and set options"));
- this->SetSyntax(_("\037channel\037 [\037what\037]"));
- }
-
- void Execute(CommandSource &source, const std::vector<Anope::string> &params)
- {
- const Anope::string &what = params.size() > 1 ? params[1] : "";
-
- User *u = source.u;
- Channel *c = findchan(params[0]);
-
- if (!c)
- source.Reply(CHAN_X_NOT_IN_USE, params[0].c_str());
- else if (!c->ci)
- source.Reply(CHAN_X_NOT_REGISTERED, c->name.c_str());
- else if (!c->ci->HasPriv(u, CA_AKICK))
- source.Reply(ACCESS_DENIED);
- else
- {
- if (what.empty() || what.equals_ci("SET"))
- {
- this->DoSet(c);
- source.Reply(_("Enforced %s"), !what.empty() ? what.c_str() : "SET");
- }
- else if (what.equals_ci("MODES"))
- {
- this->DoModes(c);
- source.Reply(_("Enforced %s"), what.c_str());
- }
- else if (what.equals_ci("SECUREOPS"))
- {
- this->DoSecureOps(c);
- source.Reply(_("Enforced %s"), what.c_str());
- }
- else if (what.equals_ci("RESTRICTED"))
- {
- this->DoRestricted(c);
- source.Reply(_("Enforced %s"), what.c_str());
- }
- else if (what.equals_ci("+R"))
- {
- this->DoCModeR(c);
- source.Reply(_("Enforced %s"), what.c_str());
- }
- else
- this->OnSyntaxError(source, "");
- }
-
- return;
- }
-
- bool OnHelp(CommandSource &source, const Anope::string &subcommand)
- {
- this->SendSyntax(source);
- source.Reply(" ");
- source.Reply(_("Enforce various channel modes and set options. The \037channel\037\n"
- "option indicates what channel to enforce the modes and options\n"
- "on. The \037what\037 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 \037what\037 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."));
- source.Reply(" ");
- if (ModeManager::FindChannelModeByName(CMODE_REGISTERED))
- source.Reply(_("If \037what\037 is MODES, it will enforce channelmode +R if it is\n"
- "set. If +R is specified for \037what\037, 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."));
- else
- source.Reply(_("If \037what\037 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 \037what\037, 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."));
-
- return true;
- }
-};
-
-class CSEnforce : public Module
-{
- CommandCSEnforce commandcsenforce;
-
- public:
- CSEnforce(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, SUPPORTED),
- commandcsenforce(this)
- {
- this->SetAuthor("Anope");
-
- ModuleManager::RegisterService(&commandcsenforce);
- }
-};
-
-MODULE_INIT(CSEnforce)
diff --git a/modules/extra/cs_entrymsg.cpp b/modules/extra/cs_entrymsg.cpp
deleted file mode 100644
index 3aa8ed862..000000000
--- a/modules/extra/cs_entrymsg.cpp
+++ /dev/null
@@ -1,224 +0,0 @@
-/* ChanServ core functions
- *
- * (C) 2003-2011 Anope Team
- * Contact us at team@anope.org
- *
- * Please read COPYING and README for further details.
- *
- * Based on the original code of Epona by Lara.
- * Based on the original code of Services by Andy Church.
- */
-
-/*************************************************************************/
-
-#include "module.h"
-
-struct EntryMsg
-{
- static unsigned MaxEntries;
-
- EntryMsg(const Anope::string &cname, const Anope::string &cmessage, time_t ct = Anope::CurTime)
- {
- this->creator = cname;
- this->message = cmessage;
- this->when = ct;
- }
-
- Anope::string creator;
- Anope::string message;
- time_t when;
-};
-unsigned EntryMsg::MaxEntries = 0;
-
-class CommandEntryMessage : public Command
-{
- private:
- void DoList(CommandSource &source, ChannelInfo *ci)
- {
- std::vector<EntryMsg> messages;
- if (ci->GetExtRegular("cs_entrymsg", messages))
- {
- source.Reply(_("Entry message list for \2%s\2:"), ci->name.c_str());
- for (unsigned i = 0; i < messages.size(); ++i)
- source.Reply(CHAN_LIST_ENTRY, i + 1, messages[i].message.c_str(), messages[i].creator.c_str(), do_strftime(messages[i].when).c_str());
- source.Reply(_("End of entry message list."));
- }
- else
- source.Reply(_("Entry message list for \2%s\2 is empty."), ci->name.c_str());
- }
-
- void DoAdd(CommandSource &source, ChannelInfo *ci, const Anope::string &message)
- {
- std::vector<EntryMsg> messages;
- ci->GetExtRegular("cs_entrymsg", messages);
-
- if (EntryMsg::MaxEntries && messages.size() >= EntryMsg::MaxEntries)
- source.Reply(_("The entry message list for \2%s\2 is full."), ci->name.c_str());
- else
- {
- messages.push_back(EntryMsg(source.u->nick, message));
- ci->Extend("cs_entrymsg", new ExtensibleItemRegular<std::vector<EntryMsg> >(messages));
- source.Reply(_("Entry message added to \2%s\2"), ci->name.c_str());
- }
- }
-
- void DoDel(CommandSource &source, ChannelInfo *ci, const Anope::string &message)
- {
- std::vector<EntryMsg> messages;
- if (!message.is_pos_number_only())
- source.Reply(("Entry message \002%s\002 not found on channel \002%s\002."), message.c_str(), ci->name.c_str());
- else if (ci->GetExtRegular("cs_entrymsg", messages))
- {
- try
- {
- unsigned i = convertTo<unsigned>(message);
- if (i > 0 && i <= messages.size())
- {
- messages.erase(messages.begin() + i - 1);
- if (!messages.empty())
- ci->Extend("cs_entrymsg", new ExtensibleItemRegular<std::vector<EntryMsg> >(messages));
- else
- ci->Shrink("cs_entrymsg");
- source.Reply(_("Entry message \2%i\2 for \2%s\2 deleted."), i, ci->name.c_str());
- }
- else
- throw ConvertException();
- }
- catch (const ConvertException &)
- {
- source.Reply(_("Entry message \2%s\2 not found on channel \2%s\2."), message.c_str(), ci->name.c_str());
- }
- }
- else
- source.Reply(_("Entry message list for \2%s\2 is empty."), ci->name.c_str());
- }
-
- void DoClear(CommandSource &source, ChannelInfo *ci)
- {
- ci->Shrink("cs_entrymsg");
- source.Reply(_("Entry messages for \2%s\2 have been cleared."), ci->name.c_str());
- }
-
- public:
- CommandEntryMessage(Module *creator) : Command(creator, "chanserv/entrymsg", 2, 3)
- {
- this->SetDesc(_("Manage the channel's entry messages"));
- this->SetSyntax(_("\037channel\037 {ADD|DEL|LIST|CLEAR} [\037message\037|\037num\037]"));
- }
-
- void Execute(CommandSource &source, const std::vector<Anope::string> &params)
- {
- User *u = source.u;
-
- ChannelInfo *ci = cs_findchan(params[0]);
- if (ci == NULL)
- {
- source.Reply(CHAN_X_NOT_REGISTERED, params[0].c_str());
- return;
- }
-
- if (IsFounder(u, ci) || u->HasCommand("chanserv/entrymsg"))
- {
- bool success = true;
- if (params[1].equals_ci("LIST"))
- this->DoList(source, ci);
- else if (params[1].equals_ci("CLEAR"))
- this->DoClear(source, ci);
- else if (params.size() < 3)
- {
- success = false;
- this->OnSyntaxError(source, "");
- }
- else if (params[1].equals_ci("ADD"))
- this->DoAdd(source, ci, params[2]);
- else if (params[1].equals_ci("DEL"))
- this->DoDel(source, ci, params[2]);
- else
- {
- success = false;
- this->OnSyntaxError(source, "");
- }
- if (success)
- Log(IsFounder(u, ci) ? LOG_COMMAND : LOG_OVERRIDE, u, this, ci) << params[1];
- }
- else
- source.Reply(ACCESS_DENIED);
-
- return;
- }
-
- bool OnHelp(CommandSource &source, const Anope::string &subcommand)
- {
- this->SendSyntax(source);
- source.Reply(" ");
- source.Reply(_("Controls what messages will be sent to users when they join the channel."));
- return true;
- }
-};
-
-class CSEntryMessage : public Module
-{
- CommandEntryMessage commandentrymsg;
-
- public:
- CSEntryMessage(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, SUPPORTED), commandentrymsg(this)
- {
- this->SetAuthor("Anope");
-
- Implementation i[] = { I_OnJoinChannel, I_OnReload, I_OnDatabaseReadMetadata, I_OnDatabaseWriteMetadata };
- ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
-
- ModuleManager::RegisterService(&commandentrymsg);
-
- this->OnReload();
- }
-
- void OnJoinChannel(User *u, Channel *c)
- {
- if (u && c && c->ci && u->server->IsSynced())
- {
- std::vector<EntryMsg> messages;
-
- if (c->ci->GetExtRegular("cs_entrymsg", messages))
- for (unsigned i = 0; i < messages.size(); ++i)
- u->SendMessage(c->ci->WhoSends(), "[%s] %s", c->ci->name.c_str(), messages[i].message.c_str());
- }
- }
-
- void OnReload()
- {
- ConfigReader config;
- EntryMsg::MaxEntries = config.ReadInteger("cs_entrymsg", "maxentries", "5", 0, true);
- }
-
- EventReturn OnDatabaseReadMetadata(ChannelInfo *ci, const Anope::string &key, const std::vector<Anope::string> &params)
- {
- if (key.find("CS_ENTRYMSG_") == 0 && params.size() > 2)
- {
- Anope::string creator = params[0];
- time_t t = params[1].is_pos_number_only() ? convertTo<time_t>(params[1]) : Anope::CurTime;
- Anope::string message = params[2];
- for (unsigned j = 3; j < params.size(); ++j)
- message += " " + params[j];
-
- std::vector<EntryMsg> messages;
- ci->GetExtRegular("cs_entrymsg", messages);
- messages.push_back(EntryMsg(creator, message, t));
- ci->Extend("cs_entrymsg", new ExtensibleItemRegular<std::vector<EntryMsg> >(messages));
-
- return EVENT_STOP;
- }
-
- return EVENT_CONTINUE;
- }
-
- void OnDatabaseWriteMetadata(void (*WriteMetadata)(const Anope::string &, const Anope::string &), ChannelInfo *ci)
- {
- std::vector<EntryMsg> messages;
- if (ci->GetExtRegular("cs_entrymsg", messages))
- for (unsigned i = 0; i < messages.size(); ++i)
- WriteMetadata("CS_ENTRYMSG_" + stringify(i), messages[i].creator + " " + stringify(messages[i].when) + " " + messages[i].message);
- }
-};
-
-MODULE_INIT(CSEntryMessage)
diff --git a/modules/extra/cs_set_misc.cpp b/modules/extra/cs_set_misc.cpp
deleted file mode 100644
index 8f145ab88..000000000
--- a/modules/extra/cs_set_misc.cpp
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * (C) 2003-2011 Anope Team
- * Contact us at team@anope.org
- *
- * Please read COPYING and README for further details.
- *
- * Based on the original code of Epona by Lara.
- * Based on the original code of Services by Andy Church.
- */
-
-/*************************************************************************/
-
-#include "module.h"
-
-class CommandCSSetMisc : public Command
-{
- public:
- CommandCSSetMisc(Module *creator, const Anope::string &cname = "chanserv/set/misc") : Command(creator, cname, 1, 2)
- {
- this->SetSyntax(_("\037channel\037 \037parameters\037"));
- }
-
- void Execute(CommandSource &source, const std::vector<Anope::string> &params)
- {
- ChannelInfo *ci = cs_findchan(params[0]);
- if (ci == NULL)
- {
- source.Reply(CHAN_X_NOT_REGISTERED, params[0].c_str());
- return;
- }
-
- ci->Shrink("cs_set_misc:" + source.command.replace_all_cs(" ", "_"));
- if (params.size() > 1)
- {
- ci->Extend("cs_set_misc:" + source.command.replace_all_cs(" ", "_"), new ExtensibleItemRegular<Anope::string>(params[1]));
- source.Reply(CHAN_SETTING_CHANGED, source.command.c_str(), ci->name.c_str(), params[1].c_str());
- }
- else
- source.Reply(CHAN_SETTING_UNSET, source.command.c_str(), ci->name.c_str());
- }
-};
-
-class CommandCSSASetMisc : public CommandCSSetMisc
-{
- public:
- CommandCSSASetMisc(Module *creator) : CommandCSSetMisc(creator, "chanserv/saset/misc")
- {
- }
-};
-
-class CSSetMisc : public Module
-{
- CommandCSSetMisc commandcssetmisc;
- CommandCSSASetMisc commandcssasetmisc;
-
- public:
- CSSetMisc(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, SUPPORTED),
- commandcssetmisc(this), commandcssasetmisc(this)
- {
- this->SetAuthor("Anope");
-
- Implementation i[] = { I_OnChanInfo, I_OnDatabaseWriteMetadata, I_OnDatabaseReadMetadata };
- ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
-
- ModuleManager::RegisterService(&this->commandcssetmisc);
- ModuleManager::RegisterService(&this->commandcssasetmisc);
- }
-
- void OnChanInfo(CommandSource &source, ChannelInfo *ci, bool ShowHidden)
- {
- std::deque<Anope::string> list;
- ci->GetExtList(list);
-
- for (unsigned i = 0; i < list.size(); ++i)
- {
- if (list[i].find("cs_set_misc:") != 0)
- continue;
-
- Anope::string value;
- if (ci->GetExtRegular(list[i], value))
- source.Reply(" %s: %s", list[i].substr(12).replace_all_cs("_", " ").c_str(), value.c_str());
- }
- }
-
- void OnDatabaseWriteMetadata(void (*WriteMetadata)(const Anope::string &, const Anope::string &), ChannelInfo *ci)
- {
- std::deque<Anope::string> list;
- ci->GetExtList(list);
-
- for (unsigned i = 0; i < list.size(); ++i)
- {
- if (list[i].find("cs_set_misc:") != 0)
- continue;
-
- Anope::string value;
- if (ci->GetExtRegular(list[i], value))
- WriteMetadata(list[i], ":" + value);
- }
- }
-
- EventReturn OnDatabaseReadMetadata(ChannelInfo *ci, const Anope::string &key, const std::vector<Anope::string> &params)
- {
- if (key.find("cs_set_misc:") == 0)
- ci->Extend(key, new ExtensibleItemRegular<Anope::string>(params[0]));
-
- return EVENT_CONTINUE;
- }
-};
-
-MODULE_INIT(CSSetMisc)
diff --git a/modules/extra/cs_sync.cpp b/modules/extra/cs_sync.cpp
deleted file mode 100644
index 2937cc4fc..000000000
--- a/modules/extra/cs_sync.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- *
- * (C) 2003-2011 Anope Team
- * Contact us at team@anope.org
- *
- * Please read COPYING and README for further details.
- *
- * Based on the original code of Epona by Lara.
- * Based on the original code of Services by Andy Church.
- */
-
-#include "module.h"
-
-class CommandCSSync : public Command
-{
- public:
- CommandCSSync(Module *creator) : Command(creator, "chanserv/sync", 1, 1)
- {
- this->SetDesc(_("Sync users channel modes"));
- this->SetSyntax(_("\037channel\037"));
- }
-
- void Execute(CommandSource &source, const std::vector<Anope::string> &params)
- {
- ChannelInfo *ci = cs_findchan(params[0]);
-
- if (ci == NULL)
- source.Reply(CHAN_X_NOT_REGISTERED, params[0].c_str());
- else if (ci->c == NULL)
- source.Reply(CHAN_X_NOT_IN_USE, params[0].c_str());
- else
- {
- for (CUserList::iterator it = ci->c->users.begin(), it_end = ci->c->users.end(); it != it_end; ++it)
- chan_set_correct_modes((*it)->user, ci->c, 1);
-
- source.Reply(_("All user modes on \2%s\2 have been synced."), ci->name.c_str());
- }
- }
-
- bool OnHelp(CommandSource &source, const Anope::string &params)
- {
- this->SendSyntax(source);
- source.Reply(" ");
- source.Reply(_("Syncs all modes set on users on the channel with the modes\n"
- "they should have based on their access."));
- return true;
- }
-};
-
-class CSSync : public Module
-{
- CommandCSSync commandcssync;
- public:
- CSSync(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, SUPPORTED),
- commandcssync(this)
- {
- this->SetAuthor("Anope");
-
- ModuleManager::RegisterService(&commandcssync);
- }
-};
-
-MODULE_INIT(CSSync)
diff --git a/modules/extra/cs_tban.cpp b/modules/extra/cs_tban.cpp
deleted file mode 100644
index 404279bef..000000000
--- a/modules/extra/cs_tban.cpp
+++ /dev/null
@@ -1,116 +0,0 @@
-/* cs_tban.c - Bans the user for a given length of time
- *
- * (C) 2003-2011 Anope Team
- * Contact us at team@anope.org
- *
- * Based on the original module by Rob <rob@anope.org>
- * Included in the Anope module pack since Anope 1.7.8
- * Anope Coder: Rob <rob@anope.org>
- *
- * Please read COPYING and README for further details.
- *
- * Send bug reports to the Anope Coder instead of the module
- * author, because any changes since the inclusion into anope
- * are not supported by the original author.
- */
-/*************************************************************************/
-
-#include "module.h"
-
-static Module *me;
-
-class TempBan : public CallBack
-{
- private:
- dynamic_reference<Channel> chan;
- Anope::string mask;
-
- public:
- TempBan(time_t seconds, Channel *c, const Anope::string &banmask) : CallBack(me, seconds), chan(c), mask(banmask) { }
-
- void Tick(time_t ctime)
- {
- if (chan && chan->ci)
- chan->RemoveMode(NULL, CMODE_BAN, mask);
- }
-};
-
-static bool CanBanUser(CommandSource &source, Channel *c, User *u2)
-{
- User *u = source.u;
- ChannelInfo *ci = c->ci;
- bool ok = false;
- if (!ci->HasPriv(u, CA_BAN))
- source.Reply(ACCESS_DENIED);
- else if (matches_list(c, u2, CMODE_EXCEPT))
- source.Reply(CHAN_EXCEPTED, u2->nick.c_str(), ci->name.c_str());
- else if (u2->IsProtected())
- source.Reply(ACCESS_DENIED);
- else
- ok = true;
-
- return ok;
-}
-
-class CommandCSTBan : public Command
-{
- public:
- CommandCSTBan(Module *m) : Command(m, "TBAN", 3, 3)
- {
- this->SetDesc(_("Bans the user for a given length of time"));
- this->SetSyntax(_("\037channel\037 \037nick\037 \037time\037"));
- }
-
- void Execute(CommandSource &source, const std::vector<Anope::string> &params)
- {
- Channel *c = findchan(params[0]);
-
- const Anope::string &nick = params[1];
- const Anope::string &time = params[2];
-
- User *u2;
- if (!c)
- source.Reply(CHAN_X_NOT_IN_USE, params[0].c_str());
- else if (!(u2 = finduser(nick)))
- source.Reply(NICK_X_NOT_IN_USE, nick.c_str());
- else
- if (CanBanUser(source, c, u2))
- {
- Anope::string mask;
- get_idealban(c->ci, u2, mask);
- c->SetMode(NULL, CMODE_BAN, mask);
- new TempBan(dotime(time), c, mask);
- source.Reply(_("%s banned from %s, will auto-expire in %s"), mask.c_str(), c->name.c_str(), time.c_str());
- }
-
- return;
- }
-
- bool OnHelp(CommandSource &source, const Anope::string &subcommand)
- {
- this->OnSyntaxError(source, "");
- source.Reply(" ");
- source.Reply(_("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."));
-
- return true;
- }
-};
-
-class CSTBan : public Module
-{
- CommandCSTBan commandcstban;
-
- public:
- CSTBan(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, SUPPORTED),
- commandcstban(this)
- {
- this->SetAuthor("Anope");
-
- me = this;
-
- ModuleManager::RegisterService(&commandcstban);
- }
-};
-
-MODULE_INIT(CSTBan)
diff --git a/modules/extra/hs_request.cpp b/modules/extra/hs_request.cpp
deleted file mode 100644
index 7686794f5..000000000
--- a/modules/extra/hs_request.cpp
+++ /dev/null
@@ -1,424 +0,0 @@
-/* hs_request.c - Add request and activate functionality to HostServ,
- *
- *
- * (C) 2003-2011 Anope Team
- * Contact us at team@anope.org
- *
- * Based on the original module by Rob <rob@anope.org>
- * Included in the Anope module pack since Anope 1.7.11
- * Anope Coder: GeniusDex <geniusdex@anope.org>
- *
- * Please read COPYING and README for further details.
- *
- * Send bug reports to the Anope Coder instead of the module
- * author, because any changes since the inclusion into anope
- * are not supported by the original author.
- */
-
-#include "module.h"
-#include "memoserv.h"
-
-static bool HSRequestMemoUser = false;
-static bool HSRequestMemoOper = false;
-
-void my_add_host_request(const Anope::string &nick, const Anope::string &vIdent, const Anope::string &vhost, const Anope::string &creator, time_t tmp_time);
-void req_send_memos(CommandSource &source, const Anope::string &vIdent, const Anope::string &vHost);
-
-struct HostRequest
-{
- Anope::string ident;
- Anope::string host;
- time_t time;
-};
-
-typedef std::map<Anope::string, HostRequest *, std::less<ci::string> > RequestMap;
-RequestMap Requests;
-
-class CommandHSRequest : public Command
-{
- bool isvalidchar(char c)
- {
- if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || c == '.' || c == '-')
- return true;
- return false;
- }
-
- public:
- CommandHSRequest(Module *creator) : Command(creator, "hostserv/request", 1, 1)
- {
- this->SetDesc(_("Request a vHost for your nick"));
- this->SetSyntax(_("vhost"));
- }
-
- void Execute(CommandSource &source, const std::vector<Anope::string> &params)
- {
- User *u = source.u;
-
- Anope::string rawhostmask = params[0];
-
- Anope::string user, host;
- size_t a = rawhostmask.find('@');
-
- if (a == Anope::string::npos)
- host = rawhostmask;
- else
- {
- user = rawhostmask.substr(0, a);
- host = rawhostmask.substr(a + 1);
- }
-
- if (host.empty())
- {
- this->OnSyntaxError(source, "");
- return;
- }
-
- if (!user.empty())
- {
- if (user.length() > Config->UserLen)
- {
- source.Reply(HOST_SET_IDENTTOOLONG, Config->UserLen);
- return;
- }
- else if (!ircd->vident)
- {
- source.Reply(HOST_NO_VIDENT);
- return;
- }
- for (Anope::string::iterator s = user.begin(), s_end = user.end(); s != s_end; ++s)
- if (!isvalidchar(*s))
- {
- source.Reply(HOST_SET_IDENT_ERROR);
- return;
- }
- }
-
- if (host.length() > Config->HostLen)
- {
- source.Reply(HOST_SET_TOOLONG, Config->HostLen);
- return;
- }
-
- if (!isValidHost(host, 3))
- {
- source.Reply(HOST_SET_ERROR);
- return;
- }
-
- if (HSRequestMemoOper && Config->MSSendDelay > 0 && u && u->lastmemosend + Config->MSSendDelay > Anope::CurTime)
- {
- source.Reply(_("Please wait %d seconds before requesting a new vHost"), Config->MSSendDelay);
- u->lastmemosend = Anope::CurTime;
- return;
- }
- my_add_host_request(u->nick, user, host, u->nick, Anope::CurTime);
-
- source.Reply(_("Your vHost has been requested"));
- req_send_memos(source, user, host);
- Log(LOG_COMMAND, u, this, NULL) << "to request new vhost " << (!user.empty() ? user + "@" : "") << host;
-
- return;
- }
-
- bool OnHelp(CommandSource &source, const Anope::string &subcommand)
- {
- this->SendSyntax(source);
- source.Reply(" ");
- source.Reply(_("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."));
- return true;
- }
-};
-
-class CommandHSActivate : public Command
-{
- public:
- CommandHSActivate(Module *creator) : Command(creator, "hostserv/activate", 1, 1)
- {
- this->SetDesc(_("Approve the requested vHost of a user"));
- this->SetSyntax(_("\037nick\037"));
- }
-
- void Execute(CommandSource &source, const std::vector<Anope::string> &params)
- {
- User *u = source.u;
-
- const Anope::string &nick = params[0];
-
- NickAlias *na = findnick(nick);
- if (na)
- {
- RequestMap::iterator it = Requests.find(na->nick);
- if (it != Requests.end())
- {
- na->hostinfo.SetVhost(it->second->ident, it->second->host, u->nick, it->second->time);
- FOREACH_MOD(I_OnSetVhost, OnSetVhost(na));
-
- if (HSRequestMemoUser && memoserv)
- memoserv->Send(Config->HostServ, na->nick, _("[auto memo] Your requested vHost has been approved."), true);
-
- source.Reply(_("vHost for %s has been activated"), na->nick.c_str());
- Log(LOG_COMMAND, u, this, NULL) << "for " << na->nick << " for vhost " << (!it->second->ident.empty() ? it->second->ident + "@" : "") << it->second->host;
- delete it->second;
- Requests.erase(it);
- }
- else
- source.Reply(_("No request for nick %s found."), nick.c_str());
- }
- else
- source.Reply(NICK_X_NOT_REGISTERED, nick.c_str());
-
- return;
- }
-
- bool OnHelp(CommandSource &source, const Anope::string &subcommand)
- {
- this->SendSyntax(source);
- source.Reply(" ");
- source.Reply(_("Activate the requested vHost for the given nick."));
- if (HSRequestMemoUser)
- source.Reply(_("A memo informing the user will also be sent."));
-
- return true;
- }
-};
-
-class CommandHSReject : public Command
-{
- public:
- CommandHSReject(Module *creator) : Command(creator, "hostserv/reject", 1, 2)
- {
- this->SetDesc(_("Reject the requested vHost of a user"));
- }
-
- void Execute(CommandSource &source, const std::vector<Anope::string> &params)
- {
- User *u = source.u;
-
- const Anope::string &nick = params[0];
- const Anope::string &reason = params.size() > 1 ? params[1] : "";
-
- RequestMap::iterator it = Requests.find(nick);
- if (it != Requests.end())
- {
- delete it->second;
- Requests.erase(it);
-
- if (HSRequestMemoUser && memoserv)
- {
- Anope::string message;
- if (!reason.empty())
- message = Anope::printf(_("[auto memo] Your requested vHost has been rejected. Reason: %s"), reason.c_str());
- else
- message = _("[auto memo] Your requested vHost has been rejected.");
-
- memoserv->Send(Config->HostServ, nick, message, true);
- }
-
- source.Reply(_("vHost for %s has been rejected"), nick.c_str());
- Log(LOG_COMMAND, u, this, NULL) << "to reject vhost for " << nick << " (" << (!reason.empty() ? reason : "") << ")";
- }
- else
- source.Reply(_("No request for nick %s found."), nick.c_str());
-
- return;
- }
-
- bool OnHelp(CommandSource &source, const Anope::string &subcommand)
- {
- this->SendSyntax(source);
- source.Reply(" ");
- source.Reply(_("Reject the requested vHost for the given nick."));
- if (HSRequestMemoUser)
- source.Reply(_("A memo informing the user will also be sent."));
-
- return true;
- }
-};
-
-class HSListBase : public Command
-{
- protected:
- void DoList(CommandSource &source)
- {
- int counter = 1;
- int from = 0, to = 0;
- unsigned display_counter = 0;
-
- for (RequestMap::iterator it = Requests.begin(), it_end = Requests.end(); it != it_end; ++it)
- {
- HostRequest *hr = it->second;
- if (((counter >= from && counter <= to) || (!from && !to)) && display_counter < Config->NSListMax)
- {
- ++display_counter;
- if (!hr->ident.empty())
- source.Reply(_("#%d Nick:\002%s\002, vhost:\002%s\002@\002%s\002 (%s - %s)"), counter, it->first.c_str(), hr->ident.c_str(), hr->host.c_str(), it->first.c_str(), do_strftime(hr->time).c_str());
- else
- source.Reply(_("#%d Nick:\002%s\002, vhost:\002%s\002 (%s - %s)"), counter, it->first.c_str(), hr->host.c_str(), it->first.c_str(), do_strftime(hr->time).c_str());
- }
- ++counter;
- }
- source.Reply(_("Displayed all records (Count: \002%d\002)"), display_counter);
-
- return;
- }
- public:
- HSListBase(Module *creator, const Anope::string &cmd, int min, int max) : Command(creator, cmd, min, max)
- {
- }
-};
-
-class CommandHSWaiting : public HSListBase
-{
- public:
- CommandHSWaiting(Module *creator) : HSListBase(creator, "hostserv/waiting", 0, 0)
- {
- this->SetDesc(_("Retrieves the vhost requests"));
- this->SetSyntax("");
- }
-
- void Execute(CommandSource &source, const std::vector<Anope::string> &params)
- {
- return this->DoList(source);
- }
-
- bool OnHelp(CommandSource &source, const Anope::string &subcommand)
- {
- this->SendSyntax(source);
- source.Reply(" ");
- source.Reply(_("This command retrieves the vhost requests"));
-
- return true;
- }
-};
-
-class HSRequest : public Module
-{
- CommandHSRequest commandhsrequest;
- CommandHSActivate commandhsactive;
- CommandHSReject commandhsreject;
- CommandHSWaiting commandhswaiting;
-
- public:
- HSRequest(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, SUPPORTED),
- commandhsrequest(this), commandhsactive(this), commandhsreject(this), commandhswaiting(this)
- {
- this->SetAuthor("Anope");
-
- ModuleManager::RegisterService(&commandhsrequest);
- ModuleManager::RegisterService(&commandhsactive);
- ModuleManager::RegisterService(&commandhsreject);
- ModuleManager::RegisterService(&commandhswaiting);
-
- Implementation i[] = { I_OnDelNick, I_OnDatabaseRead, I_OnDatabaseWrite, I_OnReload };
- ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
-
- this->OnReload();
- }
-
- ~HSRequest()
- {
- /* Clean up all open host requests */
- while (!Requests.empty())
- {
- delete Requests.begin()->second;
- Requests.erase(Requests.begin());
- }
- }
-
- void OnDelNick(NickAlias *na)
- {
- RequestMap::iterator it = Requests.find(na->nick);
-
- if (it != Requests.end())
- {
- delete it->second;
- Requests.erase(it);
- }
- }
-
- EventReturn OnDatabaseRead(const std::vector<Anope::string> &params)
- {
- if (params[0].equals_ci("HS_REQUEST") && params.size() >= 5)
- {
- Anope::string vident = params[2].equals_ci("(null)") ? "" : params[2];
- my_add_host_request(params[1], vident, params[3], params[1], params[4].is_pos_number_only() ? convertTo<time_t>(params[4]) : 0);
-
- return EVENT_STOP;
- }
-
- return EVENT_CONTINUE;
- }
-
- void OnDatabaseWrite(void (*Write)(const Anope::string &))
- {
- for (RequestMap::iterator it = Requests.begin(), it_end = Requests.end(); it != it_end; ++it)
- {
- HostRequest *hr = it->second;
- std::stringstream buf;
- buf << "HS_REQUEST " << it->first << " " << (hr->ident.empty() ? "(null)" : hr->ident) << " " << hr->host << " " << hr->time;
- Write(buf.str());
- }
- }
-
- void OnReload()
- {
- ConfigReader config;
- HSRequestMemoUser = config.ReadFlag("hs_request", "memouser", "no", 0);
- HSRequestMemoOper = config.ReadFlag("hs_request", "memooper", "no", 0);
-
- Log(LOG_DEBUG) << "[hs_request] Set config vars: MemoUser=" << HSRequestMemoUser << " MemoOper=" << HSRequestMemoOper;
- }
-};
-
-void req_send_memos(CommandSource &source, const Anope::string &vIdent, const Anope::string &vHost)
-{
- Anope::string host;
- std::list<std::pair<Anope::string, Anope::string> >::iterator it, it_end;
-
- if (!vIdent.empty())
- host = vIdent + "@" + vHost;
- else
- host = vHost;
-
- if (HSRequestMemoOper == 1 && memoserv)
- for (unsigned i = 0; i < Config->Opers.size(); ++i)
- {
- Oper *o = Config->Opers[i];
-
- NickAlias *na = findnick(o->name);
- if (!na)
- continue;
-
- Anope::string message = Anope::printf(_("[auto memo] vHost \002%s\002 has been requested by %s."), host.c_str(), source.u->GetMask().c_str());
-
- memoserv->Send(Config->HostServ, na->nick, message, true);
- }
-}
-
-void my_add_host_request(const Anope::string &nick, const Anope::string &vIdent, const Anope::string &vhost, const Anope::string &creator, time_t tmp_time)
-{
- HostRequest *hr = new HostRequest;
- hr->ident = vIdent;
- hr->host = vhost;
- hr->time = tmp_time;
- RequestMap::iterator it = Requests.find(nick);
- if (it != Requests.end())
- {
- delete it->second;
- Requests.erase(it);
- }
- Requests.insert(std::make_pair(nick, hr));
-}
-
-void my_load_config()
-{
- ConfigReader config;
- HSRequestMemoUser = config.ReadFlag("hs_request", "memouser", "no", 0);
- HSRequestMemoOper = config.ReadFlag("hs_request", "memooper", "no", 0);
-
- Log(LOG_DEBUG) << "[hs_request] Set config vars: MemoUser=" << HSRequestMemoUser << " MemoOper=" << HSRequestMemoOper;
-}
-
-MODULE_INIT(HSRequest)
diff --git a/modules/extra/language/CMakeLists.txt b/modules/extra/language/CMakeLists.txt
deleted file mode 100644
index af4dd90a6..000000000
--- a/modules/extra/language/CMakeLists.txt
+++ /dev/null
@@ -1,38 +0,0 @@
-# Only do this if gettext is installed
-if(GETTEXT_FOUND)
- # Get all of the .po files
- file(GLOB LANG_SRCS_PO RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.*.po")
- sort_list(LANG_SRCS_PO)
-
- foreach(LANG_PO ${LANG_SRCS_PO})
- # Get the domain for this language file
- string(LENGTH ${LANG_PO} LANG_PO_LENGTH)
- math(EXPR DOMAIN_LENGTH "${LANG_PO_LENGTH} - 9")
- string(SUBSTRING ${LANG_PO} 0 ${DOMAIN_LENGTH} LANG_DOMAIN)
-
- # Get the language for this language file
- math(EXPR DOMAIN_LENGTH "${LANG_PO_LENGTH} - 8")
- string(SUBSTRING ${LANG_PO} ${DOMAIN_LENGTH} 5 LANG_LANG)
-
- # Get the .mo file name
- string(REGEX REPLACE "\\.po$" ".mo" LANG_MO ${LANG_PO})
- # Add the .mo file to a list for use later with add_custom_target
- set(LANG_SRCS_MO ${LANG_SRCS_MO} ${CMAKE_CURRENT_BINARY_DIR}/${LANG_MO})
- # Run msgfmt on the language file, depends on the .po file
- add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${LANG_MO}
- COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -c ${CMAKE_CURRENT_SOURCE_DIR}/${LANG_PO} -o ${CMAKE_CURRENT_BINARY_DIR}/${LANG_MO}
- MAIN_DEPENDENCY ${LANG_PO}
- )
- # Add to cpack ignored files if not on Windows.
- if(NOT WIN32)
- add_to_cpack_ignored_files("${LANG_MO}")
- endif(NOT WIN32)
-
- # Install the new language file
- install(CODE "FILE(MAKE_DIRECTORY \${CMAKE_INSTALL_PREFIX}/data/languages/${LANG_LANG}/LC_MESSAGES/)")
- install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${LANG_MO} DESTINATION data/languages/${LANG_LANG}/LC_MESSAGES RENAME ${LANG_DOMAIN}.mo PERMISSIONS ${PERMS})
- endforeach(LANG_PO)
-
- # Generate languages, depends on the mo files
- add_custom_target(module_language DEPENDS ${LANG_SRCS_MO})
-endif(GETTEXT_FOUND)
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/extra/language/update.sh b/modules/extra/language/update.sh
deleted file mode 100755
index 1f16ea961..000000000
--- a/modules/extra/language/update.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-
-for f in `ls ../*.cpp`
-do
- BASE=`basename $f | cut -d'.' -f1`
- xgettext -C -s -d $BASE -o $BASE.pot --from-code=utf-8 --keyword --keyword=_ $f
-done
-
-for f in `ls *.po`
-do
- msgmerge -v -s -U $f `basename $f | cut -d'.' -f1`.pot
-done
-
-rm -f *~
diff --git a/modules/extra/ns_set_misc.cpp b/modules/extra/ns_set_misc.cpp
deleted file mode 100644
index f0ee269cc..000000000
--- a/modules/extra/ns_set_misc.cpp
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- *
- * (C) 2003-2011 Anope Team
- * Contact us at team@anope.org
- *
- * Please read COPYING and README for further details.
- *
- * Based on the original code of Epona by Lara.
- * Based on the original code of Services by Andy Church.
- */
-
-/*************************************************************************/
-
-#include "module.h"
-
-class CommandNSSetMisc : public Command
-{
- public:
- CommandNSSetMisc(Module *creator, const Anope::string &cname = "nickserv/set/misc", size_t min = 1) : Command(creator, cname, min, min + 1)
- {
- this->SetSyntax(_("\037parameter\037"));
- }
-
- void Run(CommandSource &source, const Anope::string &user, const Anope::string &param)
- {
- NickAlias *na = findnick(user);
- if (!na)
- {
- source.Reply(NICK_X_NOT_REGISTERED, user.c_str());
- return;
- }
- NickCore *nc = na->nc;
-
- nc->Shrink("ns_set_misc:" + source.command.replace_all_cs(" ", "_"));
- if (!param.empty())
- {
- nc->Extend("ns_set_misc:" + source.command.replace_all_cs(" ", "_"), new ExtensibleItemRegular<Anope::string>(param));
- source.Reply(CHAN_SETTING_CHANGED, source.command.c_str(), nc->display.c_str(), param.c_str());
- }
- else
- source.Reply(CHAN_SETTING_UNSET, source.command.c_str(), nc->display.c_str());
-
- return;
- }
-
- void Execute(CommandSource &source, const std::vector<Anope::string> &params)
- {
- this->Run(source, source.u->Account()->display, params[0]);
- }
-};
-
-class CommandNSSASetMisc : public CommandNSSetMisc
-{
- public:
- CommandNSSASetMisc(Module *creator) : CommandNSSetMisc(creator, "nickserv/saset/misc", 2)
- {
- this->ClearSyntax();
- this->SetSyntax(_("\037nickname\037 \037parameter\037"));
- }
-
- void Execute(CommandSource &source, const std::vector<Anope::string> &params)
- {
- this->Run(source, params[0], params[1]);
- }
-};
-
-class NSSetMisc : public Module
-{
- CommandNSSetMisc commandnssetmisc;
- CommandNSSASetMisc commandnssasetmisc;
-
- public:
- NSSetMisc(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, SUPPORTED),
- commandnssetmisc(this), commandnssasetmisc(this)
- {
- this->SetAuthor("Anope");
-
- Implementation i[] = { I_OnNickInfo, I_OnDatabaseWriteMetadata, I_OnDatabaseReadMetadata };
- ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
-
- ModuleManager::RegisterService(&this->commandnssetmisc);
- ModuleManager::RegisterService(&this->commandnssasetmisc);
- }
-
- void OnNickInfo(CommandSource &source, NickAlias *na, bool ShowHidden)
- {
- std::deque<Anope::string> list;
- na->nc->GetExtList(list);
-
- for (unsigned i = 0; i < list.size(); ++i)
- {
- if (list[i].find("ns_set_misc:") != 0)
- continue;
-
- Anope::string value;
- if (na->nc->GetExtRegular(list[i], value))
- source.Reply(" %s: %s", list[i].substr(12).replace_all_cs("_", " ").c_str(), value.c_str());
- }
- }
-
- void OnDatabaseWriteMetadata(void (*WriteMetadata)(const Anope::string &, const Anope::string &), NickCore *nc)
- {
- std::deque<Anope::string> list;
- nc->GetExtList(list);
-
- for (unsigned i = 0; i < list.size(); ++i)
- {
- if (list[i].find("ns_set_misc:") != 0)
- continue;
-
- Anope::string value;
- if (nc->GetExtRegular(list[i], value))
- WriteMetadata(list[i], ":" + value);
- }
- }
-
- EventReturn OnDatabaseReadMetadata(NickCore *nc, const Anope::string &key, const std::vector<Anope::string> &params)
- {
- if (key.find("ns_set_misc:") == 0)
- nc->Extend(key, new ExtensibleItemRegular<Anope::string>(params[0]));
-
- return EVENT_CONTINUE;
- }
-};
-
-MODULE_INIT(NSSetMisc)
diff --git a/modules/extra/os_defcon.cpp b/modules/extra/os_defcon.cpp
deleted file mode 100644
index ea513e1dc..000000000
--- a/modules/extra/os_defcon.cpp
+++ /dev/null
@@ -1,663 +0,0 @@
-/* OperServ core functions
- *
- * (C) 2003-2011 Anope Team
- * Contact us at team@anope.org
- *
- * Please read COPYING and README for further details.
- *
- * Based on the original code of Epona by Lara.
- * Based on the original code of Services by Andy Church.
- */
-
-/*************************************************************************/
-
-#include "module.h"
-#include "global.h"
-#include "os_session.h"
-
-enum DefconLevel
-{
- DEFCON_NO_NEW_CHANNELS,
- DEFCON_NO_NEW_NICKS,
- DEFCON_NO_MLOCK_CHANGE,
- DEFCON_FORCE_CHAN_MODES,
- DEFCON_REDUCE_SESSION,
- DEFCON_NO_NEW_CLIENTS,
- DEFCON_OPER_ONLY,
- DEFCON_SILENT_OPER_ONLY,
- DEFCON_AKILL_NEW_CLIENTS,
- DEFCON_NO_NEW_MEMOS
-};
-
-bool DefConModesSet = false;
-
-struct DefconConfig
-{
- std::vector<std::bitset<32> > DefCon;
- Flags<ChannelModeName, CMODE_END * 2> DefConModesOn;
- Flags<ChannelModeName, CMODE_END * 2> DefConModesOff;
- std::map<ChannelModeName, Anope::string> DefConModesOnParams;
-
- int defaultlevel, sessionlimit;
- Anope::string chanmodes, message, offmessage, akillreason;
- std::vector<Anope::string> defcons;
- time_t akillexpire, timeout;
- bool globalondefcon;
-
- DefconConfig()
- {
- this->DefCon.resize(6);
- this->defcons.resize(5);
- }
-
- bool Check(DefconLevel level)
- {
- return this->Check(this->defaultlevel, level);
- }
-
- bool Check(int dlevel, DefconLevel level)
- {
- return this->DefCon[dlevel].test(level);
- }
-
- void Add(int dlevel, DefconLevel level)
- {
- this->DefCon[dlevel][level] = true;
- }
-
- void Del(int dlevel, DefconLevel level)
- {
- this->DefCon[dlevel][level] = false;
- }
-
- bool SetDefConParam(ChannelModeName Name, const Anope::string &buf)
- {
- return DefConModesOnParams.insert(std::make_pair(Name, buf)).second;
- }
-
- void UnsetDefConParam(ChannelModeName Name)
- {
- DefConModesOnParams.erase(Name);
- }
-
- bool GetDefConParam(ChannelModeName Name, Anope::string &buf)
- {
- std::map<ChannelModeName, Anope::string>::iterator it = DefConModesOnParams.find(Name);
-
- buf.clear();
-
- if (it != DefConModesOnParams.end())
- {
- buf = it->second;
- return true;
- }
-
- return false;
- }
-};
-
-static DefconConfig DConfig;
-
-/**************************************************************************/
-
-void defcon_sendlvls(CommandSource &source);
-void runDefCon();
-static Anope::string defconReverseModes(const Anope::string &modes);
-
-class DefConTimeout : public CallBack
-{
- int level;
-
- public:
- DefConTimeout(Module *mod, int newlevel) : CallBack(mod, DConfig.timeout), level(newlevel) { }
-
- void Tick(time_t)
- {
- if (DConfig.defaultlevel != level)
- {
- DConfig.defaultlevel = level;
- FOREACH_MOD(I_OnDefconLevel, OnDefconLevel(level));
- Log(findbot(Config->OperServ), "operserv/defcon") << "Defcon level timeout, returning to level " << level;
-
- if (DConfig.globalondefcon)
- {
- if (!DConfig.offmessage.empty())
- global->SendGlobal(findbot(Config->Global), "", DConfig.offmessage);
- else
- global->SendGlobal(findbot(Config->Global), "", Anope::printf(translate(_("The Defcon Level is now at Level: \002%d\002")), DConfig.defaultlevel));
-
- if (!DConfig.message.empty())
- global->SendGlobal(findbot(Config->Global), "", DConfig.message);
- }
-
- runDefCon();
- }
- }
-};
-static DefConTimeout *timeout;
-
-class CommandOSDefcon : public Command
-{
- void SendLevels(CommandSource &source)
- {
- if (DConfig.Check(DEFCON_NO_NEW_CHANNELS))
- source.Reply(_("* No new channel registrations"));
- if (DConfig.Check(DEFCON_NO_NEW_NICKS))
- source.Reply(_("* No new nick registrations"));
- if (DConfig.Check(DEFCON_NO_MLOCK_CHANGE))
- source.Reply(_("* No MLOCK changes"));
- if (DConfig.Check(DEFCON_FORCE_CHAN_MODES) && !DConfig.chanmodes.empty())
- source.Reply(_("* Force Chan Modes (%s) to be set on all channels"), DConfig.chanmodes.c_str());
- if (DConfig.Check(DEFCON_REDUCE_SESSION))
- source.Reply(_("* Use the reduced session limit of %d"), DConfig.sessionlimit);
- if (DConfig.Check(DEFCON_NO_NEW_CLIENTS))
- source.Reply(_("* Kill any NEW clients connecting"));
- if (DConfig.Check(DEFCON_OPER_ONLY))
- source.Reply(_("* Ignore any non-opers with message"));
- if (DConfig.Check(DEFCON_SILENT_OPER_ONLY))
- source.Reply(_("* Silently ignore non-opers"));
- if (DConfig.Check(DEFCON_AKILL_NEW_CLIENTS))
- source.Reply(_("* AKILL any new clients connecting"));
- if (DConfig.Check(DEFCON_NO_NEW_MEMOS))
- source.Reply(_("* No new memos sent"));
- }
-
- public:
- CommandOSDefcon(Module *creator) : Command(creator, "operserv/defcon", 1, 1)
- {
- this->SetDesc(_("Manipulate the DefCon system"));
- this->SetSyntax(_("[\0021\002|\0022\002|\0023\002|\0024\002|\0025\002]"));
- }
-
- void Execute(CommandSource &source, const std::vector<Anope::string> &params)
- {
- User *u = source.u;
- const Anope::string &lvl = params[0];
-
- if (lvl.empty())
- {
- source.Reply(_("Services are now at DEFCON \002%d\002"), DConfig.defaultlevel);
- this->SendLevels(source);
- return;
- }
-
- int newLevel = 0;
- try
- {
- newLevel = convertTo<int>(lvl);
- }
- catch (const ConvertException &) { }
-
- if (newLevel < 1 || newLevel > 5)
- {
- this->OnSyntaxError(source, "");
- return;
- }
-
- DConfig.defaultlevel = newLevel;
-
- FOREACH_MOD(I_OnDefconLevel, OnDefconLevel(newLevel));
-
- if (timeout)
- {
- delete timeout;
- timeout = NULL;
- }
-
- if (DConfig.timeout)
- timeout = new DefConTimeout(this->module, 5);
-
- source.Reply(_("Services are now at DEFCON \002%d\002"), DConfig.defaultlevel);
- this->SendLevels(source);
- Log(LOG_ADMIN, u, this) << "to change defcon level to " << newLevel;
-
- /* Global notice the user what is happening. Also any Message that
- the Admin would like to add. Set in config file. */
- if (DConfig.globalondefcon)
- {
- if (DConfig.defaultlevel == 5 && !DConfig.offmessage.empty())
- global->SendGlobal(findbot(Config->Global), "", DConfig.offmessage);
- else if (DConfig.defaultlevel != 5)
- {
- global->SendGlobal(findbot(Config->Global), "", Anope::printf(_("The Defcon level is now at: \002%d\002"), DConfig.defaultlevel));
- if (!DConfig.message.empty())
- global->SendGlobal(findbot(Config->Global), "", DConfig.message);
- }
- }
-
- /* Run any defcon functions, e.g. FORCE CHAN MODE */
- runDefCon();
- return;
- }
-
- bool OnHelp(CommandSource &source, const Anope::string &subcommand)
- {
- this->SendSyntax(source);
- source.Reply(" ");
- source.Reply(_("The defcon system can be used to implement a pre-defined\n"
- "set of restrictions to services useful during an attempted\n"
- "attack on the network."));
- return true;
- }
-};
-
-class OSDefcon : public Module
-{
- service_reference<SessionService> session_service;
- service_reference<XLineManager> akills;
- CommandOSDefcon commandosdefcon;
-
- void ParseModeString()
- {
- int add = -1; /* 1 if adding, 0 if deleting, -1 if neither */
- unsigned char mode;
- ChannelMode *cm;
- ChannelModeParam *cmp;
- Anope::string modes, param;
-
- spacesepstream ss(DConfig.chanmodes);
-
- DConfig.DefConModesOn.ClearFlags();
- DConfig.DefConModesOff.ClearFlags();
- ss.GetToken(modes);
-
- /* Loop while there are modes to set */
- for (unsigned i = 0, end = modes.length(); i < end; ++i)
- {
- mode = modes[i];
-
- switch (mode)
- {
- case '+':
- add = 1;
- continue;
- case '-':
- add = 0;
- continue;
- default:
- if (add < 0)
- continue;
- }
-
- if ((cm = ModeManager::FindChannelModeByChar(mode)))
- {
- if (cm->Type == MODE_STATUS || cm->Type == MODE_LIST || !cm->CanSet(NULL))
- {
- Log() << "DefConChanModes mode character '" << mode << "' cannot be locked";
- continue;
- }
- else if (add)
- {
- DConfig.DefConModesOn.SetFlag(cm->Name);
- DConfig.DefConModesOff.UnsetFlag(cm->Name);
-
- if (cm->Type == MODE_PARAM)
- {
- cmp = debug_cast<ChannelModeParam *>(cm);
-
- if (!ss.GetToken(param))
- {
- Log() << "DefConChanModes mode character '" << mode << "' has no parameter while one is expected";
- continue;
- }
-
- if (!cmp->IsValid(param))
- continue;
-
- DConfig.SetDefConParam(cmp->Name, param);
- }
- }
- else if (DConfig.DefConModesOn.HasFlag(cm->Name))
- {
- DConfig.DefConModesOn.UnsetFlag(cm->Name);
-
- if (cm->Type == MODE_PARAM)
- DConfig.UnsetDefConParam(cm->Name);
- }
- }
- }
-
- /* We can't mlock +L if +l is not mlocked as well. */
- if ((cm = ModeManager::FindChannelModeByName(CMODE_REDIRECT)) && DConfig.DefConModesOn.HasFlag(cm->Name) && !DConfig.DefConModesOn.HasFlag(CMODE_LIMIT))
- {
- DConfig.DefConModesOn.UnsetFlag(CMODE_REDIRECT);
-
- Log() << "DefConChanModes must lock mode +l as well to lock mode +L";
- }
-
- /* Some ircd we can't set NOKNOCK without INVITE */
- /* So check if we need there is a NOKNOCK MODE and that we need INVITEONLY */
- if (ircd->knock_needs_i && (cm = ModeManager::FindChannelModeByName(CMODE_NOKNOCK)) && DConfig.DefConModesOn.HasFlag(cm->Name) && !DConfig.DefConModesOn.HasFlag(CMODE_INVITE))
- {
- DConfig.DefConModesOn.UnsetFlag(CMODE_NOKNOCK);
- Log() << "DefConChanModes must lock mode +i as well to lock mode +K";
- }
- }
-
- public:
- OSDefcon(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, SUPPORTED), session_service("session"), akills("xlinemanager/sgline"), commandosdefcon(this)
- {
- this->SetAuthor("Anope");
-
- Implementation i[] = { I_OnReload, I_OnChannelModeSet, I_OnChannelModeUnset, I_OnPreCommand, I_OnUserConnect, I_OnChannelModeAdd, I_OnChannelCreate };
- ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
-
- ModuleManager::RegisterService(&commandosdefcon);
-
- try
- {
- this->OnReload();
- }
- catch (const ConfigException &ex)
- {
- throw ModuleException(ex.GetReason());
- }
- }
-
- void OnReload()
- {
- ConfigReader config;
- DefconConfig dconfig;
-
- dconfig.defaultlevel = config.ReadInteger("defcon", "defaultlevel", 0, 0);
- dconfig.defcons[4] = config.ReadValue("defcon", "level4", 0);
- dconfig.defcons[3] = config.ReadValue("defcon", "level3", 0);
- dconfig.defcons[2] = config.ReadValue("defcon", "level2", 0);
- dconfig.defcons[1] = config.ReadValue("defcon", "level1", 0);
- dconfig.sessionlimit = config.ReadInteger("defcon", "sessionlimit", 0, 0);
- dconfig.akillreason = config.ReadValue("defcon", "akillreason", 0);
- dconfig.akillexpire = dotime(config.ReadValue("defcon", "akillexpire", 0));
- dconfig.chanmodes = config.ReadValue("defcon", "chanmodes", 0);
- dconfig.timeout = dotime(config.ReadValue("defcon", "timeout", 0));
- dconfig.globalondefcon = config.ReadFlag("defcon", "globalondefcon", 0);
- dconfig.message = config.ReadValue("defcon", "message", 0);
- dconfig.offmessage = config.ReadValue("defcon", "offmessage", 0);
-
- if (dconfig.defaultlevel < 1 || dconfig.defaultlevel > 5)
- throw ConfigException("The value for <defcon:defaultlevel> must be between 1 and 5");
- else if (dconfig.akillexpire <= 0)
- throw ConfigException("The value for <defcon:akillexpire> must be greater than zero!");
-
- for (unsigned level = 1; level < 5; ++level)
- {
- spacesepstream operations(dconfig.defcons[level]);
- Anope::string operation;
- while (operations.GetToken(operation))
- {
- if (operation.equals_ci("nonewchannels"))
- dconfig.Add(level, DEFCON_NO_NEW_CHANNELS);
- else if (operation.equals_ci("nonewnicks"))
- dconfig.Add(level, DEFCON_NO_NEW_NICKS);
- else if (operation.equals_ci("nomlockchanges"))
- dconfig.Add(level, DEFCON_NO_MLOCK_CHANGE);
- else if (operation.equals_ci("forcechanmodes"))
- dconfig.Add(level, DEFCON_FORCE_CHAN_MODES);
- else if (operation.equals_ci("reducedsessions"))
- dconfig.Add(level, DEFCON_REDUCE_SESSION);
- else if (operation.equals_ci("nonewclients"))
- dconfig.Add(level, DEFCON_NO_NEW_CLIENTS);
- else if (operation.equals_ci("operonly"))
- dconfig.Add(level, DEFCON_OPER_ONLY);
- else if (operation.equals_ci("silentoperonly"))
- dconfig.Add(level, DEFCON_SILENT_OPER_ONLY);
- else if (operation.equals_ci("akillnewclients"))
- dconfig.Add(level, DEFCON_AKILL_NEW_CLIENTS);
- else if (operation.equals_ci("nonewmemos"))
- dconfig.Add(level, DEFCON_NO_NEW_MEMOS);
- }
-
- if (dconfig.Check(level, DEFCON_REDUCE_SESSION) && dconfig.sessionlimit <= 0)
- throw ConfigException("The value for <defcon:sessionlimit> must be greater than zero!");
- else if (dconfig.Check(level, DEFCON_AKILL_NEW_CLIENTS) && dconfig.akillreason.empty())
- throw ConfigException("The value for <defcon:akillreason> must not be empty!");
- else if (dconfig.Check(level, DEFCON_FORCE_CHAN_MODES) && dconfig.chanmodes.empty())
- throw ConfigException("The value for <defcon:chanmodes> must not be empty!");
- }
-
- DConfig = dconfig;
- this->ParseModeString();
- }
-
- EventReturn OnUserConnect(User *u, bool &exempt)
- {
- if (!exempt && u->server->IsSynced() && DConfig.Check(DEFCON_AKILL_NEW_CLIENTS) && !u->server->IsULined())
- {
- if (DConfig.Check(DEFCON_AKILL_NEW_CLIENTS) && akills)
- {
- Log(findbot(Config->OperServ), "operserv/defcon") << "DEFCON: adding akill for *@" << u->host;
- XLine *x = akills->Add("*@" + u->host, Config->OperServ, Anope::CurTime + DConfig.akillexpire, DConfig.akillreason);
- if (x)
- x->By = Config->OperServ;
- }
-
- if (DConfig.Check(DEFCON_NO_NEW_CLIENTS) || DConfig.Check(DEFCON_AKILL_NEW_CLIENTS))
- u->Kill(Config->OperServ, DConfig.akillreason);
-
- return EVENT_STOP;
- }
-
- return EVENT_CONTINUE;
- }
-
- EventReturn OnChannelModeSet(Channel *c, ChannelModeName Name, const Anope::string &param)
- {
- ChannelMode *cm = ModeManager::FindChannelModeByName(Name);
-
- if (DConfig.Check(DEFCON_FORCE_CHAN_MODES) && cm && DConfig.DefConModesOff.HasFlag(Name))
- {
- c->RemoveMode(findbot(Config->OperServ), Name, param);
-
- return EVENT_STOP;
- }
-
- return EVENT_CONTINUE;
- }
-
- EventReturn OnChannelModeUnset(Channel *c, ChannelModeName Name, const Anope::string &)
- {
- ChannelMode *cm = ModeManager::FindChannelModeByName(Name);
-
- if (DConfig.Check(DEFCON_FORCE_CHAN_MODES) && cm && DConfig.DefConModesOn.HasFlag(Name))
- {
- Anope::string param;
-
- if (DConfig.GetDefConParam(Name, param))
- c->SetMode(findbot(Config->OperServ), Name, param);
- else
- c->SetMode(findbot(Config->OperServ), Name);
-
- return EVENT_STOP;
-
- }
-
- return EVENT_CONTINUE;
- }
-
- EventReturn OnPreCommand(CommandSource &source, Command *command, std::vector<Anope::string> &params)
- {
- if (command->name == "nickserv/register" || command->name == "nickserv/group")
- {
- if (DConfig.Check(DEFCON_NO_NEW_NICKS))
- {
- source.Reply(_("Services are in Defcon mode, Please try again later."));
- return EVENT_STOP;
- }
- }
- else if (command->name == "chanserv/set/mlock")
- {
- if (DConfig.Check(DEFCON_NO_MLOCK_CHANGE))
- {
- source.Reply(_("Services are in Defcon mode, Please try again later."));
- return EVENT_STOP;
- }
- }
- else if (command->name == "chanserv/register")
- {
- if (DConfig.Check(DEFCON_NO_NEW_CHANNELS))
- {
- source.Reply(_("Services are in Defcon mode, Please try again later."));
- return EVENT_STOP;
- }
- }
- else if (command->name == "memoserv/send")
- {
- if (DConfig.Check(DEFCON_NO_NEW_MEMOS))
- {
- source.Reply(_("Services are in Defcon mode, Please try again later."));
- return EVENT_STOP;
- }
- }
-
- return EVENT_CONTINUE;
- }
-
- void OnUserConnect(dynamic_reference<User> &u, bool &exempt)
- {
- if (exempt || !u || !u->server->IsSynced() || u->server->IsULined())
- return;
-
- if (DConfig.Check(DEFCON_AKILL_NEW_CLIENTS) && akills)
- {
- Log(findbot(Config->OperServ), "operserv/defcon") << "DEFCON: adding akill for *@" << u->host;
- XLine *x = akills->Add("*@" + u->host, Config->OperServ, Anope::CurTime + DConfig.akillexpire, DConfig.akillreason);
- if (x)
- x->By = Config->OperServ;
- }
- if (DConfig.Check(DEFCON_NO_NEW_CLIENTS) || DConfig.Check(DEFCON_AKILL_NEW_CLIENTS))
- {
- u->Kill(Config->OperServ, DConfig.akillreason);
- return;
- }
-
- if (!DConfig.sessionlimit)
- return;
-
- if (DConfig.Check(DEFCON_AKILL_NEW_CLIENTS) && akills)
- {
- Log(findbot(Config->OperServ), "operserv/defcon") << "DEFCON: adding akill for *@" << u->host;
- XLine *x = akills->Add("*@" + u->host, Config->OperServ, Anope::CurTime + DConfig.akillexpire, !DConfig.akillreason.empty() ? DConfig.akillreason : "DEFCON AKILL");
- if (x)
- x->By = Config->OperServ;
- }
-
- if (DConfig.Check(DEFCON_NO_NEW_CLIENTS) || DConfig.Check(DEFCON_AKILL_NEW_CLIENTS))
- {
- u->Kill(Config->OperServ, DConfig.akillreason);
- return;
- }
-
- Session *session = session_service->FindSession(u->host);
- Exception *exception = session_service->FindException(u);
-
- if (DConfig.Check(DEFCON_REDUCE_SESSION) && !exception)
- {
- if (session && session->count > DConfig.sessionlimit)
- {
- if (!Config->SessionLimitExceeded.empty())
- ircdproto->SendMessage(findbot(Config->OperServ), u->nick, Config->SessionLimitExceeded.c_str(), u->host.c_str());
- if (!Config->SessionLimitDetailsLoc.empty())
- ircdproto->SendMessage(findbot(Config->OperServ), u->nick, "%s", Config->SessionLimitDetailsLoc.c_str());
-
- u->Kill(Config->OperServ, "Defcon session limit exceeded");
- ++session->hits;
- if (akills && Config->MaxSessionKill && session->hits >= Config->MaxSessionKill)
- {
- akills->Add("*@" + u->host, Config->OperServ, Anope::CurTime + Config->SessionAutoKillExpiry, "Defcon session limit exceeded");
- ircdproto->SendGlobops(findbot(Config->OperServ), "[DEFCON] Added a temporary AKILL for \2*@%s\2 due to excessive connections", u->host.c_str());
- }
- }
- }
- }
-
- void OnChannelModeAdd(ChannelMode *cm)
- {
- if (DConfig.chanmodes.find(cm->ModeChar) != Anope::string::npos)
- this->ParseModeString();
- }
-
- void OnChannelCreate(Channel *c)
- {
- if (DConfig.Check(DEFCON_FORCE_CHAN_MODES))
- c->SetModes(findbot(Config->OperServ), false, "%s", DConfig.chanmodes.c_str());
- }
-};
-
-/**
- * Send a message to the oper about which precautions are "active" for this level
- **/
-void defcon_sendlvls(CommandSource &source)
-{
- if (DConfig.Check(DEFCON_NO_NEW_CHANNELS))
- source.Reply(_("* No new channel registrations"));
- if (DConfig.Check(DEFCON_NO_NEW_NICKS))
- source.Reply(_("* No new nick registrations"));
- if (DConfig.Check(DEFCON_NO_MLOCK_CHANGE))
- source.Reply(_("* No MLOCK changes"));
- if (DConfig.Check(DEFCON_FORCE_CHAN_MODES) && !DConfig.chanmodes.empty())
- source.Reply(_("* Force Chan Modes (%s) to be set on all channels"), DConfig.chanmodes.c_str());
- if (DConfig.Check(DEFCON_REDUCE_SESSION))
- source.Reply(_("* Use the reduced session limit of %d"), DConfig.sessionlimit);
- if (DConfig.Check(DEFCON_NO_NEW_CLIENTS))
- source.Reply(_("* Kill any NEW clients connecting"));
- if (DConfig.Check(DEFCON_OPER_ONLY))
- source.Reply(_("* Ignore any non-opers with message"));
- if (DConfig.Check(DEFCON_SILENT_OPER_ONLY))
- source.Reply(_("* Silently ignore non-opers"));
- if (DConfig.Check(DEFCON_AKILL_NEW_CLIENTS))
- source.Reply(_("* AKILL any new clients connecting"));
- if (DConfig.Check(DEFCON_NO_NEW_MEMOS))
- source.Reply(_("* No new memos sent"));
-}
-
-void runDefCon()
-{
- if (DConfig.Check(DEFCON_FORCE_CHAN_MODES))
- {
- if (!DConfig.chanmodes.empty() && !DefConModesSet)
- {
- if (DConfig.chanmodes[0] == '+' || DConfig.chanmodes[0] == '-')
- {
- Log(findbot(Config->OperServ), "operserv/defcon") << "DEFCON: setting " << DConfig.chanmodes << " on all channels";
- DefConModesSet = true;
- for (channel_map::const_iterator it = ChannelList.begin(), it_end = ChannelList.end(); it != it_end; ++it)
- it->second->SetModes(findbot(Config->OperServ), false, "%s", DConfig.chanmodes.c_str());
- }
- }
- }
- else
- {
- if (!DConfig.chanmodes.empty() && DefConModesSet)
- {
- if (DConfig.chanmodes[0] == '+' || DConfig.chanmodes[0] == '-')
- {
- DefConModesSet = false;
- Anope::string newmodes = defconReverseModes(DConfig.chanmodes);
- if (!newmodes.empty())
- {
- Log(findbot(Config->OperServ), "operserv/defcon") << "DEFCON: setting " << newmodes << " on all channels";
- for (channel_map::const_iterator it = ChannelList.begin(), it_end = ChannelList.end(); it != it_end; ++it)
- it->second->SetModes(findbot(Config->OperServ), false, "%s", newmodes.c_str());
- }
- }
- }
- }
-}
-
-static Anope::string defconReverseModes(const Anope::string &modes)
-{
- if (modes.empty())
- return "";
- Anope::string newmodes;
- for (unsigned i = 0, end = modes.length(); i < end; ++i)
- {
- if (modes[i] == '+')
- newmodes += '-';
- else if (modes[i] == '-')
- newmodes += '+';
- else
- newmodes += modes[i];
- }
- return newmodes;
-}
-
-MODULE_INIT(OSDefcon)