# HG changeset patch # User Dominic Cleal # Date 1228577385 0 # Node ID c797330cd3710df703796b1d965d797eb072871f # Parent cb6e21f2d514d7d40d7c3c9b23d2f9220e9e1cf3 Handles multiple characters on one account diff -r cb6e21f2d514 -r c797330cd371 skillbot.pl --- a/skillbot.pl Sat Dec 06 15:13:07 2008 +0000 +++ b/skillbot.pl Sat Dec 06 15:29:45 2008 +0000 @@ -32,7 +32,8 @@ # Config variables my %config; -my %friends; +my %frienduids; +my @friends; open(CONFIG, "< skillbot.conf") or die "can't open skillbot.conf for reading: $!"; while() { @@ -345,35 +346,37 @@ chomp; next if (/^#/); - if (/^([^\t]+)\t+([0-9]+)\t+([A-F0-9]{64})\t+([^\t]+)/i) { - my $c = $1; - my $uid = $2; - my $key = uc($3); - my $nick = $4; + if (/^([0-9]+)\s+([a-f0-9]{64})\s+(\S+)(\s+(.+))?/i) { + my $uid = $1; + my $key = uc($2); + my $nick = $3; + my $c = $5; - if (! $friends{$c}) { + if (! $frienduids{$uid}) { my $api = WebService::EveOnline->new( { user_id => $uid, api_key => $key } ); + my $loaded = 0; foreach my $character ($api->characters) { - next if $c ne $character->name; - $friends{$c}->{char} = $character; - last; + next if defined $c && $c ne $character->name; + push @friends, { + char => $character, + api => $api, + nick => $nick + }; + $loaded++; } - unless (defined $friends{$c}->{char}) + if (defined $c && $loaded == 0) { irc_debug("EVE: Unable to find character %s for ID %lu", $c, $uid); next; } - - $friends{$c}->{api} = $api; - irc_debug("EVE: Adding new friend '%s', nick %s", $c, $nick); + irc_debug("EVE: Adding new friend %s (%lu), %lu characters", + $nick, $uid, $loaded); } - - $friends{$c}->{nick} = $nick; } } @@ -390,23 +393,22 @@ { my $self = shift; - foreach my $f (keys %friends) { + foreach my $f (@friends) { # Skip skills training that we've learnt about - next if defined $friends{$f}->{skill}; + next if defined $f->{skill}; - my $skill = $friends{$f}->{char}->skill->in_training; + my $skill = $f->{char}->skill->in_training; # Nothing training next unless $skill; irc_debug("Character %s is training %s (%s)", - $friends{$f}->{char}->name, $skill->name, + $f->{char}->name, $skill->name, $skill->time_remaining); - $friends{$f}->{skill} = $skill; + $f->{skill} = $skill; my $text = sprintf("%s has completed training skill %s %s", - $friends{$f}->{char}->name, - $skill->name, $skill->level); + $f->{char}->name, $skill->name, $skill->level); if ($text =~ /[\n\r]/) { $text =~ s/[\n\r]/ /g; @@ -414,8 +416,8 @@ add_one_shot_timer($skill->finish_time - time(), sub { $self->notice('#' . $config{channel}, sprintf("[%s] %s", - $friends{$f}->{nick}, encode("utf8", $text))); - delete $friends{$f}->{skill}; + $f->{nick}, encode("utf8", $text))); + delete $f->{skill}; }); } }