diff options
author | geniusdex geniusdex@31f1291d-b8d6-0310-a050-a5561fc1590b <geniusdex geniusdex@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864> | 2005-03-16 20:19:14 +0000 |
---|---|---|
committer | geniusdex geniusdex@31f1291d-b8d6-0310-a050-a5561fc1590b <geniusdex geniusdex@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864> | 2005-03-16 20:19:14 +0000 |
commit | 1fec2a9abdd824a41ab1b975bd95829cb44a7d0e (patch) | |
tree | db5bb5fb6cff83414019e8bba516079e071b145d /src | |
parent | 89e28df398669012ce7cf99e90670a20af6bbc62 (diff) |
BUILD : 1.7.8 (631) BUGS : 320 NOTES : Fixed an error in the big if/else if thing when setting the modes on SJOIN, should now give correct modes
git-svn-id: svn://svn.anope.org/anope/trunk@631 31f1291d-b8d6-0310-a050-a5561fc1590b
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@479 5417fbe8-f217-4b02-8779-1006273d7864
Diffstat (limited to 'src')
-rw-r--r-- | src/channels.c | 84 | ||||
-rw-r--r-- | src/chanserv.c | 3 |
2 files changed, 62 insertions, 25 deletions
diff --git a/src/channels.c b/src/channels.c index 529073ec2..24f2f639e 100644 --- a/src/channels.c +++ b/src/channels.c @@ -1217,35 +1217,73 @@ void add_invite(Channel * chan, char *mask) void chan_set_correct_modes(User * user, Channel * c) { - char *chan; + char *tmp; int status; + ChannelInfo *ci; - chan = c->name; + ci = c->ci; - if (get_ignore(user->nick) == NULL) { - status = chan_get_user_status(c, user); - /* This looks dirty. For every mode we first check if the IRCd - * supports it. If true, we check if the user already has the - * mode. If both are true, we check if they should get the mode, - * which sends the mode to the uplink and returns true. If the - * mode is sent, we internally update to finish it off. -GD - */ - if (ircd->owner && !(status & CUS_OWNER) - && check_should_owner(user, chan)) - chan_set_user_status(c, user, CUS_OWNER | CUS_OP); - else if (ircd->protect && !(status & CUS_PROTECT) - && check_should_protect(user, chan)) - chan_set_user_status(c, user, CUS_PROTECT | CUS_OP); - else if (ircd->admin && !(status & CUS_PROTECT) - && check_should_protect(user, chan)) - chan_set_user_status(c, user, CUS_PROTECT | CUS_OP); - else if (!(status & CUS_OP) && check_should_op(user, chan)) + if (!ci || (ci->flags & CI_VERBOTEN) || (*(c->name) == '+')) + return; + + if ((ci->flags & CI_SECURE) && !nick_identified(user)) + return; + + if (get_ignore(user->nick) != NULL) + return; + + status = chan_get_user_status(c, user); + if (ircd->owner + && (((ci->flags & CI_SECUREFOUNDER) && is_real_founder(user, ci)) + || (!(ci->flags & CI_SECUREFOUNDER) + && is_founder(user, ci)))) { + if (!(status & CUS_OWNER)) { + tmp = stripModePrefix(ircd->ownerset); + if (!(status & CUS_OP)) { + anope_cmd_mode(whosends(ci), c->name, "+o%s %s %s", tmp, + user->nick, user->nick); + chan_set_user_status(c, user, CUS_OWNER | CUS_OP); + } else { + anope_cmd_mode(whosends(ci), c->name, "+%s %s", tmp, + user->nick); + chan_set_user_status(c, user, CUS_OWNER); + } + } else if (!(status & CUS_OP)) { + anope_cmd_mode(whosends(ci), c->name, "+o %s", user->nick); + chan_set_user_status(c, user, CUS_OP); + } + } else if ((ircd->protect || ircd->admin) + && check_access(user, ci, CA_AUTOPROTECT)) { + tmp = stripModePrefix(ircd->adminset); + if (!(status & CUS_PROTECT)) { + if (!(status & CUS_OP)) { + anope_cmd_mode(whosends(ci), c->name, "+o%s %s %s", tmp, + user->nick, user->nick); + chan_set_user_status(c, user, CUS_PROTECT | CUS_OP); + } else { + anope_cmd_mode(whosends(ci), c->name, "+%s %s", tmp, + user->nick); + chan_set_user_status(c, user, CUS_PROTECT); + } + } else if (!(status & CUS_OP)) { + anope_cmd_mode(whosends(ci), c->name, "+o %s", user->nick); chan_set_user_status(c, user, CUS_OP); - else if (ircd->halfop && !(status & CUS_HALFOP) - && check_should_halfop(user, chan)) + } + } else if (check_access(user, ci, CA_AUTOOP)) { + if (!(status & CUS_OP)) { + anope_cmd_mode(whosends(ci), c->name, "+o %s", user->nick); + chan_set_user_status(c, user, CUS_OP); + } + } else if (ircd->halfop && check_access(user, ci, CA_AUTOHALFOP)) { + if (!(status & CUS_HALFOP)) { + anope_cmd_mode(whosends(ci), c->name, "+h %s", user->nick); chan_set_user_status(c, user, CUS_HALFOP); - else if (!(status & CUS_VOICE) && check_should_voice(user, chan)) + } + } else if (check_access(user, ci, CA_AUTOVOICE)) { + if (!(status & CUS_VOICE)) { + anope_cmd_mode(whosends(ci), c->name, "+v %s", user->nick); chan_set_user_status(c, user, CUS_VOICE); + } } } diff --git a/src/chanserv.c b/src/chanserv.c index 9d0fed4a3..26c3a0afe 100644 --- a/src/chanserv.c +++ b/src/chanserv.c @@ -186,7 +186,6 @@ void alpha_insert_chan(ChannelInfo * ci); static ChannelInfo *makechan(const char *chan); int delchan(ChannelInfo * ci); void reset_levels(ChannelInfo * ci); -static int is_real_founder(User * user, ChannelInfo * ci); static int is_identified(User * user, ChannelInfo * ci); static void make_unidentified(User * u, ChannelInfo * ci); @@ -2304,7 +2303,7 @@ int is_founder(User * user, ChannelInfo * ci) /*************************************************************************/ -static int is_real_founder(User * user, ChannelInfo * ci) +int is_real_founder(User * user, ChannelInfo * ci) { if (user->isSuperAdmin) { return 1; |