summaryrefslogtreecommitdiff
path: root/modules/core/cs_clone.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/core/cs_clone.cpp')
-rw-r--r--modules/core/cs_clone.cpp186
1 files changed, 0 insertions, 186 deletions
diff --git a/modules/core/cs_clone.cpp b/modules/core/cs_clone.cpp
deleted file mode 100644
index 5ede6a9e4..000000000
--- a/modules/core/cs_clone.cpp
+++ /dev/null
@@ -1,186 +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"
-
-class CommandCSClone : public Command
-{
-public:
- CommandCSClone(Module *creator) : Command(creator, "chanserv/clone", 2, 3)
- {
- this->SetDesc(_("Copy all settings from one channel to another"));
- this->SetSyntax(_("\037channel\037 \037target\037"));
- }
-
- void Execute(CommandSource &source, const std::vector<Anope::string> &params)
- {
- const Anope::string &channel = params[0];
- const Anope::string &target = params[1];
- Anope::string what = params.size() > 2 ? params[2] : "";
-
- 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 (!ci->HasPriv(u, CA_SET))
- {
- source.Reply(ACCESS_DENIED);
- return;
- }
- ChannelInfo *target_ci = cs_findchan(target);
- if (!target_ci)
- {
- source.Reply(CHAN_X_NOT_REGISTERED, target.c_str());
- return;
- }
- if (!IsFounder(u, ci) || !IsFounder(u, target_ci))
- {
- source.Reply(ACCESS_DENIED);
- return;
- }
-
- if (Config->CSMaxReg && u->Account()->channelcount >= Config->CSMaxReg && !u->HasPriv("chanserv/no-register-limit"))
- {
- source.Reply(u->Account()->channelcount > Config->CSMaxReg ? CHAN_EXCEEDED_CHANNEL_LIMIT : _(CHAN_REACHED_CHANNEL_LIMIT), Config->CSMaxReg);
- return;
- }
-
- if (what.equals_ci("ALL"))
- what.clear();
-
- if (what.empty())
- {
- delete target_ci;
- target_ci = new ChannelInfo(*ci);
- target_ci->name = target;
- RegisteredChannelList[target_ci->name] = target_ci;
- target_ci->c = findchan(target_ci->name);
- if (target_ci->c)
- {
- target_ci->c->ci = target_ci;
-
- check_modes(target_ci->c);
-
- ChannelMode *cm;
- if (u->FindChannel(target_ci->c) != NULL)
- {
- /* On most ircds you do not receive the admin/owner mode till its registered */
- if ((cm = ModeManager::FindChannelModeByName(CMODE_OWNER)))
- target_ci->c->SetMode(NULL, cm, u->nick);
- else if ((cm = ModeManager::FindChannelModeByName(CMODE_PROTECT)))
- target_ci->c->RemoveMode(NULL, cm, u->nick);
- }
-
- /* Mark the channel as persistant */
- if (target_ci->c->HasMode(CMODE_PERM))
- target_ci->SetFlag(CI_PERSIST);
- /* Persist may be in def cflags, set it here */
- else if (target_ci->HasFlag(CI_PERSIST) && (cm = ModeManager::FindChannelModeByName(CMODE_PERM)))
- target_ci->c->SetMode(NULL, CMODE_PERM);
-
- if (target_ci->bi && target_ci->c->FindUser(target_ci->bi) == NULL)
- target_ci->bi->Join(target_ci->c);
- }
-
- if (target_ci->c && !target_ci->c->topic.empty())
- {
- target_ci->last_topic = target_ci->c->topic;
- target_ci->last_topic_setter = target_ci->c->topic_setter;
- target_ci->last_topic_time = target_ci->c->topic_time;
- }
- else
- target_ci->last_topic_setter = source.owner->nick;
-
- FOREACH_MOD(I_OnChanRegistered, OnChanRegistered(target_ci));
-
- source.Reply(_("All settings from \002%s\002 have been transferred to \002%s\002"), channel.c_str(), target.c_str());
- }
- else if (what.equals_ci("ACCESS"))
- {
- /*target_ci->ClearAccess();
- for (unsigned i = 0; i < ci->GetAccessCount(); ++i)
- {
- ChanAccess *access = ci->GetAccess(i);
- target_ci->AddAccess(access->GetMask(), access->level, access->creator, access->last_seen);
- }
-
- source.Reply(_("All access entries from \002%s\002 have been transferred to \002%s\002"), channel.c_str(), target.c_str());
- XXX
- */
- }
- else if (what.equals_ci("AKICK"))
- {
- target_ci->ClearAkick();
- for (unsigned i = 0; i < ci->GetAkickCount(); ++i)
- {
- AutoKick *akick = ci->GetAkick(i);
- if (akick->HasFlag(AK_ISNICK))
- target_ci->AddAkick(akick->creator, akick->nc, akick->reason, akick->addtime, akick->last_used);
- else
- target_ci->AddAkick(akick->creator, akick->mask, akick->reason, akick->addtime, akick->last_used);
- }
-
- source.Reply(_("All akick entries from \002%s\002 have been transferred to \002%s\002"), channel.c_str(), target.c_str());
- }
- else if (what.equals_ci("BADWORDS"))
- {
- target_ci->ClearBadWords();
- for (unsigned i = 0; i < ci->GetBadWordCount(); ++i)
- {
- BadWord *bw = ci->GetBadWord(i);
- target_ci->AddBadWord(bw->word, bw->type);
- }
-
- source.Reply(_("All badword entries from \002%s\002 have been transferred to \002%s\002"), channel.c_str(), target.c_str());
- }
- else
- {
- this->OnSyntaxError(source, "");
- return;
- }
-
- Log(LOG_COMMAND, u, this, ci) << "to clone it to " << target_ci->name;
-
- return;
- }
-
- bool OnHelp(CommandSource &source, const Anope::string &subcommand)
- {
- this->SendSyntax(source);
- source.Reply(" ");
- source.Reply(_("Copies all settings, access, akicks, etc from channel to the\n"
- "target channel. If access, akick, or badwords is specified then only\n"
- "the respective settings are transferred. You must have founder level\n"
- "access to \037channel\037 and \037target\037."));
- return true;
- }
-};
-
-class CSClone : public Module
-{
- CommandCSClone commandcsclone;
-
- public:
- CSClone(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, CORE), commandcsclone(this)
- {
- this->SetAuthor("Anope");
-
- ModuleManager::RegisterService(&commandcsclone);
- }
-};
-
-MODULE_INIT(CSClone)