zoot_list(struct listData *list)
{
struct userData *uData;
- unsigned int start, curr;
+ unsigned int start, curr, highest, lowest;
struct helpfile_table tmp_table;
const char **temp, *msg;
tmp_table.width = list->table.width;
tmp_table.flags = list->table.flags;
list->table.contents[0][0] = " ";
+ highest = list->highest;
+ lowest = (highest < 100) ? 0 : (highest - 100);
for(start = curr = 1; curr < list->table.length; )
{
uData = list->users[curr-1];
list->table.contents[curr++][0] = " ";
- if((curr == list->table.length) || (list->users[curr-1]->access != uData->access))
+ if((curr == list->table.length) || (list->users[curr-1]->access < lowest))
{
if(list->search)
- send_message(list->user, list->bot, "CSMSG_ACCESS_SEARCH_HEADER", list->channel->name, list->lowest, list->highest, list->search);
+ send_message(list->user, list->bot, "CSMSG_ACCESS_SEARCH_HEADER", list->channel->name, lowest, highest, list->search);
else
- send_message(list->user, list->bot, "CSMSG_ACCESS_ALL_HEADER", list->channel->name, list->lowest, list->highest);
+ send_message(list->user, list->bot, "CSMSG_ACCESS_ALL_HEADER", list->channel->name, lowest, highest);
temp = list->table.contents[--start];
list->table.contents[start] = list->table.contents[0];
tmp_table.contents = list->table.contents + start;
table_send(list->bot, list->user->nick, 0, NULL, tmp_table);
list->table.contents[start] = temp;
start = curr;
+ highest = lowest - 1;
+ lowest = (highest < 100) ? 0 : (highest - 99);
}
}
}
value = user_level_from_name(argv[1], UL_OWNER+1);
if(!value && !isdigit(argv[1][0]))
{
- reply("CSMSG_INVALID_ACCESS", index);
+ reply("CSMSG_INVALID_ACCESS", argv[1]);
return 0;
}
uData = GetChannelUser(cData, user->handle_info);
DEFINE_COMMAND(resync, 1, MODCMD_REQUIRE_CHANUSER, "access", "master", NULL);
DEFINE_COMMAND(events, 1, MODCMD_REQUIRE_REGCHAN, "flags", "+nolog", "access", "coowner", NULL);
- DEFINE_COMMAND(addban, 2, MODCMD_REQUIRE_REGCHAN, "access", "master", NULL);
- DEFINE_COMMAND(addtimedban, 3, MODCMD_REQUIRE_REGCHAN, "access", "master", NULL);
- DEFINE_COMMAND(delban, 2, MODCMD_REQUIRE_REGCHAN, "access", "master", NULL);
+ DEFINE_COMMAND(addban, 2, MODCMD_REQUIRE_REGCHAN, "access", "250", NULL);
+ DEFINE_COMMAND(addtimedban, 3, MODCMD_REQUIRE_REGCHAN, "access", "250", NULL);
+ DEFINE_COMMAND(delban, 2, MODCMD_REQUIRE_REGCHAN, "access", "250", NULL);
DEFINE_COMMAND(uset, 1, MODCMD_REQUIRE_CHANUSER, "access", "peon", NULL);
DEFINE_COMMAND(bans, 1, MODCMD_REQUIRE_REGCHAN, "access", "peon", "flags", "+nolog", NULL);
irc_topic => sub {},
irc_error => \&irc_error,
irc_disconnected => \&irc_disconnected,
+ irc_socketerr => \&irc_socketerr,
},
args => [@ARGV]);
}
}
+sub irc_socketerr {
+ my ($kernel, $session, $heap, $sender, $msg) = @_[KERNEL, SESSION, HEAP, SENDER, ARG0];
+ my $client = $heap->{sessions}->{$sender};
+ print "Client $client->{name} (re-)connect error: $_[ARG0]\n";
+ if ($client->{quitting}) {
+ $kernel->call($sender, 'unregister', 'all');
+ delete $heap->{sessions}->{$sender};
+ delete $heap->{clients}->{$client->{name}};
+ } else {
+ if ($client->{disconnect_expected}) {
+ delete $client->{disconnect_expected};
+ } else {
+ print "Got unexpected disconnect for $client->{name} (nick $client->{nick})\n";
+ }
+ $kernel->call($session, 'disable_client', $client);
+ $kernel->delay_set('reconnect', $client->{throttled} ? THROTTLED_TIMEOUT : RECONNECT_TIMEOUT, $client);
+ delete $client->{throttled};
+ }
+}
+
sub irc_notice {
my ($kernel, $session, $heap, $sender, $from, $to, $text) = @_[KERNEL, SESSION, HEAP, SENDER, ARG0, ARG1, ARG2];
my $client = $heap->{sessions}->{$sender};