diff options
author | Adam <Adam@anope.org> | 2011-08-19 04:18:13 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2011-09-10 01:52:59 -0400 |
commit | 4fcb371bc8813cd647b7769a64d586e3a57d684d (patch) | |
tree | 836584fe2392b5ea21115111dbd470dbf04ce47b /modules/protocol/inspircd11.cpp | |
parent | 6401d93b8e0ec5b6f68bd507dffa360b4d60d335 (diff) |
Track what "level" channel status modes are, which allows us to have chanserv/mode determine if a status mode can be set by users better
Diffstat (limited to 'modules/protocol/inspircd11.cpp')
-rw-r--r-- | modules/protocol/inspircd11.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/modules/protocol/inspircd11.cpp b/modules/protocol/inspircd11.cpp index a5f8e1d86..2a1b4e435 100644 --- a/modules/protocol/inspircd11.cpp +++ b/modules/protocol/inspircd11.cpp @@ -524,26 +524,29 @@ class InspircdIRCdMessage : public IRCdMessage { Anope::string modes(capab.begin() + 8, capab.begin() + capab.find(')')); Anope::string chars(capab.begin() + capab.find(')') + 1, capab.end()); + unsigned short level = modes.length() - 1; for (size_t t = 0, end = modes.length(); t < end; ++t) { switch (modes[t]) { case 'q': - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OWNER, 'q', '~')); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OWNER, 'q', '~', level--)); continue; case 'a': - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_PROTECT, 'a', '&')); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_PROTECT, 'a', '&', level--)); continue; case 'o': - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OP, 'o', '@')); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OP, 'o', '@', level--)); continue; case 'h': - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_HALFOP, 'h', '%')); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_HALFOP, 'h', '%', level--)); continue; case 'v': - ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_VOICE, 'v', '+')); + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_VOICE, 'v', '+', level--)); continue; + default: + ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_END, modes[t], chars[t], level--)); } } } |