# HG changeset patch # User Dominic Cleal # Date 1230482337 0 # Node ID c604d8d6ccc53bb534e84322ca8a17028601a04d # Parent c5ce2fff9b8546888b73f2a47c84463e32154dd1 Caching skill info in friend hash, instead of calling the API diff -r c5ce2fff9b85 -r c604d8d6ccc5 skillbot.pl --- a/skillbot.pl Sun Dec 28 12:11:28 2008 +0000 +++ b/skillbot.pl Sun Dec 28 16:38:57 2008 +0000 @@ -225,11 +225,11 @@ my @filtered = sort { (defined $a->{skill} && defined $b->{skill}) - ? $a->{skill}->finish_time <=> $b->{skill}->finish_time + ? $a->{skill_finish} <=> $b->{skill_finish} : 0 } grep { - ((defined $2 && (lc($_->{char}->name) eq lc($2) + ((defined $2 && (lc($_->{char}) eq lc($2) || lc($2) eq 'all' || lc($2) eq '*')) || (!defined $2 && $_->{nick} eq $their_nick)) } @friends; @@ -240,18 +240,17 @@ my $text; if (defined $f->{skill}) { my $downtime = ''; - if (skill_finish_in_downtime($f->{skill})) { + if (skill_finish_in_downtime($f->{skill_finish})) { $downtime = ", coincides with downtime"; } my $finish = DateTime->from_epoch( - epoch => $f->{skill}->finish_time, + epoch => $f->{skill_finish}, time_zone => $f->{tz}); - $text = sprintf("Currently training %s %s ". + $text = sprintf("Currently training %s ". "(finish in %s, %s %s%s)", - $f->{skill}->name, $f->{skill}->level, - $f->{skill}->time_remaining, + $f->{skill_name}, $f->{skill_countdown}, $finish->strftime("%A %R"), $finish->time_zone_short_name(), $downtime); @@ -260,7 +259,7 @@ } $self->privmsg('#' . $config{channel}, sprintf( - "\002%s:\002 %s", $f->{char}->name, + "\002%s:\002 %s", $f->{char}, encode("utf8", $text))); $found++; } @@ -276,12 +275,12 @@ check_training($self); my @training = sort { - $a->{skill}->finish_time <=> $b->{skill}->finish_time + $a->{skill_finish} <=> $b->{skill_finish} } grep { defined $_->{skill} } @friends; for my $f (@training) { $nreply .= sprintf("\002%s\002 (%s) | ", - $f->{char}->name, $f->{skill}->time_remaining); + $f->{char}, $f->{skill_countdown}); } $self->privmsg('#' . $config{channel}, substr($nreply, 0, -3)); @@ -436,7 +435,8 @@ foreach my $character ($api->characters) { next if defined $c && $c ne $character->name; my $f = { - char => $character, + char_api => $character, + char => $character->name, api => $api, nick => $nick, tz => $tz @@ -481,7 +481,7 @@ my $self = shift; my $f = shift; - my $skill = $f->{char}->skill->in_training; + my $skill = $f->{char_api}->skill->in_training; # Nothing training unless (defined $skill) @@ -497,7 +497,7 @@ # Check for changes in the skill, skip or cancel announcement if (defined $f->{skill}) { - return if $skill->id eq $f->{skill}->id; + return if $skill->id eq $f->{skill}; del_one_shot_timer($f->{timer}); delete $f->{timer}; @@ -507,7 +507,7 @@ my $prefinish = $finish - 60; irc_debug("Character %s is training %s %d (%s == %d sec)", - $f->{char}->name, $skill->name, $skill->level, + $f->{char}, $skill->name, $skill->level, $skill->time_remaining, $finish); # Ignore bad data @@ -518,21 +518,23 @@ return; } - $f->{skill} = $skill; + $f->{skill} = $skill->id; + $f->{skill_finish} = $skill->finish_time; + $f->{skill_countdown} = $skill->time_remaining; + $f->{skill_name} = sprintf("%s %d", $skill->name, $skill->level); # Check if the finish time is within scheduled EVE downtime - if (skill_finish_in_downtime($f->{skill})) + if (skill_finish_in_downtime($f->{skill_finish})) { $self->privmsg('#' . $config{channel}, sprintf( - "\002%s:\002 Completion time of %s's %s %lu " . + "\002%s:\002 Completion time of %s's %s " . "skill will coincide with scheduled downtime at %s", - $f->{nick}, $f->{char}->name, - $f->{skill}->name, $f->{skill}->level, - scalar(gmtime($f->{skill}->finish_time)))); + $f->{nick}, $f->{char}, $f->{skill_name}, + scalar(gmtime($f->{skill_finish})))); } - my $text = sprintf("%s has completed training skill %s %s", - $f->{char}->name, $skill->name, $skill->level); + my $text = sprintf("%s has completed training skill %s", + $f->{char}, $f->{skill_name}); if ($text =~ /[\n\r]/) { $text =~ s/[\n\r]/ /g; @@ -551,6 +553,9 @@ "\002%s:\002 %s", $f->{nick}, encode("utf8", $text))); delete $f->{skill}; + delete $f->{skill_finish}; + delete $f->{skill_countdown}; + delete $f->{skill_name}; }); } @@ -565,7 +570,7 @@ my $skill = shift; # Check if the finish time is within 11:00-11:59 (EVE downtime) - return ([gmtime($skill->finish_time)]->[2] == 11); + return ([gmtime($skill)]->[2] == 11); } END {