diff options
Diffstat (limited to 'modules/extra')
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> ¶ms) - { - 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> ¶ms) - { - 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> ¶ms) - { - 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> ¶ms) - { - 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> ¶ms) - { - 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> ¶ms) - { - 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> ¶ms) - { - 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 ¶ms) - { - 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> ¶ms) - { - 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> ¶ms) - { - 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> ¶ms) - { - 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> ¶ms) - { - 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> ¶ms) - { - 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> ¶ms) - { - 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 ¶m) - { - 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> ¶ms) - { - 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> ¶ms) - { - 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> ¶ms) - { - 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> ¶ms) - { - 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 ¶m) - { - 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> ¶ms) - { - 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) |