pbot/PBot/VERSION.pm

73 lines
2.1 KiB
Perl

# File: VERSION.pm
# Author: pragma_
#
# Purpose: Keeps track of bot version. Can compare current version against
# latest version on github or version.check_url site.
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
package PBot::VERSION;
use strict;
use warnings;
use feature 'unicode_strings';
BEGIN {
use Exporter;
our @ISA = 'Exporter';
our @EXPORT_OK = qw(version);
}
use LWP::UserAgent;
# These are set automatically by the build/commit script
use constant {
BUILD_NAME => "PBot",
BUILD_REVISION => 2836,
BUILD_DATE => "2020-01-19",
};
sub new {
my ($class, %conf) = @_;
my $self = bless {}, $class;
$self->{pbot} = $conf{pbot} // Carp::croak("Missing pbot reference to " . __FILE__);
$self->{pbot}->{commands}->register(sub { $self->version_cmd(@_) }, "version", 0);
return $self;
}
sub version {
return BUILD_NAME . " version " . BUILD_REVISION . " " . BUILD_DATE;
}
sub version_cmd {
my ($self, $from, $nick, $user, $host, $arguments, $stuff) = @_;
if (length $arguments) {
if ($arguments eq '-check') {
my $url = $self->{pbot}->{registry}->get_value('version', 'check_url') // 'https://raw.githubusercontent.com/pragma-/pbot/master/PBot/VERSION.pm';
my $ua = LWP::UserAgent->new(timeout => 10);
my $response = $ua->get($url);
return "Unable to get version information: " . $response->status_line if (not $response->is_success);
my $text = $response->decoded_content;
my ($version, $date) = $text =~ m/^\s+BUILD_REVISION => (\d+).*^\s+BUILD_DATE\s+=> "([^"]+)"/ms;
if ($version > BUILD_REVISION) {
return "/say " . $self->version . "; new version available: $version $date!";
} else {
return "/say " . $self->version . "; you have the latest version.";
}
} else {
my $nick = $self->{pbot}->{nicklist}->is_present_similar($from, $arguments);
if ($nick) {
return "/say $nick: " . $self->version;
}
}
}
return "/say " . $self->version;
}
1;