]>
Commit | Line | Data |
---|---|---|
1 | # HG changeset patch | |
2 | # Parent aaa3a5dc576b78c7da4518c794f81a738fb0edd0 | |
3 | ||
4 | diff -r aaa3a5dc576b ircd/channel.c | |
5 | --- a/ircd/channel.c Wed Jul 17 21:18:06 2013 +0100 | |
6 | +++ b/ircd/channel.c Wed Jul 17 21:20:09 2013 +0100 | |
7 | @@ -691,6 +691,13 @@ | |
8 | RevealDelayedJoin(member); | |
9 | return 1; | |
10 | } | |
11 | + | |
12 | + /* +X user can always speak on the channel */ | |
13 | + if (IsXtraOp(member->user)) { | |
14 | + if (IsDelayedJoin(member) && reveal) | |
15 | + RevealDelayedJoin(member); | |
16 | + return 1; | |
17 | + } | |
18 | ||
19 | /* Discourage using the Apass to get op. They should use the Upass. */ | |
20 | if (IsChannelManager(member) && member->channel->mode.apass[0]) | |
21 | @@ -743,7 +750,7 @@ | |
22 | /* | |
23 | * Servers can always speak on channels. | |
24 | */ | |
25 | - if (IsServer(cptr) || IsXtraOp(cptr)) | |
26 | + if (IsServer(cptr)) | |
27 | return 1; | |
28 | ||
29 | member = find_channel_member(cptr, chptr); | |
30 | @@ -753,7 +760,9 @@ | |
31 | * or +m (moderated). | |
32 | */ | |
33 | if (!member) { | |
34 | - if ((chptr->mode.mode & (MODE_NOPRIVMSGS|MODE_MODERATED)) || | |
35 | + if (IsXtraOp(cptr)) | |
36 | + return 1; | |
37 | + else if ((chptr->mode.mode & (MODE_NOPRIVMSGS|MODE_MODERATED)) || | |
38 | ((chptr->mode.mode & (MODE_REGONLY|MODE_MODERATENOREG)) && !IsAccount(cptr))) | |
39 | return 0; | |
40 | else |