diff options
-rw-r--r-- | include/modes.h | 90 | ||||
-rw-r--r-- | modules/core/cs_mode.cpp | 9 | ||||
-rw-r--r-- | modules/core/db_plain.cpp | 6 | ||||
-rw-r--r-- | modules/extra/db_mysql.cpp | 4 | ||||
-rw-r--r-- | modules/protocol/bahamut.cpp | 48 | ||||
-rw-r--r-- | modules/protocol/inspircd-ts6.h | 6 | ||||
-rw-r--r-- | modules/protocol/inspircd11.cpp | 78 | ||||
-rw-r--r-- | modules/protocol/inspircd12.cpp | 114 | ||||
-rw-r--r-- | modules/protocol/inspircd20.cpp | 118 | ||||
-rw-r--r-- | modules/protocol/ngircd.cpp | 40 | ||||
-rw-r--r-- | modules/protocol/plexus.cpp | 76 | ||||
-rw-r--r-- | modules/protocol/ratbox.cpp | 28 | ||||
-rw-r--r-- | modules/protocol/unreal32.cpp | 118 | ||||
-rw-r--r-- | src/channels.cpp | 6 | ||||
-rw-r--r-- | src/modes.cpp | 219 | ||||
-rw-r--r-- | src/regchannel.cpp | 53 |
16 files changed, 505 insertions, 508 deletions
diff --git a/include/modes.h b/include/modes.h index 868feab81..e423b370e 100644 --- a/include/modes.h +++ b/include/modes.h @@ -31,7 +31,7 @@ const Anope::string UserModeNameStrings[] = { "UMODE_REGPRIV", "UMODE_PROTECTED", "UMODE_NO_CTCP", "UMODE_WEBTV", "UMODE_WEBIRC", "UMODE_WHOIS", "UMODE_ADMIN", "UMODE_DEAF", "UMODE_GLOBOPS", "UMODE_HELPOP", "UMODE_INVIS", "UMODE_OPER", "UMODE_PRIV", "UMODE_GOD", "UMODE_REGISTERED", "UMODE_SNOMASK", "UMODE_VHOST", "UMODE_WALLOPS", "UMODE_CLOAK", "UMODE_SSL", "UMODE_SOFTCALLERID", "UMODE_CALLERID", - "UMODE_COMMONCHANS", "UMODE_HIDDEN", "UMODE_STRIPCOLOR", "UMODE_INVISIBLE_OPER", + "UMODE_COMMONCHANS", "UMODE_HIDDEN", "UMODE_STRIPCOLOR", "UMODE_INVISIBLE_OPER", "UMODE_RESTRICTED" "" }; @@ -65,20 +65,20 @@ const Anope::string ChannelModeNameStrings[] = { "CMODE_BEGIN", /* Channel modes */ - "CMODE_BLOCKCOLOR", " CMODE_FLOOD", " CMODE_INVITE", " CMODE_KEY", " CMODE_LIMIT", " CMODE_MODERATED", " CMODE_NOEXTERNAL", - "CMODE_PRIVATE", " CMODE_REGISTERED", " CMODE_SECRET", " CMODE_TOPIC", " CMODE_AUDITORIUM", " CMODE_SSL", " CMODE_ADMINONLY", - "CMODE_NOCTCP", " CMODE_FILTER", " CMODE_NOKNOCK", " CMODE_REDIRECT", " CMODE_REGMODERATED", " CMODE_NONICK", " CMODE_OPERONLY", - "CMODE_NOKICK", " CMODE_REGISTEREDONLY", " CMODE_STRIPCOLOR", " CMODE_NONOTICE", " CMODE_NOINVITE", " CMODE_ALLINVITE", - "CMODE_BLOCKCAPS", " CMODE_PERM", " CMODE_NICKFLOOD", " CMODE_JOINFLOOD", " CMODE_DELAYEDJOIN", " CMODE_NOREJOIN", + "CMODE_BLOCKCOLOR", "CMODE_FLOOD", "CMODE_INVITE", "CMODE_KEY", "CMODE_LIMIT", "CMODE_MODERATED", "CMODE_NOEXTERNAL", + "CMODE_PRIVATE", "CMODE_REGISTERED", "CMODE_SECRET", "CMODE_TOPIC", "CMODE_AUDITORIUM", "CMODE_SSL", "CMODE_ADMINONLY", + "CMODE_NOCTCP", "CMODE_FILTER", "CMODE_NOKNOCK", "CMODE_REDIRECT", "CMODE_REGMODERATED", "CMODE_NONICK", "CMODE_OPERONLY", + "CMODE_NOKICK", "CMODE_REGISTEREDONLY", "CMODE_STRIPCOLOR", "CMODE_NONOTICE", "CMODE_NOINVITE", "CMODE_ALLINVITE", + "CMODE_BLOCKCAPS", "CMODE_PERM", "CMODE_NICKFLOOD", "CMODE_JOINFLOOD", "CMODE_DELAYEDJOIN", "CMODE_NOREJOIN", "CMODE_BANDWIDTH", /* b/e/I */ - "CMODE_BAN", " CMODE_EXCEPT", + "CMODE_BAN", "CMODE_EXCEPT", "CMODE_INVITEOVERRIDE", /* v/h/o/a/q */ - "CMODE_VOICE", " CMODE_HALFOP", " CMODE_OP", - "CMODE_PROTECT", " CMODE_OWNER", + "CMODE_VOICE", "CMODE_HALFOP", "CMODE_OP", + "CMODE_PROTECT", "CMODE_OWNER", "" }; @@ -115,8 +115,6 @@ class CoreExport Mode : public Base public: /* Class of mode this is */ ModeClass Class; - /* The mode name, as a string */ - Anope::string NameAsString; /* Mode char for this */ char ModeChar; /* Type of mode this is */ @@ -124,11 +122,10 @@ class CoreExport Mode : public Base /** Default constructor * @param mClass The type of mode this is - * @param mNameAsString The mode name as a string * @param modeChar The mode char * @param type The mode type */ - Mode(ModeClass mClass, const Anope::string &mNameAsString, char modeChar, ModeType type); + Mode(ModeClass mClass, char modeChar, ModeType type); /** Default destructor */ @@ -145,14 +142,17 @@ class CoreExport UserMode : public Mode /** Default constructor * @param nName The mode name - * @param mNameAsString The mode name as a string * @param modeChar The mode char */ - UserMode(UserModeName mName, const Anope::string &mNameAsString, char modeChar); + UserMode(UserModeName mName, char modeChar); /** Default destructor */ virtual ~UserMode(); + + /** Returns the mode name as a string + */ + const Anope::string NameAsString(); }; class CoreExport UserModeParam : public UserMode @@ -160,10 +160,9 @@ class CoreExport UserModeParam : public UserMode public: /** Default constructor * @param mName The mode name - * @param mNameAsString The mode name as a string * @param modeChar The mode char */ - UserModeParam(UserModeName mName, const Anope::string &mNameAsString, char modeChar); + UserModeParam(UserModeName mName, char modeChar); /** Check if the param is valid * @param value The param @@ -182,10 +181,9 @@ class CoreExport ChannelMode : public Mode /** Default constructor * @param mName The mode name - * @param mNameAsString The mode name as a string * @param modeChar The mode char */ - ChannelMode(ChannelModeName mName, const Anope::string &mNameAsString, char modeChar); + ChannelMode(ChannelModeName mName, char modeChar); /** Default destructor */ @@ -196,6 +194,10 @@ class CoreExport ChannelMode : public Mode * @param u The user, or NULL */ bool CanSet(User *u) const; + + /** Returns the mode name as a string + */ + const Anope::string NameAsString(); }; @@ -206,10 +208,9 @@ class CoreExport ChannelModeList : public ChannelMode public: /** Default constructor * @param mName The mode name - * @param mNameAsString The mode name as a string * @param modeChar The mode char */ - ChannelModeList(ChannelModeName mName, const Anope::string &mNameAsString, char modeChar); + ChannelModeList(ChannelModeName mName, char modeChar); /** Default destructor */ @@ -242,11 +243,10 @@ class CoreExport ChannelModeParam : public ChannelMode public: /** Default constructor * @param mName The mode name - * @param mNameAsString The mode name as a string * @param modeChar The mode char * @param MinusArg true if this mode sends no arg when unsetting */ - ChannelModeParam(ChannelModeName mName, const Anope::string &mNameAsString, char modeChar, bool MinusArg = false); + ChannelModeParam(ChannelModeName mName, char modeChar, bool MinusArg = false); /** Default destructor */ @@ -272,11 +272,10 @@ class CoreExport ChannelModeStatus : public ChannelMode /** Default constructor * @param mName The mode name - * @param mNameAsString The mode name as a string * @param modeChar The mode char * @param mSymbol The symbol for the mode, eg @ % + */ - ChannelModeStatus(ChannelModeName mName, const Anope::string &mNameAsString, char modeChar, char mSymbol); + ChannelModeStatus(ChannelModeName mName, char modeChar, char mSymbol); /** Default destructor */ @@ -288,7 +287,7 @@ class CoreExport ChannelModeStatus : public ChannelMode class CoreExport ChannelModeBan : public ChannelModeList { public: - ChannelModeBan(char modeChar) : ChannelModeList(CMODE_BAN, "CMODE_BAN", modeChar) { } + ChannelModeBan(char modeChar) : ChannelModeList(CMODE_BAN, modeChar) { } void OnAdd(Channel *chan, const Anope::string &mask); @@ -300,7 +299,7 @@ class CoreExport ChannelModeBan : public ChannelModeList class CoreExport ChannelModeExcept : public ChannelModeList { public: - ChannelModeExcept(char modeChar) : ChannelModeList(CMODE_EXCEPT, "CMODE_EXCEPT", modeChar) { } + ChannelModeExcept(char modeChar) : ChannelModeList(CMODE_EXCEPT, modeChar) { } void OnAdd(Channel *chan, const Anope::string &mask); @@ -312,7 +311,7 @@ class CoreExport ChannelModeExcept : public ChannelModeList class CoreExport ChannelModeInvex : public ChannelModeList { public: - ChannelModeInvex(char modeChar) : ChannelModeList(CMODE_INVITEOVERRIDE, "CMODE_INVITEOVERRIDE", modeChar) { } + ChannelModeInvex(char modeChar) : ChannelModeList(CMODE_INVITEOVERRIDE, modeChar) { } void OnAdd(Channel *chan, const Anope::string &mask); @@ -325,7 +324,7 @@ class CoreExport ChannelModeInvex : public ChannelModeList class CoreExport ChannelModeKey : public ChannelModeParam { public: - ChannelModeKey(char modeChar) : ChannelModeParam(CMODE_KEY, "CMODE_KEY", modeChar) { } + ChannelModeKey(char modeChar) : ChannelModeParam(CMODE_KEY, modeChar) { } bool IsValid(const Anope::string &value) const; }; @@ -335,7 +334,7 @@ class CoreExport ChannelModeKey : public ChannelModeParam class ChannelModeFlood : public ChannelModeParam { public: - ChannelModeFlood(char modeChar, bool minusNoArg = false) : ChannelModeParam(CMODE_FLOOD, "CMODE_FLOOD", modeChar, minusNoArg) { } + ChannelModeFlood(char modeChar, bool minusNoArg = false) : ChannelModeParam(CMODE_FLOOD, modeChar, minusNoArg) { } bool IsValid(const Anope::string &value) const; }; @@ -346,7 +345,7 @@ class ChannelModeFlood : public ChannelModeParam class CoreExport ChannelModeAdmin : public ChannelMode { public: - ChannelModeAdmin(char modeChar) : ChannelMode(CMODE_ADMINONLY, "CMODE_ADMINONLY", modeChar) { } + ChannelModeAdmin(char modeChar) : ChannelMode(CMODE_ADMINONLY, modeChar) { } /* Opers only */ bool CanSet(User *u) const; @@ -358,7 +357,7 @@ class CoreExport ChannelModeAdmin : public ChannelMode class CoreExport ChannelModeOper : public ChannelMode { public: - ChannelModeOper(char modeChar) : ChannelMode(CMODE_OPERONLY, "CMODE_OPERONLY", modeChar) { } + ChannelModeOper(char modeChar) : ChannelMode(CMODE_OPERONLY, modeChar) { } /* Opers only */ bool CanSet(User *u) const; @@ -370,7 +369,7 @@ class CoreExport ChannelModeOper : public ChannelMode class CoreExport ChannelModeRegistered : public ChannelMode { public: - ChannelModeRegistered(char modeChar) : ChannelMode(CMODE_REGISTERED, "CMODE_REGISTERED", modeChar) { } + ChannelModeRegistered(char modeChar) : ChannelMode(CMODE_REGISTERED, modeChar) { } /* No one mlocks +r */ bool CanSet(User *u) const; @@ -437,18 +436,9 @@ class CoreExport ModeManager static void StackerAddInternal(BotInfo *bi, Base *Object, Mode *mode, bool Set, const Anope::string &Param, StackerType Type); public: - /* List of all modes Anope knows about */ - static std::map<Anope::string, Mode *> Modes; - - /* User modes */ - static std::map<char, UserMode *> UserModesByChar; - static std::map<UserModeName, UserMode *> UserModesByName; - /* Channel modes */ - static std::map<char, ChannelMode *> ChannelModesByChar; - static std::map<ChannelModeName, ChannelMode *> ChannelModesByName; - /* Although there are two different maps for UserModes and ChannelModes - * the pointers in each are the same. This is used to increase efficiency. - */ + /* List of all modes Anope knows about */ + static std::vector<ChannelMode *> ChannelModes; + static std::vector<UserMode *> UserModes; /** Add a user mode to Anope * @param um A UserMode or UserMode derived class @@ -486,11 +476,17 @@ class CoreExport ModeManager */ static UserMode *FindUserModeByName(UserModeName Name); - /** Find a mode by name + /** Find channel mode by string + * @param name The mode name + * @return The mode + */ + static ChannelMode *FindChannelModeByString(const Anope::string &name); + + /** Find user mode by string * @param name The mode name * @return The mode */ - static Mode *FindModeByName(const Anope::string &name); + static UserMode *FindUserModeByString(const Anope::string &name); /** Gets the channel mode char for a symbol (eg + returns v) * @param Value The symbol diff --git a/modules/core/cs_mode.cpp b/modules/core/cs_mode.cpp index 6399bdc35..4d3705845 100644 --- a/modules/core/cs_mode.cpp +++ b/modules/core/cs_mode.cpp @@ -164,16 +164,13 @@ class CommandCSMode : public Command case '*': if (adding == -1) break; - for (std::map<Anope::string, Mode *>::const_iterator it = ModeManager::Modes.begin(), it_end = ModeManager::Modes.end(); it != it_end; ++it) + for (unsigned j = 0; j < ModeManager::ChannelModes.size(); ++j) { - Mode *m = it->second; - if (m->Class == MC_CHANNEL) + ChannelMode *cm = ModeManager::ChannelModes[j]; + if (cm->CanSet(u)) { - ChannelMode *cm = debug_cast<ChannelMode *>(m); if (cm->Type == MODE_REGULAR || (!adding && cm->Type == MODE_PARAM)) { - if (!cm->CanSet(u)) - continue; if (adding) ci->c->SetMode(NULL, cm); else diff --git a/modules/core/db_plain.cpp b/modules/core/db_plain.cpp index 4dbf864de..44b5cbefa 100644 --- a/modules/core/db_plain.cpp +++ b/modules/core/db_plain.cpp @@ -848,7 +848,7 @@ class DBPlain : public Module ChannelMode *cm = ModeManager::FindChannelModeByName(ml.name); if (!cm || cm->Type != MODE_REGULAR) continue; - db_buffer << " " << cm->NameAsString; + db_buffer << " " << cm->NameAsString(); } } } @@ -870,7 +870,7 @@ class DBPlain : public Module ChannelMode *cm = ModeManager::FindChannelModeByName(ml.name); if (!cm || cm->Type != MODE_REGULAR) continue; - db_buffer << " " << cm->NameAsString; + db_buffer << " " << cm->NameAsString(); } } } @@ -895,7 +895,7 @@ class DBPlain : public Module continue; if (!ml.param.empty()) - db_buffer << "MD MLP" << (ml.set ? " " : "_OFF ") << cm->NameAsString << " " << ml.param << endl; + db_buffer << "MD MLP" << (ml.set ? " " : "_OFF ") << cm->NameAsString() << " " << ml.param << endl; } } } diff --git a/modules/extra/db_mysql.cpp b/modules/extra/db_mysql.cpp index f6dce95d2..c328bbb9d 100644 --- a/modules/extra/db_mysql.cpp +++ b/modules/extra/db_mysql.cpp @@ -53,7 +53,7 @@ static Anope::string MakeMLock(ChannelInfo *ci, bool status) ChannelMode *cm = ModeManager::FindChannelModeByName(ml.name); if (!cm || cm->Type != MODE_REGULAR) continue; - ret += " " + cm->NameAsString; + ret += " " + cm->NameAsString(); } } @@ -96,7 +96,7 @@ static Anope::string GetMLockParams(ChannelInfo *ci, bool onoff) { ChannelMode *cm = ModeManager::FindChannelModeByName(ml.name); if (cm) - ret += " " + cm->NameAsString + " " + ml.param; + ret += " " + cm->NameAsString() + " " + ml.param; } } } diff --git a/modules/protocol/bahamut.cpp b/modules/protocol/bahamut.cpp index 285fd316c..aabe2c904 100644 --- a/modules/protocol/bahamut.cpp +++ b/modules/protocol/bahamut.cpp @@ -163,9 +163,9 @@ class BahamutIRCdProto : public IRCDProto { send_cmd(user->nick, "SJOIN %ld %s", static_cast<long>(c->creation_time), c->name.c_str()); if (status) - for (size_t i = CMODE_BEGIN + 1; i != CMODE_END; ++i) - if (status->HasFlag(static_cast<ChannelModeName>(i))) - c->SetMode(user, static_cast<ChannelModeName>(i), user->nick, false); + for (unsigned i = 0; i < ModeManager::ChannelModes.size(); ++i) + if (status->HasFlag(ModeManager::ChannelModes[i]->Name)) + c->SetMode(user, ModeManager::ChannelModes[i], user->nick, false); } void SendAkill(User *, const XLine *x) @@ -551,38 +551,38 @@ class ProtoBahamut : public Module void AddModes() { /* Add user modes */ - ModeManager::AddUserMode(new UserMode(UMODE_SERV_ADMIN, "UMODE_SERV_ADMIN", 'A')); - ModeManager::AddUserMode(new UserMode(UMODE_REGPRIV, "UMODE_REGPRIV", 'R')); - ModeManager::AddUserMode(new UserMode(UMODE_ADMIN, "UMODE_ADMIN", 'a')); - ModeManager::AddUserMode(new UserMode(UMODE_INVIS, "UMODE_INVIS", 'i')); - ModeManager::AddUserMode(new UserMode(UMODE_OPER, "UMODE_OPER", 'o')); - ModeManager::AddUserMode(new UserMode(UMODE_REGISTERED, "UMODE_REGISTERED", 'r')); - ModeManager::AddUserMode(new UserMode(UMODE_SNOMASK, "UMODE_SNOMASK", 's')); - ModeManager::AddUserMode(new UserMode(UMODE_WALLOPS, "UMODE_WALLOPS", 'w')); - ModeManager::AddUserMode(new UserMode(UMODE_DEAF, "UMODE_DEAF", 'd')); + ModeManager::AddUserMode(new UserMode(UMODE_SERV_ADMIN, 'A')); + ModeManager::AddUserMode(new UserMode(UMODE_REGPRIV, 'R')); + ModeManager::AddUserMode(new UserMode(UMODE_ADMIN, 'a')); + ModeManager::AddUserMode(new UserMode(UMODE_INVIS, 'i')); + ModeManager::AddUserMode(new UserMode(UMODE_OPER, 'o')); + ModeManager::AddUserMode(new UserMode(UMODE_REGISTERED, 'r')); + ModeManager::AddUserMode(new UserMode(UMODE_SNOMASK, 's')); + ModeManager::AddUserMode(new UserMode(UMODE_WALLOPS, 'w')); + ModeManager::AddUserMode(new UserMode(UMODE_DEAF, 'd')); /* b/e/I */ ModeManager::AddChannelMode(new ChannelModeBan('b')); /* v/h/o/a/q */ - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_VOICE, "CMODE_VOICE", 'v', '+')); - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OP, "CMODE_OP", 'o', '@')); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_VOICE, 'v', '+')); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OP, 'o', '@')); /* Add channel modes */ - ModeManager::AddChannelMode(new ChannelMode(CMODE_BLOCKCOLOR, "CMODE_BLOCKCOLOR", 'c')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_INVITE, "CMODE_INVITE", 'i')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_BLOCKCOLOR, 'c')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_INVITE, 'i')); ModeManager::AddChannelMode(new ChannelModeFlood('f')); ModeManager::AddChannelMode(new ChannelModeKey('k')); - ModeManager::AddChannelMode(new ChannelModeParam(CMODE_LIMIT, "CMODE_LIMIT", 'l')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_MODERATED, "CMODE_MODERATED", 'm')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_NOEXTERNAL, "CMODE_NOEXTERNAL", 'n')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_PRIVATE, "CMODE_PRIVATE", 'p')); + ModeManager::AddChannelMode(new ChannelModeParam(CMODE_LIMIT, 'l')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_MODERATED, 'm')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_NOEXTERNAL, 'n')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_PRIVATE, 'p')); ModeManager::AddChannelMode(new ChannelModeRegistered('r')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_SECRET, "CMODE_SECRET", 's')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_TOPIC, "CMODE_TOPIC", 't')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_REGMODERATED, "CMODE_REGMODERATED", 'M')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_SECRET, 's')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_TOPIC, 't')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_REGMODERATED, 'M')); ModeManager::AddChannelMode(new ChannelModeOper('O')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_REGISTEREDONLY, "CMODE_REGISTEREDONLY", 'R')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_REGISTEREDONLY, 'R')); } public: diff --git a/modules/protocol/inspircd-ts6.h b/modules/protocol/inspircd-ts6.h index 427233738..952268184 100644 --- a/modules/protocol/inspircd-ts6.h +++ b/modules/protocol/inspircd-ts6.h @@ -113,9 +113,9 @@ class InspIRCdTS6Proto : public IRCDProto * merge these modes with +nrt and other mlocked modes */ if (status) - for (size_t i = CMODE_BEGIN + 1; i != CMODE_END; ++i) - if (status->HasFlag(static_cast<ChannelModeName>(i))) - c->SetMode(user, static_cast<ChannelModeName>(i), user->nick, false); + for (unsigned i = 0; i < ModeManager::ChannelModes.size(); ++i) + if (status->HasFlag(ModeManager::ChannelModes[i]->Name)) + c->SetMode(user, ModeManager::ChannelModes[i], user->nick, false); } /* UNSQLINE */ diff --git a/modules/protocol/inspircd11.cpp b/modules/protocol/inspircd11.cpp index e4ccd90b6..9d72eef6c 100644 --- a/modules/protocol/inspircd11.cpp +++ b/modules/protocol/inspircd11.cpp @@ -158,9 +158,9 @@ class InspIRCdProto : public IRCDProto { send_cmd(user->nick, "JOIN %s %ld", c->name.c_str(), static_cast<long>(c->creation_time)); if (status) - for (size_t i = CMODE_BEGIN + 1; i != CMODE_END; ++i) - if (status->HasFlag(static_cast<ChannelModeName>(i))) - c->SetMode(user, static_cast<ChannelModeName>(i), user->nick, false); + for (unsigned i = 0; i < ModeManager::ChannelModes.size(); ++i) + if (status->HasFlag(ModeManager::ChannelModes[i]->Name)) + c->SetMode(user, ModeManager::ChannelModes[i], user->nick, false); } /* UNSQLINE */ @@ -383,7 +383,7 @@ class InspircdIRCdMessage : public IRCdMessage ModeManager::AddChannelMode(new ChannelModeInvex('I')); continue; default: - ModeManager::AddChannelMode(new ChannelModeList(CMODE_END, modebuf[t], modebuf[t])); + ModeManager::AddChannelMode(new ChannelModeList(CMODE_END, modebuf[t])); } } @@ -396,7 +396,7 @@ class InspircdIRCdMessage : public IRCdMessage ModeManager::AddChannelMode(new ChannelModeKey('k')); continue; default: - ModeManager::AddChannelMode(new ChannelModeParam(CMODE_END, modebuf[t], modebuf[t])); + ModeManager::AddChannelMode(new ChannelModeParam(CMODE_END, modebuf[t])); } } @@ -409,13 +409,13 @@ class InspircdIRCdMessage : public IRCdMessage ModeManager::AddChannelMode(new ChannelModeFlood('f')); continue; case 'l': - ModeManager::AddChannelMode(new ChannelModeParam(CMODE_LIMIT, "CMODE_LIMIT", 'l', true)); + ModeManager::AddChannelMode(new ChannelModeParam(CMODE_LIMIT, 'l', true)); continue; case 'L': - ModeManager::AddChannelMode(new ChannelModeParam(CMODE_REDIRECT, "CMODE_REDIRECT", 'L', true)); + ModeManager::AddChannelMode(new ChannelModeParam(CMODE_REDIRECT, 'L', true)); continue; default: - ModeManager::AddChannelMode(new ChannelModeParam(CMODE_END, modebuf[t], modebuf[t], true)); + ModeManager::AddChannelMode(new ChannelModeParam(CMODE_END, modebuf[t], true)); } } @@ -425,67 +425,67 @@ class InspircdIRCdMessage : public IRCdMessage switch (modebuf[t]) { case 'i': - ModeManager::AddChannelMode(new ChannelMode(CMODE_INVITE, "CMODE_INVITE", 'i')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_INVITE, 'i')); continue; case 'm': - ModeManager::AddChannelMode(new ChannelMode(CMODE_MODERATED, "CMODE_MODERATED", 'm')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_MODERATED, 'm')); continue; case 'n': - ModeManager::AddChannelMode(new ChannelMode(CMODE_NOEXTERNAL, "CMODE_NOEXTERNAL", 'n')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_NOEXTERNAL, 'n')); continue; case 'p': - ModeManager::AddChannelMode(new ChannelMode(CMODE_PRIVATE, "CMODE_PRIVATE", 'p')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_PRIVATE, 'p')); continue; case 's': - ModeManager::AddChannelMode(new ChannelMode(CMODE_SECRET, "CMODE_SECRET", 's')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_SECRET, 's')); continue; case 't': - ModeManager::AddChannelMode(new ChannelMode(CMODE_TOPIC, "CMODE_TOPIC", 't')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_TOPIC, 't')); continue; case 'r': ModeManager::AddChannelMode(new ChannelModeRegistered('r')); continue; case 'c': - ModeManager::AddChannelMode(new ChannelMode(CMODE_BLOCKCOLOR, "CMODE_BLOCKCOLOR", 'c')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_BLOCKCOLOR, 'c')); continue; case 'u': - ModeManager::AddChannelMode(new ChannelMode(CMODE_AUDITORIUM, "CMODE_AUDITORIUM", 'u')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_AUDITORIUM, 'u')); continue; case 'z': - ModeManager::AddChannelMode(new ChannelMode(CMODE_SSL, "CMODE_SSL", 'z')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_SSL, 'z')); continue; case 'A': - ModeManager::AddChannelMode(new ChannelMode(CMODE_ALLINVITE, "CMODE_ALLINVITE", 'A')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_ALLINVITE, 'A')); continue; case 'C': - ModeManager::AddChannelMode(new ChannelMode(CMODE_NOCTCP, "CMODE_NOCTCP", 'C')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_NOCTCP, 'C')); continue; case 'G': - ModeManager::AddChannelMode(new ChannelMode(CMODE_FILTER, "CMODE_FILTER", 'G')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_FILTER, 'G')); continue; case 'K': - ModeManager::AddChannelMode(new ChannelMode(CMODE_NOKNOCK, "CMODE_NOKNOCK", 'K')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_NOKNOCK, 'K')); continue; case 'N': - ModeManager::AddChannelMode(new ChannelMode(CMODE_NONICK, "CMODE_NONICK", 'N')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_NONICK, 'N')); continue; case 'O': ModeManager::AddChannelMode(new ChannelModeOper('O')); continue; case 'Q': - ModeManager::AddChannelMode(new ChannelMode(CMODE_NOKICK, "CMODE_NOKICK", 'Q')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_NOKICK, 'Q')); continue; case 'R': - ModeManager::AddChannelMode(new ChannelMode(CMODE_REGISTEREDONLY, "CMODE_REGISTEREDONLY", 'R')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_REGISTEREDONLY, 'R')); continue; case 'S': - ModeManager::AddChannelMode(new ChannelMode(CMODE_STRIPCOLOR, "CMODE_STRIPCOLOR", 'S')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_STRIPCOLOR, 'S')); continue; case 'V': - ModeManager::AddChannelMode(new ChannelMode(CMODE_NOINVITE, "CMODE_NOINVITE", 'V')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_NOINVITE, 'V')); continue; default: - ModeManager::AddChannelMode(new ChannelMode(CMODE_END, modebuf[t], modebuf[t])); + ModeManager::AddChannelMode(new ChannelMode(CMODE_END, modebuf[t])); } } } @@ -499,19 +499,19 @@ class InspircdIRCdMessage : public IRCdMessage switch (modes[t]) { case 'q': - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OWNER, "CMODE_OWNER", 'q', '~')); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OWNER, 'q', '~')); continue; case 'a': - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_PROTECT, "CMODE_PROTECT", 'a', '&')); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_PROTECT, 'a', '&')); continue; case 'o': - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OP, "CMODE_OP", 'o', '@')); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OP, 'o', '@')); continue; case 'h': - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_HALFOP, "CMODE_HALFOP", 'h', '%')); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_HALFOP, 'h', '%')); continue; case 'v': - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_VOICE, "CMODE_VOICE", 'v', '+')); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_VOICE, 'v', '+')); continue; } } @@ -868,13 +868,13 @@ class ProtoInspIRCd : public Module void AddModes() { - ModeManager::AddUserMode(new UserMode(UMODE_CALLERID, "UMODE_CALLERID", 'g')); - ModeManager::AddUserMode(new UserMode(UMODE_HELPOP, "UMODE_HELPOP", 'h')); - ModeManager::AddUserMode(new UserMode(UMODE_INVIS, "UMODE_INVIS", 'i')); - ModeManager::AddUserMode(new UserMode(UMODE_OPER, "UMODE_OPER", 'o')); - ModeManager::AddUserMode(new UserMode(UMODE_REGISTERED, "UMODE_REGISTERED", 'r')); - ModeManager::AddUserMode(new UserMode(UMODE_WALLOPS, "UMODE_WALLOPS", 'w')); - ModeManager::AddUserMode(new UserMode(UMODE_CLOAK, "UMODE_CLOAK", 'x')); + ModeManager::AddUserMode(new UserMode(UMODE_CALLERID, 'g')); + ModeManager::AddUserMode(new UserMode(UMODE_HELPOP, 'h')); + ModeManager::AddUserMode(new UserMode(UMODE_INVIS, 'i')); + ModeManager::AddUserMode(new UserMode(UMODE_OPER, 'o')); + ModeManager::AddUserMode(new UserMode(UMODE_REGISTERED, 'r')); + ModeManager::AddUserMode(new UserMode(UMODE_WALLOPS, 'w')); + ModeManager::AddUserMode(new UserMode(UMODE_CLOAK, 'x')); } public: diff --git a/modules/protocol/inspircd12.cpp b/modules/protocol/inspircd12.cpp index f89ef2dc9..5bdae4b7b 100644 --- a/modules/protocol/inspircd12.cpp +++ b/modules/protocol/inspircd12.cpp @@ -398,13 +398,13 @@ class Inspircd12IRCdMessage : public InspircdIRCdMessage continue; /* InspIRCd sends q and a here if they have no prefixes */ case 'q': - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OWNER, "CMODE_OWNER", 'q', '@')); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OWNER, 'q', '@')); continue; case 'a': - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_PROTECT , "CMODE_PROTECT", 'a', '@')); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_PROTECT , 'a', '@')); continue; default: - ModeManager::AddChannelMode(new ChannelModeList(CMODE_END, modebuf[t], modebuf[t])); + ModeManager::AddChannelMode(new ChannelModeList(CMODE_END, modebuf[t])); } } @@ -417,7 +417,7 @@ class Inspircd12IRCdMessage : public InspircdIRCdMessage ModeManager::AddChannelMode(new ChannelModeKey('k')); continue; default: - ModeManager::AddChannelMode(new ChannelModeParam(CMODE_END, modebuf[t], modebuf[t])); + ModeManager::AddChannelMode(new ChannelModeParam(CMODE_END, modebuf[t])); } } @@ -427,25 +427,25 @@ class Inspircd12IRCdMessage : public InspircdIRCdMessage switch (modebuf[t]) { case 'F': - ModeManager::AddChannelMode(new ChannelModeParam(CMODE_NICKFLOOD, "CMODE_NICKFLOOD", 'F', true)); + ModeManager::AddChannelMode(new ChannelModeParam(CMODE_NICKFLOOD, 'F', true)); continue; case 'J': - ModeManager::AddChannelMode(new ChannelModeParam(CMODE_NOREJOIN, "CMODE_NOREJOIN", 'J', true)); + ModeManager::AddChannelMode(new ChannelModeParam(CMODE_NOREJOIN, 'J', true)); continue; case 'L': - ModeManager::AddChannelMode(new ChannelModeParam(CMODE_REDIRECT, "CMODE_REDIRECT", 'L', true)); + ModeManager::AddChannelMode(new ChannelModeParam(CMODE_REDIRECT, 'L', true)); continue; case 'f': ModeManager::AddChannelMode(new ChannelModeFlood('f', true)); continue; case 'j': - ModeManager::AddChannelMode(new ChannelModeParam(CMODE_JOINFLOOD, "CMODE_JOINFLOOD", 'j', true)); + ModeManager::AddChannelMode(new ChannelModeParam(CMODE_JOINFLOOD, 'j', true)); continue; case 'l': - ModeManager::AddChannelMode(new ChannelModeParam(CMODE_LIMIT, "CMODE_LIMIT", 'l', true)); + ModeManager::AddChannelMode(new ChannelModeParam(CMODE_LIMIT, 'l', true)); continue; default: - ModeManager::AddChannelMode(new ChannelModeParam(CMODE_END, modebuf[t], modebuf[t], true)); + ModeManager::AddChannelMode(new ChannelModeParam(CMODE_END, modebuf[t], true)); } } @@ -455,79 +455,79 @@ class Inspircd12IRCdMessage : public InspircdIRCdMessage switch (modebuf[t]) { case 'A': - ModeManager::AddChannelMode(new ChannelMode(CMODE_ALLINVITE, "CMODE_ALLINVITE", 'A')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_ALLINVITE, 'A')); continue; case 'B': - ModeManager::AddChannelMode(new ChannelMode(CMODE_BLOCKCAPS, "CMODE_BLOCKCAPS", 'B')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_BLOCKCAPS, 'B')); continue; case 'C': - ModeManager::AddChannelMode(new ChannelMode(CMODE_NOCTCP, "CMODE_NOCTCP", 'C')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_NOCTCP, 'C')); continue; case 'D': - ModeManager::AddChannelMode(new ChannelMode(CMODE_DELAYEDJOIN, "CMODE_DELAYEDJOIN", 'D')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_DELAYEDJOIN, 'D')); continue; case 'G': - ModeManager::AddChannelMode(new ChannelMode(CMODE_FILTER, "CMODE_FILTER", 'G')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_FILTER, 'G')); continue; case 'K': - ModeManager::AddChannelMode(new ChannelMode(CMODE_NOKNOCK, "CMODE_NOKNOCK", 'K')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_NOKNOCK, 'K')); continue; case 'M': - ModeManager::AddChannelMode(new ChannelMode(CMODE_REGMODERATED, "CMODE_REGMODERATED", 'M')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_REGMODERATED, 'M')); continue; case 'N': - ModeManager::AddChannelMode(new ChannelMode(CMODE_NONICK, "CMODE_NONICK", 'N')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_NONICK, 'N')); continue; case 'O': ModeManager::AddChannelMode(new ChannelModeOper('O')); continue; case 'P': - ModeManager::AddChannelMode(new ChannelMode(CMODE_PERM, "CMODE_PERM", 'P')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_PERM, 'P')); continue; case 'Q': - ModeManager::AddChannelMode(new ChannelMode(CMODE_NOKICK, "CMODE_NOKICK", 'Q')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_NOKICK, 'Q')); continue; case 'R': - ModeManager::AddChannelMode(new ChannelMode(CMODE_REGISTEREDONLY, "CMODE_REGISTEREDONLY", 'R')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_REGISTEREDONLY, 'R')); continue; case 'S': - ModeManager::AddChannelMode(new ChannelMode(CMODE_STRIPCOLOR, "CMODE_STRIPCOLOR", 'S')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_STRIPCOLOR, 'S')); continue; case 'T': - ModeManager::AddChannelMode(new ChannelMode(CMODE_NONOTICE, "CMODE_NONOTICE", 'T')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_NONOTICE, 'T')); continue; case 'c': - ModeManager::AddChannelMode(new ChannelMode(CMODE_BLOCKCOLOR, "CMODE_BLOCKCOLOR", 'c')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_BLOCKCOLOR, 'c')); continue; case 'i': - ModeManager::AddChannelMode(new ChannelMode(CMODE_INVITE, "CMODE_INVITE", 'i')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_INVITE, 'i')); continue; case 'm': - ModeManager::AddChannelMode(new ChannelMode(CMODE_MODERATED, "CMODE_MODERATED", 'm')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_MODERATED, 'm')); continue; case 'n': - ModeManager::AddChannelMode(new ChannelMode(CMODE_NOEXTERNAL, "CMODE_NOEXTERNAL", 'n')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_NOEXTERNAL, 'n')); continue; case 'p': - ModeManager::AddChannelMode(new ChannelMode(CMODE_PRIVATE, "CMODE_PRIVATE", 'p')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_PRIVATE, 'p')); continue; case 'r': ModeManager::AddChannelMode(new ChannelModeRegistered('r')); continue; case 's': - ModeManager::AddChannelMode(new ChannelMode(CMODE_SECRET, "CMODE_SECRET", 's')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_SECRET, 's')); continue; case 't': - ModeManager::AddChannelMode(new ChannelMode(CMODE_TOPIC, "CMODE_TOPIC", 't')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_TOPIC, 't')); continue; case 'u': - ModeManager::AddChannelMode(new ChannelMode(CMODE_AUDITORIUM, "CMODE_AUDITORIUM", 'u')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_AUDITORIUM, 'u')); continue; case 'z': - ModeManager::AddChannelMode(new ChannelMode(CMODE_SSL, "CMODE_SSL", 'z')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_SSL, 'z')); continue; default: - ModeManager::AddChannelMode(new ChannelMode(CMODE_END, modebuf[t], modebuf[t])); + ModeManager::AddChannelMode(new ChannelMode(CMODE_END, modebuf[t])); } } } @@ -544,61 +544,61 @@ class Inspircd12IRCdMessage : public InspircdIRCdMessage switch (modebuf[t]) { case 'h': - ModeManager::AddUserMode(new UserMode(UMODE_HELPOP, "UMODE_HELPOP", 'h')); + ModeManager::AddUserMode(new UserMode(UMODE_HELPOP, 'h')); continue; case 'B': - ModeManager::AddUserMode(new UserMode(UMODE_BOT, "UMODE_BOT", 'B')); + ModeManager::AddUserMode(new UserMode(UMODE_BOT, 'B')); continue; case 'G': - ModeManager::AddUserMode(new UserMode(UMODE_FILTER, "UMODE_FILTER", 'G')); + ModeManager::AddUserMode(new UserMode(UMODE_FILTER, 'G')); continue; case 'H': - ModeManager::AddUserMode(new UserMode(UMODE_HIDEOPER, "UMODE_HIDEOPER", 'H')); + ModeManager::AddUserMode(new UserMode(UMODE_HIDEOPER, 'H')); continue; case 'I': - ModeManager::AddUserMode(new UserMode(UMODE_PRIV, "UMODE_PRIV", 'I')); + ModeManager::AddUserMode(new UserMode(UMODE_PRIV, 'I')); continue; case 'Q': - ModeManager::AddUserMode(new UserMode(UMODE_HIDDEN, "UMODE_HIDDEN", 'Q')); + ModeManager::AddUserMode(new UserMode(UMODE_HIDDEN, 'Q')); continue; case 'R': - ModeManager::AddUserMode(new UserMode(UMODE_REGPRIV, "UMODE_REGPRIV", 'R')); + ModeManager::AddUserMode(new UserMode(UMODE_REGPRIV, 'R')); continue; case 'S': - ModeManager::AddUserMode(new UserMode(UMODE_STRIPCOLOR, "UMODE_STRIPCOLOR", 'S')); + ModeManager::AddUserMode(new UserMode(UMODE_STRIPCOLOR, 'S')); continue; case 'W': - ModeManager::AddUserMode(new UserMode(UMODE_WHOIS, "UMODE_WHOIS", 'W')); + ModeManager::AddUserMode(new UserMode(UMODE_WHOIS, 'W')); continue; case 'c': - ModeManager::AddUserMode(new UserMode(UMODE_COMMONCHANS, "UMODE_COMMONCHANS", 'c')); + ModeManager::AddUserMode(new UserMode(UMODE_COMMONCHANS, 'c')); continue; case 'g': - ModeManager::AddUserMode(new UserMode(UMODE_CALLERID, "UMODE_CALLERID", 'g')); + ModeManager::AddUserMode(new UserMode(UMODE_CALLERID, 'g')); continue; case 'i': - ModeManager::AddUserMode(new UserMode(UMODE_INVIS, "UMODE_INVIS", 'i')); + ModeManager::AddUserMode(new UserMode(UMODE_INVIS, 'i')); continue; case 'k': - ModeManager::AddUserMode(new UserMode(UMODE_PROTECTED, "UMODE_PROTECTED", 'k')); + ModeManager::AddUserMode(new UserMode(UMODE_PROTECTED, 'k')); continue; case 'o': - ModeManager::AddUserMode(new UserMode(UMODE_OPER, "UMODE_OPER", 'o')); + ModeManager::AddUserMode(new UserMode(UMODE_OPER, 'o')); continue; case 'r': - ModeManager::AddUserMode(new UserMode(UMODE_REGISTERED, "UMODE_REGISTERED", 'r')); + ModeManager::AddUserMode(new UserMode(UMODE_REGISTERED, 'r')); continue; case 'w': - ModeManager::AddUserMode(new UserMode(UMODE_WALLOPS, "UMODE_WALLOPS", 'w')); + ModeManager::AddUserMode(new UserMode(UMODE_WALLOPS, 'w')); continue; case 'x': - ModeManager::AddUserMode(new UserMode(UMODE_CLOAK, "UMODE_CLOAK", 'x')); + ModeManager::AddUserMode(new UserMode(UMODE_CLOAK, 'x')); continue; case 'd': - ModeManager::AddUserMode(new UserMode(UMODE_DEAF, "UMODE_DEAF", 'd')); + ModeManager::AddUserMode(new UserMode(UMODE_DEAF, 'd')); continue; default: - ModeManager::AddUserMode(new UserMode(UMODE_END, "", modebuf[t])); + ModeManager::AddUserMode(new UserMode(UMODE_END, modebuf[t])); } } } @@ -613,19 +613,19 @@ class Inspircd12IRCdMessage : public InspircdIRCdMessage switch (modes[t]) { case 'q': - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OWNER, "CMODE_OWNER", 'q', chars[t])); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OWNER, 'q', chars[t])); continue; case 'a': - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_PROTECT, "CMODE_PROTECT", 'a', chars[t])); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_PROTECT, 'a', chars[t])); continue; case 'o': - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OP, "CMODE_OP", 'o', chars[t])); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OP, 'o', chars[t])); continue; case 'h': - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_HALFOP, "CMODE_HALFOP", 'h', chars[t])); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_HALFOP, 'h', chars[t])); continue; case 'v': - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_VOICE, "CMODE_VOICE", 'v', chars[t])); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_VOICE, 'v', chars[t])); continue; } } diff --git a/modules/protocol/inspircd20.cpp b/modules/protocol/inspircd20.cpp index 908868463..cbe6b7e60 100644 --- a/modules/protocol/inspircd20.cpp +++ b/modules/protocol/inspircd20.cpp @@ -381,86 +381,86 @@ class Inspircd20IRCdMessage : public InspircdIRCdMessage ChannelMode *cm = NULL; if (modename.equals_cs("admin")) - cm = new ChannelModeStatus(CMODE_PROTECT, "CMODE_PROTECT", modechar[1], modechar[0]); + cm = new ChannelModeStatus(CMODE_PROTECT, modechar[1], modechar[0]); else if (modename.equals_cs("allowinvite")) - cm = new ChannelMode(CMODE_ALLINVITE, "CMODE_ALLINVITE", modechar[0]); + cm = new ChannelMode(CMODE_ALLINVITE, modechar[0]); else if (modename.equals_cs("auditorium")) - cm = new ChannelMode(CMODE_AUDITORIUM, "CMODE_AUDITORIUM", modechar[0]); + cm = new ChannelMode(CMODE_AUDITORIUM, modechar[0]); else if (modename.equals_cs("ban")) cm = new ChannelModeBan(modechar[0]); else if (modename.equals_cs("banexception")) cm = new ChannelModeExcept(modechar[0]); else if (modename.equals_cs("blockcaps")) - cm = new ChannelMode(CMODE_BLOCKCAPS, "CMODE_BLOCKCAPS", modechar[0]); + cm = new ChannelMode(CMODE_BLOCKCAPS, modechar[0]); else if (modename.equals_cs("blockcolor")) - cm = new ChannelMode(CMODE_BLOCKCOLOR, "CMODE_BLOCKCOLOR", modechar[0]); + cm = new ChannelMode(CMODE_BLOCKCOLOR, modechar[0]); else if (modename.equals_cs("c_registered")) cm = new ChannelModeRegistered(modechar[0]); else if (modename.equals_cs("censor")) - cm = new ChannelMode(CMODE_FILTER, "CMODE_FILTER", modechar[0]); + cm = new ChannelMode(CMODE_FILTER, modechar[0]); else if (modename.equals_cs("delayjoin")) - cm = new ChannelMode(CMODE_DELAYEDJOIN, "CMODE_DELAYEDJOIN", modechar[0]); + cm = new ChannelMode(CMODE_DELAYEDJOIN, modechar[0]); else if (modename.equals_cs("flood")) cm = new ChannelModeFlood(modechar[0], true); else if (modename.equals_cs("founder")) - cm = new ChannelModeStatus(CMODE_OWNER, "CMODE_OWNER", modechar[1], modechar[0]); + cm = new ChannelModeStatus(CMODE_OWNER, modechar[1], modechar[0]); else if (modename.equals_cs("halfop")) - cm = new ChannelModeStatus(CMODE_HALFOP, "CMODE_HALFOP", modechar[1], modechar[0]); + cm = new ChannelModeStatus(CMODE_HALFOP, modechar[1], modechar[0]); else if (modename.equals_cs("invex")) cm = new ChannelModeInvex(modechar[0]); else if (modename.equals_cs("inviteonly")) - cm = new ChannelMode(CMODE_INVITE, "CMODE_INVITE", modechar[0]); + cm = new ChannelMode(CMODE_INVITE, modechar[0]); else if (modename.equals_cs("joinflood")) - cm = new ChannelModeParam(CMODE_JOINFLOOD, "CMODE_JOINFLOOD", modechar[0], true); + cm = new ChannelModeParam(CMODE_JOINFLOOD, modechar[0], true); else if (modename.equals_cs("key")) cm = new ChannelModeKey(modechar[0]); else if (modename.equals_cs("kicknorejoin")) - cm = new ChannelModeParam(CMODE_NOREJOIN, "CMODE_NOREJOIN", modechar[0], true); + cm = new ChannelModeParam(CMODE_NOREJOIN, modechar[0], true); else if (modename.equals_cs("limit")) - cm = new ChannelModeParam(CMODE_LIMIT, "CMODE_LIMIT", modechar[0], true); + cm = new ChannelModeParam(CMODE_LIMIT, modechar[0], true); else if (modename.equals_cs("moderated")) - cm = new ChannelMode(CMODE_MODERATED, "CMODE_MODERATED", modechar[0]); + cm = new ChannelMode(CMODE_MODERATED, modechar[0]); else if (modename.equals_cs("nickflood")) - cm = new ChannelModeParam(CMODE_NICKFLOOD, "CMODE_NICKFLOOD", modechar[0], true); + cm = new ChannelModeParam(CMODE_NICKFLOOD, modechar[0], true); else if (modename.equals_cs("noctcp")) - cm = new ChannelMode(CMODE_NOCTCP, "CMODE_NOCTCP", modechar[0]); + cm = new ChannelMode(CMODE_NOCTCP, modechar[0]); else if (modename.equals_cs("noextmsg")) - cm = new ChannelMode(CMODE_NOEXTERNAL, "CMODE_NOEXTERNAL", modechar[0]); + cm = new ChannelMode(CMODE_NOEXTERNAL, modechar[0]); else if (modename.equals_cs("nokick")) - cm = new ChannelMode(CMODE_NOKICK, "CMODE_NOKICK", modechar[0]); + cm = new ChannelMode(CMODE_NOKICK, modechar[0]); else if (modename.equals_cs("noknock")) - cm = new ChannelMode(CMODE_NOKNOCK, "CMODE_NOKNOCK", modechar[0]); + cm = new ChannelMode(CMODE_NOKNOCK, modechar[0]); else if (modename.equals_cs("nonick")) - cm = new ChannelMode(CMODE_NONICK, "CMODE_NONICK", modechar[0]); + cm = new ChannelMode(CMODE_NONICK, modechar[0]); else if (modename.equals_cs("nonotice")) - cm = new ChannelMode(CMODE_NONOTICE, "CMODE_NONOTICE", modechar[0]); + cm = new ChannelMode(CMODE_NONOTICE, modechar[0]); else if (modename.equals_cs("op")) - cm = new ChannelModeStatus(CMODE_OP, "CMODE_OP", modechar[1], modechar[0]); + cm = new ChannelModeStatus(CMODE_OP, modechar[1], modechar[0]); else if (modename.equals_cs("operonly")) cm = new ChannelModeOper(modechar[0]); else if (modename.equals_cs("permanent")) - cm = new ChannelMode(CMODE_PERM, "CMODE_PERM", modechar[0]); + cm = new ChannelMode(CMODE_PERM, modechar[0]); else if (modename.equals_cs("private")) - cm = new ChannelMode(CMODE_PRIVATE, "CMODE_PRIVATE", modechar[0]); + cm = new ChannelMode(CMODE_PRIVATE, modechar[0]); else if (modename.equals_cs("redirect")) - cm = new ChannelModeParam(CMODE_REDIRECT, "CMODE_REDIRECT", modechar[0], true); + cm = new ChannelModeParam(CMODE_REDIRECT, modechar[0], true); else if (modename.equals_cs("reginvite")) - cm = new ChannelMode(CMODE_REGISTEREDONLY, "CMODE_REGISTEREDONLY", modechar[0]); + cm = new ChannelMode(CMODE_REGISTEREDONLY, modechar[0]); else if (modename.equals_cs("regmoderated")) - cm = new ChannelMode(CMODE_REGMODERATED, "CMODE_REGMODERATED", modechar[0]); + cm = new ChannelMode(CMODE_REGMODERATED, modechar[0]); else if (modename.equals_cs("secret")) - cm = new ChannelMode(CMODE_SECRET, "CMODE_SECRET", modechar[0]); + cm = new ChannelMode(CMODE_SECRET, modechar[0]); else if (modename.equals_cs("sslonly")) - cm = new ChannelMode(CMODE_SSL, "CMODE_SSL", modechar[0]); + cm = new ChannelMode(CMODE_SSL, modechar[0]); else if (modename.equals_cs("stripcolor")) - cm = new ChannelMode(CMODE_STRIPCOLOR, "CMODE_STRIPCOLOR", modechar[0]); + cm = new ChannelMode(CMODE_STRIPCOLOR, modechar[0]); else if (modename.equals_cs("topiclock")) - cm = new ChannelMode(CMODE_TOPIC, "CMODE_TOPIC", modechar[0]); + cm = new ChannelMode(CMODE_TOPIC, modechar[0]); else if (modename.equals_cs("voice")) - cm = new ChannelModeStatus(CMODE_VOICE, "CMODE_VOICE", modechar[1], modechar[0]); + cm = new ChannelModeStatus(CMODE_VOICE, modechar[1], modechar[0]); /* Unknown status mode, (customprefix) - add it */ else if (modechar.length() == 2) - cm = new ChannelModeStatus(CMODE_END, modechar[0], modechar[1], modechar[0]); + cm = new ChannelModeStatus(CMODE_END, modechar[1], modechar[0]); /* else don't do anything here, we will get it in CAPAB CAPABILITIES */ if (cm) @@ -481,46 +481,44 @@ class Inspircd20IRCdMessage : public InspircdIRCdMessage UserMode *um = NULL; if (modename.equals_cs("bot")) - um = new UserMode(UMODE_BOT, "UMODE_BOT", modechar[0]); + um = new UserMode(UMODE_BOT, modechar[0]); else if (modename.equals_cs("callerid")) - um = new UserMode(UMODE_CALLERID, "UMODE_CALLERID", modechar[0]); + um = new UserMode(UMODE_CALLERID, modechar[0]); else if (modename.equals_cs("cloak")) - um = new UserMode(UMODE_CLOAK, "UMODE_CLOAK", modechar[0]); + um = new UserMode(UMODE_CLOAK, modechar[0]); else if (modename.equals_cs("deaf")) - um = new UserMode(UMODE_DEAF, "UMODE_DEAF", modechar[0]); + um = new UserMode(UMODE_DEAF, modechar[0]); else if (modename.equals_cs("deaf_commonchan")) - um = new UserMode(UMODE_COMMONCHANS, "UMODE_COMMONCHANS", modechar[0]); + um = new UserMode(UMODE_COMMONCHANS, modechar[0]); else if (modename.equals_cs("helpop")) - um = new UserMode(UMODE_HELPOP, "UMODE_HELPOP", modechar[0]); + um = new UserMode(UMODE_HELPOP, modechar[0]); else if (modename.equals_cs("hidechans")) - um = new UserMode(UMODE_PRIV, "UMODE_PRIV", modechar[0]); + um = new UserMode(UMODE_PRIV, modechar[0]); else if (modename.equals_cs("hideoper")) - um = new UserMode(UMODE_HIDEOPER, "UMODE_HIDEOPER", modechar[0]); + um = new UserMode(UMODE_HIDEOPER, modechar[0]); else if (modename.equals_cs("invisible")) - um = new UserMode(UMODE_INVIS, "UMODE_INVIS", modechar[0]); + um = new UserMode(UMODE_INVIS, modechar[0]); else if (modename.equals_cs("invis-oper")) - um = new UserMode(UMODE_INVISIBLE_OPER, "UMODE_INVISIBLE_OPER", modechar[0]); + um = new UserMode(UMODE_INVISIBLE_OPER, modechar[0]); else if (modename.equals_cs("oper")) - um = new UserMode(UMODE_OPER, "UMODE_OPER", modechar[0]); + um = new UserMode(UMODE_OPER, modechar[0]); else if (modename.equals_cs("regdeaf")) - um = new UserMode(UMODE_REGPRIV, "UMODE_REGPRIV", modechar[0]); + um = new UserMode(UMODE_REGPRIV, modechar[0]); else if (modename.equals_cs("servprotect")) { - um = new UserMode(UMODE_PROTECTED, "UMODE_PROTECTED", modechar[0]); - ircd->pseudoclient_mode = "+Ik"; + um = new UserMode(UMODE_PROTECTED, modechar[0]); + ircd->pseudoclient_mode = "+Ik"; // XXX } else if (modename.equals_cs("showwhois")) - um = new UserMode(UMODE_WHOIS, "UMODE_WHOIS", modechar[0]); - else if (modename.equals_cs("snomask")) - continue; // XXX + um = new UserMode(UMODE_WHOIS, modechar[0]); else if (modename.equals_cs("u_censor")) - um = new UserMode(UMODE_FILTER, "UMODE_FILTER", modechar[0]); + um = new UserMode(UMODE_FILTER, modechar[0]); else if (modename.equals_cs("u_registered")) - um = new UserMode(UMODE_REGISTERED, "UMODE_REGISTERED", modechar[0]); + um = new UserMode(UMODE_REGISTERED, modechar[0]); else if (modename.equals_cs("u_stripcolor")) - um = new UserMode(UMODE_STRIPCOLOR, "UMODE_STRIPCOLOR", modechar[0]); + um = new UserMode(UMODE_STRIPCOLOR, modechar[0]); else if (modename.equals_cs("wallops")) - um = new UserMode(UMODE_WALLOPS, "UMODE_WALLOPS", modechar[0]); + um = new UserMode(UMODE_WALLOPS, modechar[0]); if (um) ModeManager::AddUserMode(um); @@ -569,7 +567,7 @@ class Inspircd20IRCdMessage : public InspircdIRCdMessage { if (ModeManager::FindChannelModeByChar(modebuf[t])) continue; - ModeManager::AddChannelMode(new ChannelModeList(CMODE_END, modebuf[t], modebuf[t])); + ModeManager::AddChannelMode(new ChannelModeList(CMODE_END, modebuf[t])); } sep.GetToken(modebuf); @@ -577,7 +575,7 @@ class Inspircd20IRCdMessage : public InspircdIRCdMessage { if (ModeManager::FindChannelModeByChar(modebuf[t])) continue; - ModeManager::AddChannelMode(new ChannelModeParam(CMODE_END, modebuf[t], modebuf[t])); + ModeManager::AddChannelMode(new ChannelModeParam(CMODE_END, modebuf[t])); } sep.GetToken(modebuf); @@ -585,7 +583,7 @@ class Inspircd20IRCdMessage : public InspircdIRCdMessage { if (ModeManager::FindChannelModeByChar(modebuf[t])) continue; - ModeManager::AddChannelMode(new ChannelModeParam(CMODE_END, modebuf[t], modebuf[t], true)); + ModeManager::AddChannelMode(new ChannelModeParam(CMODE_END, true)); } sep.GetToken(modebuf); @@ -593,7 +591,7 @@ class Inspircd20IRCdMessage : public InspircdIRCdMessage { if (ModeManager::FindChannelModeByChar(modebuf[t])) continue; - ModeManager::AddChannelMode(new ChannelMode(CMODE_END, modebuf[t], modebuf[t])); + ModeManager::AddChannelMode(new ChannelMode(CMODE_END, modebuf[t])); } } else if (capab.find("USERMODES") != Anope::string::npos) @@ -607,11 +605,11 @@ class Inspircd20IRCdMessage : public InspircdIRCdMessage if (sep.GetToken(modebuf)) for (size_t t = 0, end = modebuf.length(); t < end; ++t) - ModeManager::AddUserMode(new UserModeParam(UMODE_END, "", modebuf[t])); + ModeManager::AddUserMode(new UserModeParam(UMODE_END, modebuf[t])); if (sep.GetToken(modebuf)) for (size_t t = 0, end = modebuf.length(); t < end; ++t) - ModeManager::AddUserMode(new UserMode(UMODE_END, "", modebuf[t])); + ModeManager::AddUserMode(new UserMode(UMODE_END, modebuf[t])); } else if (capab.find("MAXMODES=") != Anope::string::npos) { diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp index f72624419..cffbb1a53 100644 --- a/modules/protocol/ngircd.cpp +++ b/modules/protocol/ngircd.cpp @@ -61,9 +61,9 @@ class ngIRCdProto : public IRCDProto { send_cmd(user->nick, "JOIN %s", c->name.c_str()); if (status) - for (size_t i = CMODE_BEGIN + 1; i != CMODE_END; ++i) - if (status->HasFlag(static_cast<ChannelModeName>(i))) - c->SetMode(user, static_cast<ChannelModeName>(i), user->nick, false); + for (unsigned i = 0; i < ModeManager::ChannelModes.size(); ++i) + if (status->HasFlag(ModeManager::ChannelModes[i]->Name)) + c->SetMode(user, ModeManager::ChannelModes[i], user->nick, false); } void SendSVSKillInternal(const BotInfo *source, const User *user, const Anope::string &buf) @@ -416,33 +416,33 @@ class ProtongIRCd : public Module void AddModes() { /* Add user modes */ - ModeManager::AddUserMode(new UserMode(UMODE_ADMIN, "UMODE_ADMIN", 'a')); - ModeManager::AddUserMode(new UserMode(UMODE_INVIS, "UMODE_INVIS", 'i')); - ModeManager::AddUserMode(new UserMode(UMODE_OPER, "UMODE_OPER", 'o')); - ModeManager::AddUserMode(new UserMode(UMODE_RESTRICTED, "UMODE_RESTRICTED", 'r')); - ModeManager::AddUserMode(new UserMode(UMODE_SNOMASK, "UMODE_SNOMASK", 's')); - ModeManager::AddUserMode(new UserMode(UMODE_WALLOPS, "UMODE_WALLOPS", 'w')); - ModeManager::AddUserMode(new UserMode(UMODE_CLOAK, "UMODE_CLOAK", 'x')); + ModeManager::AddUserMode(new UserMode(UMODE_ADMIN, 'a')); + ModeManager::AddUserMode(new UserMode(UMODE_INVIS, 'i')); + ModeManager::AddUserMode(new UserMode(UMODE_OPER, 'o')); + ModeManager::AddUserMode(new UserMode(UMODE_RESTRICTED, 'r')); + ModeManager::AddUserMode(new UserMode(UMODE_SNOMASK, 's')); + ModeManager::AddUserMode(new UserMode(UMODE_WALLOPS, 'w')); + ModeManager::AddUserMode(new UserMode(UMODE_CLOAK, 'x')); /* b/e/I */ ModeManager::AddChannelMode(new ChannelModeBan('b')); ModeManager::AddChannelMode(new ChannelModeInvex('I')); /* v/h/o/a/q */ - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_VOICE, "CMODE_VOICE", 'v', '+')); - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OP, "CMODE_OP", 'o', '@')); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_VOICE, 'v', '+')); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OP, 'o', '@')); /* Add channel modes */ // channel modes: biIklmnoPstvz - ModeManager::AddChannelMode(new ChannelMode(CMODE_INVITE, "CMODE_INVITE", 'i')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_INVITE, 'i')); ModeManager::AddChannelMode(new ChannelModeKey('k')); - ModeManager::AddChannelMode(new ChannelModeParam(CMODE_LIMIT, "CMODE_LIMIT", 'l')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_MODERATED, "CMODE_MODERATED", 'm')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_NOEXTERNAL, "CMODE_NOEXTERNAL", 'n')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_PERM, "CMODE_PERM", 'P')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_SECRET, "CMODE_SECRET", 's')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_TOPIC, "CMODE_TOPIC", 't')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_SSL, "CMODE_SSL", 'z')); + ModeManager::AddChannelMode(new ChannelModeParam(CMODE_LIMIT, 'l')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_MODERATED, 'm')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_NOEXTERNAL, 'n')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_PERM, 'P')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_SECRET, 's')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_TOPIC, 't')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_SSL, 'z')); } public: diff --git a/modules/protocol/plexus.cpp b/modules/protocol/plexus.cpp index a7ebabd86..fd6525701 100644 --- a/modules/protocol/plexus.cpp +++ b/modules/protocol/plexus.cpp @@ -124,9 +124,9 @@ class PlexusProto : public IRCDProto { send_cmd(Config->Numeric, "SJOIN %ld %s +%s :%s", static_cast<long>(c->creation_time), c->name.c_str(), c->GetModes(true, true).c_str(), user->GetUID().c_str()); if (status) - for (size_t i = CMODE_BEGIN + 1; i != CMODE_END; ++i) - if (status->HasFlag(static_cast<ChannelModeName>(i))) - c->SetMode(user, static_cast<ChannelModeName>(i), user->nick, false); + for (unsigned i = 0; i < ModeManager::ChannelModes.size(); ++i) + if (status->HasFlag(ModeManager::ChannelModes[i]->Name)) + c->SetMode(user, ModeManager::ChannelModes[i], user->nick, false); } void SendAkill(User *, const XLine *x) @@ -579,21 +579,21 @@ class ProtoPlexus : public Module void AddModes() { /* Add user modes */ - ModeManager::AddUserMode(new UserMode(UMODE_ADMIN, "UMODE_ADMIN", 'a')); - ModeManager::AddUserMode(new UserMode(UMODE_INVIS, "UMODE_INVIS", 'i')); - ModeManager::AddUserMode(new UserMode(UMODE_OPER, "UMODE_OPER", 'o')); - ModeManager::AddUserMode(new UserMode(UMODE_SNOMASK, "UMODE_SNOMASK", 's')); - ModeManager::AddUserMode(new UserMode(UMODE_WALLOPS, "UMODE_WALLOPS", 'w')); - ModeManager::AddUserMode(new UserMode(UMODE_DEAF, "UMODE_DEAF", 'D')); - ModeManager::AddUserMode(new UserMode(UMODE_SOFTCALLERID, "UMODE_SOFTCALLERID", 'G')); - ModeManager::AddUserMode(new UserMode(UMODE_NETADMIN, "UMODE_NETADMIN", 'M')); - ModeManager::AddUserMode(new UserMode(UMODE_REGPRIV, "UMODE_REGPRIV", 'R')); - ModeManager::AddUserMode(new UserMode(UMODE_SSL, "UMODE_SSL", 'S')); - ModeManager::AddUserMode(new UserMode(UMODE_WEBIRC, "UMODE_WEBIRC", 'W')); - ModeManager::AddUserMode(new UserMode(UMODE_CALLERID, "UMODE_CALLERID", 'g')); - ModeManager::AddUserMode(new UserMode(UMODE_PRIV, "UMODE_PRIV", 'p')); - ModeManager::AddUserMode(new UserMode(UMODE_REGISTERED, "UMODE_REGISTERED", 'r')); - ModeManager::AddUserMode(new UserMode(UMODE_CLOAK, "UMODE_CLOAK", 'x')); + ModeManager::AddUserMode(new UserMode(UMODE_ADMIN, 'a')); + ModeManager::AddUserMode(new UserMode(UMODE_INVIS, 'i')); + ModeManager::AddUserMode(new UserMode(UMODE_OPER, 'o')); + ModeManager::AddUserMode(new UserMode(UMODE_SNOMASK, 's')); + ModeManager::AddUserMode(new UserMode(UMODE_WALLOPS, 'w')); + ModeManager::AddUserMode(new UserMode(UMODE_DEAF, 'D')); + ModeManager::AddUserMode(new UserMode(UMODE_SOFTCALLERID, 'G')); + ModeManager::AddUserMode(new UserMode(UMODE_NETADMIN, 'M')); + ModeManager::AddUserMode(new UserMode(UMODE_REGPRIV, 'R')); + ModeManager::AddUserMode(new UserMode(UMODE_SSL, 'S')); + ModeManager::AddUserMode(new UserMode(UMODE_WEBIRC, 'W')); + ModeManager::AddUserMode(new UserMode(UMODE_CALLERID, 'g')); + ModeManager::AddUserMode(new UserMode(UMODE_PRIV, 'p')); + ModeManager::AddUserMode(new UserMode(UMODE_REGISTERED, 'r')); + ModeManager::AddUserMode(new UserMode(UMODE_CLOAK, 'x')); /* b/e/I */ ModeManager::AddChannelMode(new ChannelModeBan('b')); @@ -602,31 +602,31 @@ class ProtoPlexus : public Module /* l/k */ ModeManager::AddChannelMode(new ChannelModeKey('k')); - ModeManager::AddChannelMode(new ChannelModeParam(CMODE_LIMIT, "CMODE_LIMIT", 'l')); + ModeManager::AddChannelMode(new ChannelModeParam(CMODE_LIMIT, 'l')); /* v/h/o/a/q */ - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_VOICE, "CMODE_VOICE", 'v', '+')); - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_HALFOP, "CMODE_HALFOP", 'h', '%')); - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OP, "CMODE_OP", 'o', '@')); - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_PROTECT, "CMODE_PROTECT", 'a', '&')); - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OWNER, "CMODE_OWNER", 'q', '~')); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_VOICE, 'v', '+')); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_HALFOP, 'h', '%')); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OP, 'o', '@')); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_PROTECT, 'a', '&')); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OWNER, 'q', '~')); /* Add channel modes */ - ModeManager::AddChannelMode(new ChannelMode(CMODE_BANDWIDTH, "CMODE_BANDWIDTH", 'B')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_REGMODERATED, "CMODE_REGMODERATED", 'M')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_NONOTICE, "CMODE_NONOTICE", 'N')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_BANDWIDTH, 'B')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_REGMODERATED, 'M')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_NONOTICE, 'N')); ModeManager::AddChannelMode(new ChannelModeOper('O')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_REGISTEREDONLY, "CMODE_REGISTEREDONLY", 'R')); - - ModeManager::AddChannelMode(new ChannelMode(CMODE_SSL, "CMODE_SSL", 'S')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_BLOCKCOLOR, "CMODE_BLOCKCOLOR", 'c')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_INVITE, "CMODE_INVITE", 'i')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_MODERATED, "CMODE_MODERATED", 'm')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_NOEXTERNAL, "CMODE_NOEXTERNAL", 'n')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_PRIVATE, "CMODE_PRIVATE", 'p')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_SECRET, "CMODE_SECRET", 's')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_TOPIC, "CMODE_TOPIC", 't')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_PERM, "CMODE_PERM", 'z')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_REGISTEREDONLY, 'R')); + + ModeManager::AddChannelMode(new ChannelMode(CMODE_SSL, 'S')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_BLOCKCOLOR, 'c')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_INVITE, 'i')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_MODERATED, 'm')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_NOEXTERNAL, 'n')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_PRIVATE, 'p')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_SECRET, 's')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_TOPIC, 't')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_PERM, 'z')); } public: diff --git a/modules/protocol/ratbox.cpp b/modules/protocol/ratbox.cpp index 844889310..f0352cf63 100644 --- a/modules/protocol/ratbox.cpp +++ b/modules/protocol/ratbox.cpp @@ -539,11 +539,11 @@ class ProtoRatbox : public Module void AddModes() { /* Add user modes */ - ModeManager::AddUserMode(new UserMode(UMODE_ADMIN, "UMODE_ADMIN", 'a')); - ModeManager::AddUserMode(new UserMode(UMODE_INVIS, "UMODE_INVIS", 'i')); - ModeManager::AddUserMode(new UserMode(UMODE_OPER, "UMODE_OPER", 'o')); - ModeManager::AddUserMode(new UserMode(UMODE_SNOMASK, "UMODE_SNOMASK", 's')); - ModeManager::AddUserMode(new UserMode(UMODE_WALLOPS, "UMODE_WALLOPS", 'w')); + ModeManager::AddUserMode(new UserMode(UMODE_ADMIN, 'a')); + ModeManager::AddUserMode(new UserMode(UMODE_INVIS, 'i')); + ModeManager::AddUserMode(new UserMode(UMODE_OPER, 'o')); + ModeManager::AddUserMode(new UserMode(UMODE_SNOMASK, 's')); + ModeManager::AddUserMode(new UserMode(UMODE_WALLOPS, 'w')); /* b/e/I */ ModeManager::AddChannelMode(new ChannelModeBan('b')); @@ -551,18 +551,18 @@ class ProtoRatbox : public Module ModeManager::AddChannelMode(new ChannelModeInvex('I')); /* v/h/o/a/q */ - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_VOICE, "CMODE_VOICE", 'v', '+')); - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OP, "CMODE_OP", 'o', '@')); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_VOICE, 'v', '+')); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OP, 'o', '@')); /* Add channel modes */ - ModeManager::AddChannelMode(new ChannelMode(CMODE_INVITE, "CMODE_INVITE", 'i')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_INVITE, 'i')); ModeManager::AddChannelMode(new ChannelModeKey('k')); - ModeManager::AddChannelMode(new ChannelModeParam(CMODE_LIMIT, "CMODE_LIMIT", 'l')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_MODERATED, "CMODE_MODERATED", 'm')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_NOEXTERNAL, "CMODE_NOEXTERNAL", 'n')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_PRIVATE, "CMODE_PRIVATE", 'p')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_SECRET, "CMODE_SECRET", 's')); - ModeManager::AddChannelMode(new ChannelMode(CMODE_TOPIC, "CMODE_TOPIC", 't')); + ModeManager::AddChannelMode(new ChannelModeParam(CMODE_LIMIT, 'l')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_MODERATED, 'm')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_NOEXTERNAL, 'n')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_PRIVATE, 'p')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_SECRET, 's')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_TOPIC, 't')); } public: diff --git a/modules/protocol/unreal32.cpp b/modules/protocol/unreal32.cpp index c510a4976..ca5f349e8 100644 --- a/modules/protocol/unreal32.cpp +++ b/modules/protocol/unreal32.cpp @@ -173,9 +173,9 @@ class UnrealIRCdProto : public IRCDProto { send_cmd(Config->ServerName, "~ %ld %s :%s", static_cast<long>(c->creation_time), c->name.c_str(), user->nick.c_str()); if (status) - for (size_t i = CMODE_BEGIN + 1; i != CMODE_END; ++i) - if (status->HasFlag(static_cast<ChannelModeName>(i))) - c->SetMode(user, static_cast<ChannelModeName>(i), user->nick, false); + for (unsigned i = 0; i < ModeManager::ChannelModes.size(); ++i) + if (status->HasFlag(ModeManager::ChannelModes[i]->Name)) + c->SetMode(user, ModeManager::ChannelModes[i], user->nick, false); } /* unsqline @@ -530,7 +530,7 @@ class Unreal32IRCdMessage : public IRCdMessage ModeManager::AddChannelMode(new ChannelModeInvex('I')); continue; default: - ModeManager::AddChannelMode(new ChannelModeList(CMODE_END, modebuf[t], modebuf[t])); + ModeManager::AddChannelMode(new ChannelModeList(CMODE_END, modebuf[t])); } } @@ -546,10 +546,10 @@ class Unreal32IRCdMessage : public IRCdMessage ModeManager::AddChannelMode(new ChannelModeFlood('f')); continue; case 'L': - ModeManager::AddChannelMode(new ChannelModeParam(CMODE_REDIRECT, "CMODE_REDIRECT", 'L')); + ModeManager::AddChannelMode(new ChannelModeParam(CMODE_REDIRECT, 'L')); continue; default: - ModeManager::AddChannelMode(new ChannelModeParam(CMODE_END, modebuf[t], modebuf[t])); + ModeManager::AddChannelMode(new ChannelModeParam(CMODE_END, modebuf[t])); } } @@ -559,13 +559,13 @@ class Unreal32IRCdMessage : public IRCdMessage switch (modebuf[t]) { case 'l': - ModeManager::AddChannelMode(new ChannelModeParam(CMODE_LIMIT, "CMODE_LIMIT", 'l', true)); + ModeManager::AddChannelMode(new ChannelModeParam(CMODE_LIMIT, 'l', true)); continue; case 'j': - ModeManager::AddChannelMode(new ChannelModeParam(CMODE_JOINFLOOD, "CMODE_JOINFLOOD", 'j', true)); + ModeManager::AddChannelMode(new ChannelModeParam(CMODE_JOINFLOOD, 'j', true)); continue; default: - ModeManager::AddChannelMode(new ChannelModeParam(CMODE_END, modebuf[t], modebuf[t], true)); + ModeManager::AddChannelMode(new ChannelModeParam(CMODE_END, modebuf[t], true)); } } @@ -575,31 +575,31 @@ class Unreal32IRCdMessage : public IRCdMessage switch (modebuf[t]) { case 'p': - ModeManager::AddChannelMode(new ChannelMode(CMODE_PRIVATE, "CMODE_PRIVATE", 'p')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_PRIVATE, 'p')); continue; case 's': - ModeManager::AddChannelMode(new ChannelMode(CMODE_SECRET, "CMODE_SECRET", 's')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_SECRET, 's')); continue; case 'm': - ModeManager::AddChannelMode(new ChannelMode(CMODE_MODERATED, "CMODE_MODERATED", 'm')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_MODERATED, 'm')); continue; case 'n': - ModeManager::AddChannelMode(new ChannelMode(CMODE_NOEXTERNAL, "CMODE_NOEXTERNAL", 'n')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_NOEXTERNAL, 'n')); continue; case 't': - ModeManager::AddChannelMode(new ChannelMode(CMODE_TOPIC, "CMODE_TOPIC", 't')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_TOPIC, 't')); continue; case 'i': - ModeManager::AddChannelMode(new ChannelMode(CMODE_INVITE, "CMODE_INVITE", 'i')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_INVITE, 'i')); continue; case 'r': ModeManager::AddChannelMode(new ChannelModeRegistered('r')); continue; case 'R': - ModeManager::AddChannelMode(new ChannelMode(CMODE_REGISTEREDONLY, "CMODE_REGISTEREDONLY", 'R')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_REGISTEREDONLY, 'R')); continue; case 'c': - ModeManager::AddChannelMode(new ChannelMode(CMODE_BLOCKCOLOR, "CMODE_BLOCKCOLOR", 'c')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_BLOCKCOLOR, 'c')); continue; case 'O': ModeManager::AddChannelMode(new ChannelModeOper('O')); @@ -608,40 +608,40 @@ class Unreal32IRCdMessage : public IRCdMessage ModeManager::AddChannelMode(new ChannelModeAdmin('A')); continue; case 'Q': - ModeManager::AddChannelMode(new ChannelMode(CMODE_NOKICK, "CMODE_NOKICK", 'Q')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_NOKICK, 'Q')); continue; case 'K': - ModeManager::AddChannelMode(new ChannelMode(CMODE_NOKNOCK, "CMODE_NOKNOCK", 'K')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_NOKNOCK, 'K')); continue; case 'V': - ModeManager::AddChannelMode(new ChannelMode(CMODE_NOINVITE, "CMODE_NOINVITE", 'V')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_NOINVITE, 'V')); continue; case 'C': - ModeManager::AddChannelMode(new ChannelMode(CMODE_NOCTCP, "CMODE_NOCTCP", 'C')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_NOCTCP, 'C')); continue; case 'u': - ModeManager::AddChannelMode(new ChannelMode(CMODE_AUDITORIUM, "CMODE_AUDITORIUM", 'u')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_AUDITORIUM, 'u')); continue; case 'z': - ModeManager::AddChannelMode(new ChannelMode(CMODE_SSL, "CMODE_SSL", 'z')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_SSL, 'z')); continue; case 'N': - ModeManager::AddChannelMode(new ChannelMode(CMODE_NONICK, "CMODE_NONICK", 'N')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_NONICK, 'N')); continue; case 'S': - ModeManager::AddChannelMode(new ChannelMode(CMODE_STRIPCOLOR, "CMODE_STRIPCOLOR", 'S')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_STRIPCOLOR, 'S')); continue; case 'M': - ModeManager::AddChannelMode(new ChannelMode(CMODE_REGMODERATED, "CMODE_REGMODERATED", 'M')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_REGMODERATED, 'M')); continue; case 'T': - ModeManager::AddChannelMode(new ChannelMode(CMODE_NONOTICE, "CMODE_NONOTICE", 'T')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_NONOTICE, 'T')); continue; case 'G': - ModeManager::AddChannelMode(new ChannelMode(CMODE_FILTER, "CMODE_FILTER", 'G')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_FILTER, 'G')); continue; default: - ModeManager::AddChannelMode(new ChannelMode(CMODE_END, modebuf[t], modebuf[t])); + ModeManager::AddChannelMode(new ChannelMode(CMODE_END, modebuf[t])); } } } @@ -993,39 +993,39 @@ class ProtoUnreal : public Module void AddModes() { - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_VOICE, "CMODE_VOICE", 'v', '+')); - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_HALFOP, "CMODE_HALFOP", 'h', '%')); - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OP, "CMODE_OP", 'o', '@')); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_VOICE, 'v', '+')); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_HALFOP, 'h', '%')); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OP, 'o', '@')); /* Unreal sends +q as * and +a as ~ */ - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_PROTECT, "CMODE_PROTECT", 'a', '~')); - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OWNER, "CMODE_OWNER", 'q', '*')); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_PROTECT, 'a', '~')); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OWNER, 'q', '*')); /* Add user modes */ - ModeManager::AddUserMode(new UserMode(UMODE_SERV_ADMIN, "UMODE_SERV_ADMIN", 'A')); - ModeManager::AddUserMode(new UserMode(UMODE_BOT, "UMODE_BOT", 'B')); - ModeManager::AddUserMode(new UserMode(UMODE_CO_ADMIN, "UMODE_CO_ADMIN", 'C')); - ModeManager::AddUserMode(new UserMode(UMODE_FILTER, "UMODE_FILTER", 'G')); - ModeManager::AddUserMode(new UserMode(UMODE_HIDEOPER, "UMODE_HIDEOPER", 'H')); - ModeManager::AddUserMode(new UserMode(UMODE_NETADMIN, "UMODE_NETADMIN", 'N')); - ModeManager::AddUserMode(new UserMode(UMODE_REGPRIV, "UMODE_REGPRIV", 'R')); - ModeManager::AddUserMode(new UserMode(UMODE_PROTECTED, "UMODE_PROTECTED", 'S')); - ModeManager::AddUserMode(new UserMode(UMODE_NO_CTCP, "UMODE_NO_CTCP", 'T')); - ModeManager::AddUserMode(new UserMode(UMODE_WEBTV, "UMODE_WEBTV", 'V')); - ModeManager::AddUserMode(new UserMode(UMODE_WHOIS, "UMODE_WHOIS", 'W')); - ModeManager::AddUserMode(new UserMode(UMODE_ADMIN, "UMODE_ADMIN", 'a')); - ModeManager::AddUserMode(new UserMode(UMODE_DEAF, "UMODE_DEAF", 'd')); - ModeManager::AddUserMode(new UserMode(UMODE_GLOBOPS, "UMODE_GLOBOPS", 'g')); - ModeManager::AddUserMode(new UserMode(UMODE_HELPOP, "UMODE_HELPOP", 'h')); - ModeManager::AddUserMode(new UserMode(UMODE_INVIS, "UMODE_INVIS", 'i')); - ModeManager::AddUserMode(new UserMode(UMODE_OPER, "UMODE_OPER", 'o')); - ModeManager::AddUserMode(new UserMode(UMODE_PRIV, "UMODE_PRIV", 'p')); - ModeManager::AddUserMode(new UserMode(UMODE_GOD, "UMODE_GOD", 'q')); - ModeManager::AddUserMode(new UserMode(UMODE_REGISTERED, "UMODE_REGISTERED", 'r')); - ModeManager::AddUserMode(new UserMode(UMODE_SNOMASK, "UMODE_SNOMASK", 's')); - ModeManager::AddUserMode(new UserMode(UMODE_VHOST, "UMODE_VHOST", 't')); - ModeManager::AddUserMode(new UserMode(UMODE_WALLOPS, "UMODE_WALLOPS", 'w')); - ModeManager::AddUserMode(new UserMode(UMODE_CLOAK, "UMODE_CLOAK", 'x')); - ModeManager::AddUserMode(new UserMode(UMODE_SSL, "UMODE_SSL", 'z')); + ModeManager::AddUserMode(new UserMode(UMODE_SERV_ADMIN, 'A')); + ModeManager::AddUserMode(new UserMode(UMODE_BOT, 'B')); + ModeManager::AddUserMode(new UserMode(UMODE_CO_ADMIN, 'C')); + ModeManager::AddUserMode(new UserMode(UMODE_FILTER, 'G')); + ModeManager::AddUserMode(new UserMode(UMODE_HIDEOPER, 'H')); + ModeManager::AddUserMode(new UserMode(UMODE_NETADMIN, 'N')); + ModeManager::AddUserMode(new UserMode(UMODE_REGPRIV, 'R')); + ModeManager::AddUserMode(new UserMode(UMODE_PROTECTED, 'S')); + ModeManager::AddUserMode(new UserMode(UMODE_NO_CTCP, 'T')); + ModeManager::AddUserMode(new UserMode(UMODE_WEBTV, 'V')); + ModeManager::AddUserMode(new UserMode(UMODE_WHOIS, 'W')); + ModeManager::AddUserMode(new UserMode(UMODE_ADMIN, 'a')); + ModeManager::AddUserMode(new UserMode(UMODE_DEAF, 'd')); + ModeManager::AddUserMode(new UserMode(UMODE_GLOBOPS, 'g')); + ModeManager::AddUserMode(new UserMode(UMODE_HELPOP, 'h')); + ModeManager::AddUserMode(new UserMode(UMODE_INVIS, 'i')); + ModeManager::AddUserMode(new UserMode(UMODE_OPER, 'o')); + ModeManager::AddUserMode(new UserMode(UMODE_PRIV, 'p')); + ModeManager::AddUserMode(new UserMode(UMODE_GOD, 'q')); + ModeManager::AddUserMode(new UserMode(UMODE_REGISTERED, 'r')); + ModeManager::AddUserMode(new UserMode(UMODE_SNOMASK, 's')); + ModeManager::AddUserMode(new UserMode(UMODE_VHOST, 't')); + ModeManager::AddUserMode(new UserMode(UMODE_WALLOPS, 'w')); + ModeManager::AddUserMode(new UserMode(UMODE_CLOAK, 'x')); + ModeManager::AddUserMode(new UserMode(UMODE_SSL, 'z')); } public: diff --git a/src/channels.cpp b/src/channels.cpp index c68fd3ba0..9a8427bf3 100644 --- a/src/channels.cpp +++ b/src/channels.cpp @@ -74,14 +74,12 @@ void Channel::Reset() if (findbot(uc->user->nick)) { - for (std::map<char, ChannelMode *>::iterator mit = ModeManager::ChannelModesByChar.begin(), mit_end = ModeManager::ChannelModesByChar.end(); mit != mit_end; ++mit) + for (unsigned i = 0; i < ModeManager::ChannelModes.size(); ++i) { - ChannelMode *cm = mit->second; + ChannelMode *cm = ModeManager::ChannelModes[i]; if (flags.HasFlag(cm->Name)) - { this->SetMode(NULL, cm, uc->user->nick, false); - } } } } diff --git a/src/modes.cpp b/src/modes.cpp index 14b884896..76b05422a 100644 --- a/src/modes.cpp +++ b/src/modes.cpp @@ -13,17 +13,8 @@ std::list<std::pair<Base *, StackerInfo *> > ModeManager::StackerObjects; /* List of all modes Anope knows about */ -std::map<Anope::string, Mode *> ModeManager::Modes; - -/* User modes */ -std::map<char, UserMode *> ModeManager::UserModesByChar; -std::map<UserModeName, UserMode *> ModeManager::UserModesByName; -/* Channel modes */ -std::map<char, ChannelMode *> ModeManager::ChannelModesByChar; -std::map<ChannelModeName, ChannelMode *> ModeManager::ChannelModesByName; -/* Although there are two different maps for UserModes and ChannelModes - * the pointers in each are the same. This is used to increase efficiency. - */ +std::vector<ChannelMode *> ModeManager::ChannelModes; +std::vector<UserMode *> ModeManager::UserModes; /* Number of generic modes we support */ unsigned GenericChannelModes = 0, GenericUserModes = 0; @@ -86,12 +77,12 @@ Anope::string ChannelStatus::BuildCharPrefixList() const { Anope::string ret; - for (std::map<char, ChannelMode *>::const_iterator it = ModeManager::ChannelModesByChar.begin(), it_end = ModeManager::ChannelModesByChar.end(); it != it_end; ++it) + for (unsigned i = 0; i < ModeManager::ChannelModes.size(); ++i) { - if (this->HasFlag(it->second->Name)) - { - ret += it->second->ModeChar; - } + ChannelMode *cm = ModeManager::ChannelModes[i]; + + if (this->HasFlag(cm->Name)) + ret += cm->ModeChar; } return ret; @@ -101,12 +92,14 @@ Anope::string ChannelStatus::BuildModePrefixList() const { Anope::string ret; - for (std::map<char, ChannelMode *>::const_iterator it = ModeManager::ChannelModesByChar.begin(), it_end = ModeManager::ChannelModesByChar.end(); it != it_end; ++it) + for (unsigned i = 0; i < ModeManager::ChannelModes.size(); ++i) { - if (this->HasFlag(it->second->Name)) + ChannelMode *cm = ModeManager::ChannelModes[i]; + + if (this->HasFlag(cm->Name)) { - ChannelModeStatus *cm = debug_cast<ChannelModeStatus *>(it->second); - ret += cm->Symbol; + ChannelModeStatus *cms = debug_cast<ChannelModeStatus *>(cm); + ret += cms->Symbol; } } @@ -115,11 +108,10 @@ Anope::string ChannelStatus::BuildModePrefixList() const /** Default constructor * @param mClass The type of mode this is - * @param mNameAsString The mode name as a string * @param modeChar The mode char * @param modeType The mode type */ -Mode::Mode(ModeClass mClass, const Anope::string &mNameAsString, char modeChar, ModeType modeType) : Class(mClass), NameAsString(mNameAsString), ModeChar(modeChar), Type(modeType) +Mode::Mode(ModeClass mClass, char modeChar, ModeType modeType) : Class(mClass), ModeChar(modeChar), Type(modeType) { } @@ -131,10 +123,9 @@ Mode::~Mode() /** Default constructor * @param mName The mode name - * @param mNameAsString The mode name as a string * @param modeChar The mode char */ -UserMode::UserMode(UserModeName mName, const Anope::string &mNameAsString, char modeChar) : Mode(MC_USER, mNameAsString, modeChar, MODE_REGULAR), Name(mName) +UserMode::UserMode(UserModeName mName, char modeChar) : Mode(MC_USER, modeChar, MODE_REGULAR), Name(mName) { } @@ -144,22 +135,29 @@ UserMode::~UserMode() { } +/** Returns the mode name as a string + */ +const Anope::string UserMode::NameAsString() +{ + if (this->Name > UMODE_END) + return this->ModeChar; + return UserModeNameStrings[this->Name]; +} + /** Default constructor * @param mName The mode name - * @param mNameAsString The mode name as a string * @param modeChar The mode char */ -UserModeParam::UserModeParam(UserModeName mName, const Anope::string &mNameAsString, char modeChar) : UserMode(mName, mNameAsString, modeChar) +UserModeParam::UserModeParam(UserModeName mName, char modeChar) : UserMode(mName, modeChar) { this->Type = MODE_PARAM; } /** Default constrcutor * @param mName The mode name - * @param mNameAsString The mode name as a string * @param modeChar The mode char */ -ChannelMode::ChannelMode(ChannelModeName mName, const Anope::string &mNameAsString, char modeChar) : Mode(MC_CHANNEL, mNameAsString, modeChar, MODE_REGULAR), Name(mName) +ChannelMode::ChannelMode(ChannelModeName mName, char modeChar) : Mode(MC_CHANNEL, modeChar, MODE_REGULAR), Name(mName) { } @@ -180,12 +178,20 @@ bool ChannelMode::CanSet(User *u) const return true; } +/** Returns the mode name as a string + */ +const Anope::string ChannelMode::NameAsString() +{ + if (this->Name > CMODE_END) + return this->ModeChar; + return ChannelModeNameStrings[this->Name]; +} + /** Default constructor * @param mName The mode name - * @param mNameAsString The mode name as a string * @param modeChar The mode char */ -ChannelModeList::ChannelModeList(ChannelModeName mName, const Anope::string &mNameAsString, char modeChar) : ChannelMode(mName, mNameAsString, modeChar) +ChannelModeList::ChannelModeList(ChannelModeName mName, char modeChar) : ChannelMode(mName, modeChar) { this->Type = MODE_LIST; } @@ -198,11 +204,10 @@ ChannelModeList::~ChannelModeList() /** Default constructor * @param mName The mode name - * @param mNameAsString The mode name as a string * @param modeChar The mode char * @param MinusArg true if the mode sends no arg when unsetting */ -ChannelModeParam::ChannelModeParam(ChannelModeName mName, const Anope::string &mNameAsString, char modeChar, bool MinusArg) : ChannelMode(mName, mNameAsString, modeChar), MinusNoArg(MinusArg) +ChannelModeParam::ChannelModeParam(ChannelModeName mName, char modeChar, bool MinusArg) : ChannelMode(mName, modeChar), MinusNoArg(MinusArg) { this->Type = MODE_PARAM; } @@ -215,11 +220,10 @@ ChannelModeParam::~ChannelModeParam() /** Default constructor * @param mName The mode name - * @param mNameAsString The mode name as a string * @param modeChar The mode char * @param mSymbol The symbol for the mode, eg @ % + */ -ChannelModeStatus::ChannelModeStatus(ChannelModeName mName, const Anope::string &mNameAsString, char modeChar, char mSymbol) : ChannelMode(mName, mNameAsString, modeChar), Symbol(mSymbol) +ChannelModeStatus::ChannelModeStatus(ChannelModeName mName, char modeChar, char mSymbol) : ChannelMode(mName, modeChar), Symbol(mSymbol) { this->Type = MODE_STATUS; } @@ -545,22 +549,19 @@ void ModeManager::StackerAddInternal(BotInfo *bi, Base *Object, Mode *mode, bool */ bool ModeManager::AddUserMode(UserMode *um) { - if (ModeManager::UserModesByChar.insert(std::make_pair(um->ModeChar, um)).second) + if (ModeManager::FindUserModeByChar(um->ModeChar) != NULL) + return false; + + if (um->Name == UMODE_END) { - if (um->Name == UMODE_END) - { - um->Name = static_cast<UserModeName>(UMODE_END + ++GenericUserModes); - Log() << "ModeManager: Added generic support for user mode " << um->ModeChar; - } - ModeManager::UserModesByName.insert(std::make_pair(um->Name, um)); - ModeManager::Modes.insert(std::make_pair(um->NameAsString, um)); - - FOREACH_MOD(I_OnUserModeAdd, OnUserModeAdd(um)); - - return true; + um->Name = static_cast<UserModeName>(UMODE_END + ++GenericUserModes); + Log() << "ModeManager: Added generic support for user mode " << um->ModeChar; } + ModeManager::UserModes.push_back(um); - return false; + FOREACH_MOD(I_OnUserModeAdd, OnUserModeAdd(um)); + + return true; } /** Add a channel mode to Anope @@ -569,25 +570,22 @@ bool ModeManager::AddUserMode(UserMode *um) */ bool ModeManager::AddChannelMode(ChannelMode *cm) { - if (ModeManager::ChannelModesByChar.insert(std::make_pair(cm->ModeChar, cm)).second) - { - if (cm->Name == CMODE_END) - { - cm->Name = static_cast<ChannelModeName>(CMODE_END + ++GenericChannelModes); - Log() << "ModeManager: Added generic support for channel mode " << cm->ModeChar; - } - ModeManager::ChannelModesByName.insert(std::make_pair(cm->Name, cm)); - ModeManager::Modes.insert(std::make_pair(cm->NameAsString, cm)); + if (ModeManager::FindChannelModeByChar(cm->ModeChar) != NULL) + return false; - /* Apply this mode to the new default mlock if its used */ - SetDefaultMLock(Config); + if (cm->Name == CMODE_END) + { + cm->Name = static_cast<ChannelModeName>(CMODE_END + ++GenericChannelModes); + Log() << "ModeManager: Added generic support for channel mode " << cm->ModeChar; + } + ModeManager::ChannelModes.push_back(cm); - FOREACH_MOD(I_OnChannelModeAdd, OnChannelModeAdd(cm)); + /* Apply this mode to the new default mlock if its used */ + SetDefaultMLock(Config); - return true; - } + FOREACH_MOD(I_OnChannelModeAdd, OnChannelModeAdd(cm)); - return false; + return true; } /** Find a channel mode * @param Mode The mode @@ -595,10 +593,12 @@ bool ModeManager::AddChannelMode(ChannelMode *cm) */ ChannelMode *ModeManager::FindChannelModeByChar(char Mode) { - std::map<char, ChannelMode *>::iterator it = ModeManager::ChannelModesByChar.find(Mode); - - if (it != ModeManager::ChannelModesByChar.end()) - return it->second; + for (unsigned i = 0; i < ModeManager::ChannelModes.size(); ++i) + { + ChannelMode *cm = ModeManager::ChannelModes[i]; + if (cm->ModeChar == Mode) + return cm; + } return NULL; } @@ -609,38 +609,28 @@ ChannelMode *ModeManager::FindChannelModeByChar(char Mode) */ UserMode *ModeManager::FindUserModeByChar(char Mode) { - std::map<char, UserMode *>::iterator it = ModeManager::UserModesByChar.find(Mode); - - if (it != ModeManager::UserModesByChar.end()) - return it->second; + for (unsigned i = 0; i < ModeManager::UserModes.size(); ++i) + { + UserMode *um = ModeManager::UserModes[i]; + if (um->ModeChar == Mode) + return um; + } return NULL; } -/** Find a mode by name - * @param name The mode name - * @return The mode - */ -Mode *ModeManager::FindModeByName(const Anope::string &name) -{ - std::map<Anope::string, Mode *>::const_iterator it = ModeManager::Modes.find(name); - - if (it != ModeManager::Modes.end()) - return it->second; - - return NULL; -} - /** Find a channel mode * @param Mode The modename * @return The mode class */ ChannelMode *ModeManager::FindChannelModeByName(ChannelModeName Name) { - std::map<ChannelModeName, ChannelMode *>::iterator it = ModeManager::ChannelModesByName.find(Name); - - if (it != ModeManager::ChannelModesByName.end()) - return it->second; + for (unsigned i = 0; i < ModeManager::ChannelModes.size(); ++i) + { + ChannelMode *cm = ModeManager::ChannelModes[i]; + if (cm->Name == Name) + return cm; + } return NULL; } @@ -651,33 +641,64 @@ ChannelMode *ModeManager::FindChannelModeByName(ChannelModeName Name) */ UserMode *ModeManager::FindUserModeByName(UserModeName Name) { - std::map<UserModeName, UserMode *>::iterator it = ModeManager::UserModesByName.find(Name); + for (unsigned i = 0; i < ModeManager::UserModes.size(); ++i) + { + UserMode *um = ModeManager::UserModes[i]; + if (um->Name == Name) + return um; + } - if (it != ModeManager::UserModesByName.end()) - return it->second; + return NULL; +} + +/** Find channel mode by string + * @param name The mode name + * @return The mode + */ +ChannelMode *ModeManager::FindChannelModeByString(const Anope::string &name) +{ + for (unsigned i = 0; i < ModeManager::ChannelModes.size(); ++i) + { + ChannelMode *cm = ModeManager::ChannelModes[i]; + if (cm->NameAsString() == name || Anope::string(cm->ModeChar) == name) + return cm; + } + + return NULL; +} + +/** Find user mode by string + * @param name The mode name + * @return The mode + */ +UserMode *ModeManager::FindUserModeByString(const Anope::string &name) +{ + for (size_t i = UMODE_BEGIN + 1; i != UMODE_END; ++i) + { + UserMode *um = ModeManager::FindUserModeByName(static_cast<UserModeName>(i)); + if (um != NULL && (um->NameAsString() == name || Anope::string(um->ModeChar) == name)) + return um; + } return NULL; } + /** Gets the channel mode char for a symbol (eg + returns v) * @param Value The symbol * @return The char */ char ModeManager::GetStatusChar(char Value) { - std::map<char, ChannelMode *>::iterator it, it_end; - ChannelMode *cm; - ChannelModeStatus *cms; - - for (it = ModeManager::ChannelModesByChar.begin(), it_end = ModeManager::ChannelModesByChar.end(); it != it_end; ++it) + for (unsigned i = 0; i < ModeManager::ChannelModes.size(); ++i) { - cm = it->second; + ChannelMode *cm = ModeManager::ChannelModes[i]; if (cm->Type == MODE_STATUS) { - cms = debug_cast<ChannelModeStatus *>(cm); + ChannelModeStatus *cms = debug_cast<ChannelModeStatus *>(cm); if (Value == cms->Symbol) - return it->first; + return cms->ModeChar; } } diff --git a/src/regchannel.cpp b/src/regchannel.cpp index e0f0c742c..1da17530f 100644 --- a/src/regchannel.cpp +++ b/src/regchannel.cpp @@ -496,36 +496,29 @@ void ChannelInfo::LoadMLock() { this->ClearMLock(); - std::vector<Anope::string> modenames_on, modenames_off; - // Force +r ChannelMode *chm = ModeManager::FindChannelModeByName(CMODE_REGISTERED); if (chm) this->SetMLock(chm, true); - this->GetExtRegular("db_mlock_modes_on", modenames_on); - this->GetExtRegular("db_mlock_modes_off", modenames_off); - if (!modenames_on.empty() || !modenames_off.empty()) + std::vector<Anope::string> modenames; + if (this->GetExtRegular("db_mlock_modes_on", modenames)) { - for (std::vector<Anope::string>::iterator it = modenames_on.begin(), it_end = modenames_on.end(); it != it_end; ++it) + for (std::vector<Anope::string>::iterator it = modenames.begin(), it_end = modenames.end(); it != it_end; ++it) { - Mode *m = ModeManager::FindModeByName(*it); - - if (m && m->NameAsString.equals_cs(*it)) - { - ChannelMode *cm = debug_cast<ChannelMode *>(m); - this->SetMLock(cm, true); - } + ChannelMode *m = ModeManager::FindChannelModeByString(*it); + if (m) + this->SetMLock(m, true); } - for (std::vector<Anope::string>::iterator it = modenames_off.begin(), it_end = modenames_off.end(); it != it_end; ++it) - { - Mode *m = ModeManager::FindModeByName(*it); + } - if (m && m->NameAsString.equals_cs(*it)) - { - ChannelMode *cm = debug_cast<ChannelMode *>(m); - this->SetMLock(cm, false); - } + if (this->GetExtRegular("db_mlock_modes_off", modenames)) + { + for (std::vector<Anope::string>::iterator it = modenames.begin(), it_end = modenames.end(); it != it_end; ++it) + { + ChannelMode *m = ModeManager::FindChannelModeByString(*it); + if (m) + this->SetMLock(m, false); } } @@ -534,12 +527,9 @@ void ChannelInfo::LoadMLock() { for (std::vector<std::pair<Anope::string, Anope::string> >::iterator it = params.begin(), it_end = params.end(); it != it_end; ++it) { - Mode *m = ModeManager::FindModeByName(it->first); - if (m && m->Class == MC_CHANNEL) - { - ChannelMode *cm = debug_cast<ChannelMode *>(m); - this->SetMLock(cm, true, it->second); - } + ChannelMode *m = ModeManager::FindChannelModeByString(it->first); + if (m) + this->SetMLock(m, true, it->second); } } @@ -547,12 +537,9 @@ void ChannelInfo::LoadMLock() { for (std::vector<std::pair<Anope::string, Anope::string> >::iterator it = params.begin(), it_end = params.end(); it != it_end; ++it) { - Mode *m = ModeManager::FindModeByName(it->first); - if (m && m->Class == MC_CHANNEL) - { - ChannelMode *cm = debug_cast<ChannelMode *>(m); - this->SetMLock(cm, false, it->second); - } + ChannelMode *m = ModeManager::FindChannelModeByString(it->first); + if (m) + this->SetMLock(m, false, it->second); } } |