Mercurial > hg > skillbot
comparison skillbot.pl @ 59:74213ea642da
Countdown text is now dynamic using the finish timestamp
author | Dominic Cleal <dominic@computerkb.co.uk> |
---|---|
date | Sun, 28 Dec 2008 18:57:40 +0000 |
parents | 7d43407a9214 |
children | 69d7a89d3adc |
comparison
equal
deleted
inserted
replaced
58:7d43407a9214 | 59:74213ea642da |
---|---|
248 epoch => $f->{skill_finish}, | 248 epoch => $f->{skill_finish}, |
249 time_zone => $f->{tz}); | 249 time_zone => $f->{tz}); |
250 | 250 |
251 $text = sprintf("Currently training %s ". | 251 $text = sprintf("Currently training %s ". |
252 "(finish in %s, %s %s%s)", | 252 "(finish in %s, %s %s%s)", |
253 $f->{skill_name}, $f->{skill_countdown}, | 253 $f->{skill_name}, |
254 countdown($f->{skill_finish}), | |
254 $finish->strftime("%A %R"), | 255 $finish->strftime("%A %R"), |
255 $finish->time_zone_short_name(), | 256 $finish->time_zone_short_name(), |
256 $downtime); | 257 $downtime); |
257 } else { | 258 } else { |
258 $text = "No skill currently training"; | 259 $text = "No skill currently training"; |
278 $a->{skill_finish} <=> $b->{skill_finish} | 279 $a->{skill_finish} <=> $b->{skill_finish} |
279 } grep { defined $_->{skill} } @friends; | 280 } grep { defined $_->{skill} } @friends; |
280 | 281 |
281 for my $f (@training) { | 282 for my $f (@training) { |
282 $nreply .= sprintf("\002%s\002 (%s) | ", | 283 $nreply .= sprintf("\002%s\002 (%s) | ", |
283 $f->{char}, $f->{skill_countdown}); | 284 $f->{char}, countdown($f->{skill_finish})); |
284 } | 285 } |
285 | 286 |
286 $self->privmsg('#' . $config{channel}, substr($nreply, 0, -3)); | 287 $self->privmsg('#' . $config{channel}, substr($nreply, 0, -3)); |
287 } | 288 } |
288 } | 289 } |
502 if (defined $f->{skill}) { | 503 if (defined $f->{skill}) { |
503 # If the skill's the same, update the times | 504 # If the skill's the same, update the times |
504 if ($skill->id eq $f->{skill}) | 505 if ($skill->id eq $f->{skill}) |
505 { | 506 { |
506 $f->{skill_finish} = $skill->finish_time; | 507 $f->{skill_finish} = $skill->finish_time; |
507 $f->{skill_countdown} = $skill->time_remaining; | |
508 return; | 508 return; |
509 } | 509 } |
510 | 510 |
511 # Skill has changed, delet previous announcement | 511 # Skill has changed, delet previous announcement |
512 del_one_shot_timer($f->{timer}); | 512 del_one_shot_timer($f->{timer}); |
528 return; | 528 return; |
529 } | 529 } |
530 | 530 |
531 $f->{skill} = $skill->id; | 531 $f->{skill} = $skill->id; |
532 $f->{skill_finish} = $skill->finish_time; | 532 $f->{skill_finish} = $skill->finish_time; |
533 $f->{skill_countdown} = $skill->time_remaining; | |
534 $f->{skill_name} = sprintf("%s %d", $skill->name, $skill->level); | 533 $f->{skill_name} = sprintf("%s %d", $skill->name, $skill->level); |
535 | 534 |
536 # Check if the finish time is within scheduled EVE downtime | 535 # Check if the finish time is within scheduled EVE downtime |
537 if (timestamp_in_downtime($f->{skill_finish})) | 536 if (timestamp_in_downtime($f->{skill_finish})) |
538 { | 537 { |
562 $self->privmsg('#' . $config{channel}, sprintf( | 561 $self->privmsg('#' . $config{channel}, sprintf( |
563 "\002%s:\002 %s", $f->{nick}, | 562 "\002%s:\002 %s", $f->{nick}, |
564 encode("utf8", $text))); | 563 encode("utf8", $text))); |
565 delete $f->{skill}; | 564 delete $f->{skill}; |
566 delete $f->{skill_finish}; | 565 delete $f->{skill_finish}; |
567 delete $f->{skill_countdown}; | |
568 delete $f->{skill_name}; | 566 delete $f->{skill_name}; |
569 }); | 567 }); |
570 } | 568 } |
571 | 569 |
572 =pod | 570 =pod |
581 | 579 |
582 # Check if the finish time is within 11:00-11:59 (EVE downtime) | 580 # Check if the finish time is within 11:00-11:59 (EVE downtime) |
583 return ([gmtime($ts)]->[2] == 11); | 581 return ([gmtime($ts)]->[2] == 11); |
584 } | 582 } |
585 | 583 |
584 =pod | |
585 | |
586 Translate a timestamp to a countdown in terms of days, hours, minutes and | |
587 seconds, EVE style. | |
588 | |
589 =cut | |
590 sub countdown | |
591 { | |
592 my $ts = shift; | |
593 | |
594 my $tshift = sub { | |
595 my ($a, $b, $max) = @_; | |
596 if ($$a >= $max) { | |
597 $$b = floor($$a / $max); | |
598 $$a = $$a % $max; | |
599 } | |
600 }; | |
601 | |
602 my ($s, $m, $h, $d) = ($ts - time, 0, 0, 0); | |
603 &$tshift(\$s, \$m, 60); | |
604 &$tshift(\$m, \$h, 60); | |
605 &$tshift(\$h, \$d, 24); | |
606 | |
607 return sprintf("%dd %02dh %02dm %02ds", $d, $h, $m, $s); | |
608 } | |
609 | |
610 | |
586 END { | 611 END { |
587 cleanup_and_die(); | 612 cleanup_and_die(); |
588 } | 613 } |