|
|
@@ -678,7 +678,7 @@ got_deop(struct chanset_t *chan, memberlist *m, memberlist *mv, char *isserver)
|
|
|
*/
|
|
|
(reversing && (!chan_bitch(chan) || chk_op(victim, chan))) ||
|
|
|
/* Reop bots to avoid them needing to ask */
|
|
|
- (role == 3 && mv->user && mv->user->bot && chk_op(victim, chan))
|
|
|
+ ((chan->role & ROLE_PROTECT) && mv->user && mv->user->bot && chk_op(victim, chan))
|
|
|
)
|
|
|
) {
|
|
|
/* Then we'll bless the victim */
|
|
|
@@ -716,7 +716,7 @@ got_deop(struct chanset_t *chan, memberlist *m, memberlist *mv, char *isserver)
|
|
|
} else {
|
|
|
// Revenge kick clients that deop our bots
|
|
|
if (chan->revenge && m && m != mv && mv->user && mv->user->bot && !(m->user && m->user->bot)) {
|
|
|
- if (role < 5 && !chan_sentkick(m) && me_op(chan)) {
|
|
|
+ if ((chan->role & ROLE_REVENGE) && !chan_sentkick(m) && me_op(chan)) {
|
|
|
m->flags |= SENTKICK;
|
|
|
dprintf(DP_MODE_NEXT, "KICK %s %s :%s%s\r\n", chan->name, m->nick, kickprefix, response(RES_REVENGE));
|
|
|
} else {
|
|
|
@@ -763,7 +763,7 @@ got_ban(struct chanset_t *chan, memberlist *m, char *mask, char *isserver)
|
|
|
|
|
|
// Revenge kick clients that ban our bots
|
|
|
if (chan->revenge && m && matched_bot && !(m->user && m->user->bot)) {
|
|
|
- if (role < 5 && !chan_sentkick(m)) {
|
|
|
+ if ((chan->role & ROLE_REVENGE) && !chan_sentkick(m)) {
|
|
|
m->flags |= SENTKICK;
|
|
|
dprintf(DP_MODE_NEXT, "KICK %s %s :%s%s\r\n", chan->name, m->nick, kickprefix, response(RES_REVENGE));
|
|
|
} else {
|
|
|
@@ -1137,10 +1137,10 @@ gotmode(char *from, char *msg)
|
|
|
if (me_op(chan)) {
|
|
|
char tmp[1024] = "";
|
|
|
|
|
|
- if (!isserver[0] && role && (!u || (u && !u->bot))) {
|
|
|
+ if (!isserver[0] && chan->role && (!u || (u && !u->bot))) {
|
|
|
if (m && deops >= 3) {
|
|
|
if (chan->mdop) {
|
|
|
- if (role < 5 && !chan_sentkick(m)) {
|
|
|
+ if ((chan->role & ROLE_PROTECT) && !chan_sentkick(m)) {
|
|
|
m->flags |= SENTKICK;
|
|
|
const size_t len = simple_snprintf(tmp, sizeof(tmp), "KICK %s %s :%s%s\r\n", chan->name, m->nick, kickprefix, response(RES_MASSDEOP));
|
|
|
dprintf_real(DP_MODE_NEXT, tmp, len, sizeof(tmp));
|
|
|
@@ -1160,7 +1160,7 @@ gotmode(char *from, char *msg)
|
|
|
if (ops >= 3) {
|
|
|
if (chan->mop) {
|
|
|
if (m && !chan_sentkick(m)) {
|
|
|
- if (role < 5) {
|
|
|
+ if ((chan->role & ROLE_PROTECT)) {
|
|
|
m->flags |= SENTKICK;
|
|
|
const size_t len = simple_snprintf(tmp, sizeof(tmp), "KICK %s %s :%s%s\r\n", chan->name, m->nick, kickprefix, response(RES_MANUALOP));
|
|
|
dprintf_real(DP_MODE_NEXT, tmp, len, sizeof(tmp));
|
|
|
@@ -1182,7 +1182,6 @@ gotmode(char *from, char *msg)
|
|
|
}
|
|
|
}
|
|
|
if (ops) {
|
|
|
- int n = 0;
|
|
|
/* Check cookies */
|
|
|
if (u && m && u->bot && !channel_fastop(chan) && !channel_take(chan) && !cookies_disabled) {
|
|
|
int isbadop = 0;
|
|
|
@@ -1259,48 +1258,32 @@ gotmode(char *from, char *msg)
|
|
|
}
|
|
|
|
|
|
/* manop */
|
|
|
- if (chan->manop && u && !u->bot) {
|
|
|
- n = i = 0;
|
|
|
-
|
|
|
- switch (role) {
|
|
|
- case 0:
|
|
|
- break;
|
|
|
- case 1:
|
|
|
- if (m) {
|
|
|
- /* Kick opper */
|
|
|
- if (!chan_sentkick(m)) {
|
|
|
- const size_t len = simple_snprintf(tmp, sizeof(tmp), "KICK %s %s :%s%s\r\n", chan->name, m->nick, kickprefix, response(RES_MANUALOP));
|
|
|
- dprintf_real(DP_MODE_NEXT, tmp, len, sizeof(tmp));
|
|
|
- m->flags |= SENTKICK;
|
|
|
- }
|
|
|
- simple_snprintf(tmp, sizeof(tmp), "%s MODE %s %s", m->from, chan->dname, modes[modecnt - 1]);
|
|
|
- deflag_user(u, DEFLAG_EVENT_MANUALOP, tmp, chan);
|
|
|
- }
|
|
|
- break;
|
|
|
- default:
|
|
|
- /* KICK the opped */
|
|
|
- n = role - 1;
|
|
|
- i = 0;
|
|
|
- while ((i < modecnt) && (n > 0)) {
|
|
|
- if (modes[i] && !strncmp(modes[i], "+o", 2))
|
|
|
- n--;
|
|
|
- if (n)
|
|
|
- i++;
|
|
|
- }
|
|
|
- if (!n) {
|
|
|
- for (i = 0; i < modecnt; i++) {
|
|
|
- if (msign == '+' && mmode == 'o' && !match_my_nick(mparam)) {
|
|
|
- mv = ismember(chan, mparam);
|
|
|
- if (!mv || !chan_sentkick(mv)) {
|
|
|
- if (mv)
|
|
|
- mv->flags |= SENTKICK;
|
|
|
- const size_t len = simple_snprintf(tmp, sizeof(tmp), "KICK %s %s :%s%s\r\n", chan->name, mparam, kickprefix, response(RES_MANUALOPPED));
|
|
|
- dprintf_real(DP_MODE_NEXT, tmp, len, sizeof(tmp));
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ if (chan->manop && u && !u->bot) {
|
|
|
+
|
|
|
+ if (m && (chan->role & ROLE_PROTECT)) {
|
|
|
+ /* Kick opper */
|
|
|
+ if (!chan_sentkick(m)) {
|
|
|
+ const size_t len = simple_snprintf(tmp, sizeof(tmp), "KICK %s %s :%s%s\r\n", chan->name, m->nick, kickprefix, response(RES_MANUALOP));
|
|
|
+ dprintf_real(DP_MODE_NEXT, tmp, len, sizeof(tmp));
|
|
|
+ m->flags |= SENTKICK;
|
|
|
+ }
|
|
|
+ simple_snprintf(tmp, sizeof(tmp), "%s MODE %s %s", m->from, chan->dname, modes[modecnt - 1]);
|
|
|
+ deflag_user(u, DEFLAG_EVENT_MANUALOP, tmp, chan);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (chan->role & ROLE_KICK) {
|
|
|
+ for (i = 0; i < modecnt; i++) {
|
|
|
+ if (msign == '+' && mmode == 'o' && !match_my_nick(mparam)) {
|
|
|
+ mv = ismember(chan, mparam);
|
|
|
+ if (!mv || !chan_sentkick(mv)) {
|
|
|
+ if (mv)
|
|
|
+ mv->flags |= SENTKICK;
|
|
|
+ const size_t len = simple_snprintf(tmp, sizeof(tmp), "KICK %s %s :%s%s\r\n", chan->name, mparam, kickprefix, response(RES_MANUALOPPED));
|
|
|
+ dprintf_real(DP_MODE_NEXT, tmp, len, sizeof(tmp));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|