/* Access information */
{ "CSMSG_IS_CHANSERV", "$b$C$b is the $bchannel service bot$b." },
- { "CSMSG_ACCESS_SELF_ONLY", "You may only see the list of infolines for yourself (by using $b%s$b with no arguments)." },
- { "CSMSG_SQUAT_ACCESS", "You do not have access to any channels." },
+ { "CSMSG_MYACCESS_SELF_ONLY", "You may only see the list of infolines for yourself (by using $b%s$b with no arguments)." },
+ { "CSMSG_SQUAT_ACCESS", "$b%s$b does not have access to any channels." },
{ "CSMSG_INFOLINE_LIST", "Showing all channel entries for account $b%s$b:" },
{ "CSMSG_USER_NO_ACCESS", "%s lacks access to %s." },
{ "CSMSG_USER_HAS_ACCESS", "%s has access $b%d$b in %s." },
if(!(target = GetChannel(argv[1])))
{
target = AddChannel(argv[1], now, NULL, NULL);
- LockChannel(target);
if(!IsSuspended(channel->channel_info))
AddChannelUser(chanserv, target);
}
DelChannelUser(chanserv, channel, reason2, 0);
}
UnlockChannel(channel);
+ LockChannel(target);
global_message(MESSAGE_RECIPIENT_OPERS | MESSAGE_RECIPIENT_HELPERS, reason);
return 1;
}
free(bData->reason);
bData->reason = strdup(reason);
safestrncpy(bData->owner, (user->handle_info ? user->handle_info->handle : user->nick), sizeof(bData->owner));
- reply("CSMSG_REASON_CHANGE", ban);
+ if(cmd)
+ reply("CSMSG_REASON_CHANGE", ban);
if(!bData->expires)
goto post_add_ban;
}
if(bData->expires)
timeq_add(bData->expires, expire_ban, bData);
- if(duration)
+ if(!cmd)
+ {
+ /* automated kickban */
+ }
+ else if(duration)
reply("CSMSG_BAN_EXTENDED", ban, intervalString(interval, duration));
else
reply("CSMSG_BAN_ADDED", name, channel->name);
goto post_add_ban;
}
}
- reply("CSMSG_REDUNDANT_BAN", name, channel->name);
+ if(cmd)
+ reply("CSMSG_REDUNDANT_BAN", name, channel->name);
free(ban);
return 0;
if(channel->banlist.used >= MAXBANS)
{
- reply("CSMSG_BANLIST_FULL", channel->name);
+ if(cmd)
+ reply("CSMSG_BANLIST_FULL", channel->name);
free(ban);
return 0;
}
if(exists && (action == ACTION_BAN))
{
- reply("CSMSG_REDUNDANT_BAN", name, channel->name);
+ if(cmd)
+ reply("CSMSG_REDUNDANT_BAN", name, channel->name);
free(ban);
return 0;
}
return 1;
}
-static CHANSERV_FUNC(cmd_access)
+static CHANSERV_FUNC(cmd_myaccess)
{
- struct userNode *target;
struct handle_info *target_handle;
struct userData *uData;
- int helping;
- char prefix[MAXLEN];
+ const char *chanName;
- if(!channel)
+ if(argc < 2)
+ target_handle = user->handle_info;
+ else if(!IsHelping(user))
{
- struct userData *uData;
- const char *chanName;
- int hide = 0;
+ reply("CSMSG_MYACCESS_SELF_ONLY", argv[0]);
+ return 0;
+ }
+ else if(!(target_handle = modcmd_get_handle_info(user, argv[1])))
+ return 0;
- target_handle = user->handle_info;
- if(!target_handle)
- {
- reply("MSG_AUTHENTICATE");
- return 0;
- }
- if(argc > 1)
- {
- if(!IsHelping(user))
- {
- reply("CSMSG_ACCESS_SELF_ONLY", argv[0]);
- return 0;
- }
+ if(!target_handle->channels)
+ {
+ reply("CSMSG_SQUAT_ACCESS", target_handle->handle);
+ return 1;
+ }
- if(!(target_handle = modcmd_get_handle_info(user, argv[1])))
- return 0;
- hide = 1;
- }
- if(!target_handle->channels)
- {
- reply("CSMSG_SQUAT_ACCESS");
- return 1;
- }
- reply("CSMSG_INFOLINE_LIST", target_handle->handle);
- for(uData = target_handle->channels; uData; uData = uData->u_next)
- {
- struct chanData *cData = uData->channel;
+ reply("CSMSG_INFOLINE_LIST", target_handle->handle);
+ for(uData = target_handle->channels; uData; uData = uData->u_next)
+ {
+ struct chanData *cData = uData->channel;
- if(uData->access > UL_OWNER)
- continue;
- if(IsProtected(cData) && hide && !GetTrueChannelAccess(cData, user->handle_info))
- continue;
- chanName = cData->channel->name;
- if(uData->info)
- send_message_type(4, user, cmd->parent->bot, "[%s (%d)] %s", chanName, uData->access, uData->info);
- else
- send_message_type(4, user, cmd->parent->bot, "[%s (%d)]", chanName, uData->access);
- }
- return 1;
+ if(uData->access > UL_OWNER)
+ continue;
+ if(IsProtected(cData)
+ && (target_handle != user->handle_info)
+ && !GetTrueChannelAccess(cData, user->handle_info))
+ continue;
+ chanName = cData->channel->name;
+ if(uData->info)
+ send_message_type(4, user, cmd->parent->bot, "[%s (%d)] %s", chanName, uData->access, uData->info);
+ else
+ send_message_type(4, user, cmd->parent->bot, "[%s (%d)]", chanName, uData->access);
}
+ return 1;
+}
+
+static CHANSERV_FUNC(cmd_access)
+{
+ struct userNode *target;
+ struct handle_info *target_handle;
+ struct userData *uData;
+ int helping;
+ char prefix[MAXLEN];
+
if(argc < 2)
{
target = user;
change.args[0].mode = MODE_CHANOP;
else if(channel->access >= cn->channel_info->lvlOpts[lvlGiveVoice])
change.args[0].mode = MODE_VOICE;
+ else
+ change.args[0].mode = 0;
change.args[0].member = mn;
- mod_chanmode_announce(chanserv, cn, &change);
+ if(change.args[0].mode)
+ mod_chanmode_announce(chanserv, cn, &change);
}
channel->seen = now;
DEFINE_COMMAND(bans, 1, MODCMD_REQUIRE_REGCHAN, "access", "1", "flags", "+nolog", NULL);
DEFINE_COMMAND(peek, 1, MODCMD_REQUIRE_REGCHAN, "access", "op", "flags", "+nolog", NULL);
- DEFINE_COMMAND(access, 1, 0, "flags", "+nolog,+acceptchan", NULL);
+ DEFINE_COMMAND(myaccess, 1, MODCMD_REQUIRE_AUTHED, NULL);
+ DEFINE_COMMAND(access, 1, MODCMD_REQUIRE_REGCHAN, "flags", "+nolog,+joinable", NULL);
DEFINE_COMMAND(users, 1, MODCMD_REQUIRE_REGCHAN, "flags", "+nolog,+joinable", NULL);
DEFINE_COMMAND(wlist, 1, MODCMD_REQUIRE_REGCHAN, "flags", "+nolog,+joinable", NULL);
DEFINE_COMMAND(clist, 1, MODCMD_REQUIRE_REGCHAN, "flags", "+nolog,+joinable", NULL);