aboutsummaryrefslogtreecommitdiffstats
path: root/irc_send.c
diff options
context:
space:
mode:
authorMarius Halden <marius.h@lden.org>2015-11-06 20:04:39 +0100
committerMarius Halden <marius.h@lden.org>2015-11-06 20:07:04 +0100
commitff37678cc076af9590f0e9ef427445f3b3bfa65f (patch)
tree9d23fc3566210f25b73ad71d087fe3185827c021 /irc_send.c
parent2f99f232386d32d6c6c3d85484ac35b771911997 (diff)
Add support for owner and admin modes
Diffstat (limited to 'irc_send.c')
-rw-r--r--irc_send.c28
1 files changed, 24 insertions, 4 deletions
diff --git a/irc_send.c b/irc_send.c
index 3da725a4..529118ad 100644
--- a/irc_send.c
+++ b/irc_send.c
@@ -44,7 +44,7 @@ void irc_send_login(irc_t *irc)
PACKAGE, BITLBEE_VERSION, ARCH, CPU);
irc_send_num(irc, 3, ":%s", IRCD_INFO);
irc_send_num(irc, 4, "%s %s %s %s", irc->root->host, BITLBEE_VERSION, UMODES UMODES_PRIV, CMODES);
- irc_send_num(irc, 5, "PREFIX=(ohv)@%%+ CHANTYPES=%s CHANMODES=,,,%s NICKLEN=%d CHANNELLEN=%d "
+ irc_send_num(irc, 5, "PREFIX=(ohv)~&@%%+ CHANTYPES=%s CHANMODES=,,,%s NICKLEN=%d CHANNELLEN=%d "
"NETWORK=BitlBee SAFELIST CASEMAPPING=rfc1459 MAXTARGETS=1 WATCH=128 "
"FLOOD=0/9999 :are supported by this server",
CTYPES, CMODES, MAX_NICK_LENGTH - 1, MAX_NICK_LENGTH - 1);
@@ -213,7 +213,11 @@ void irc_send_names(irc_channel_t *ic)
*namelist = 0;
}
- if (icu->flags & IRC_CHANNEL_USER_OP) {
+ if (icu->flags & IRC_CHANNEL_USER_OWNER) {
+ strcat(namelist, "~");
+ } else if (icu->flags & IRC_CHANNEL_USER_ADMIN) {
+ strcat(namelist, "&");
+ } else if (icu->flags & IRC_CHANNEL_USER_OP) {
strcat(namelist, "@");
} else if (icu->flags & IRC_CHANNEL_USER_HALFOP) {
strcat(namelist, "%");
@@ -373,11 +377,27 @@ void irc_send_nick(irc_user_t *iu, const char *new)
void irc_send_channel_user_mode_diff(irc_channel_t *ic, irc_user_t *iu,
irc_channel_user_flags_t old, irc_channel_user_flags_t new)
{
- char changes[3 * (5 + strlen(iu->nick))];
- char from[strlen(ic->irc->root->nick) + strlen(ic->irc->root->user) + strlen(ic->irc->root->host) + 3];
+ char changes[5 * (5 + strlen(iu->nick))];
+ char from[strlen(ic->irc->root->nick) + strlen(ic->irc->root->user) + strlen(ic->irc->root->host) + 5];
int n;
*changes = '\0'; n = 0;
+ if ((old & IRC_CHANNEL_USER_OWNER) != (new & IRC_CHANNEL_USER_OWNER)) {
+ n++;
+ if (new & IRC_CHANNEL_USER_OWNER) {
+ strcat(changes, "+q");
+ } else {
+ strcat(changes, "-q");
+ }
+ }
+ if ((old & IRC_CHANNEL_USER_ADMIN) != (new & IRC_CHANNEL_USER_ADMIN)) {
+ n++;
+ if (new & IRC_CHANNEL_USER_ADMIN) {
+ strcat(changes, "+a");
+ } else {
+ strcat(changes, "-a");
+ }
+ }
if ((old & IRC_CHANNEL_USER_OP) != (new & IRC_CHANNEL_USER_OP)) {
n++;
if (new & IRC_CHANNEL_USER_OP) {