From f9d8c09b5b36d63fa6fc1e87fe47d23a94d2cc9b Mon Sep 17 00:00:00 2001 From: Pragmatic Software Date: Thu, 5 Aug 2021 19:35:30 -0700 Subject: [PATCH] Add simple GetUrl plugin, not autoloaded --- lib/PBot/Plugin/GetUrl.pm | 62 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 lib/PBot/Plugin/GetUrl.pm diff --git a/lib/PBot/Plugin/GetUrl.pm b/lib/PBot/Plugin/GetUrl.pm new file mode 100644 index 00000000..8b4429e6 --- /dev/null +++ b/lib/PBot/Plugin/GetUrl.pm @@ -0,0 +1,62 @@ +# File: GetUrl.pm +# +# Purpose: Retrieves text contents of a URL. + +# SPDX-FileCopyrightText: 2021 Pragmatic Software +# SPDX-License-Identifier: MIT + +package PBot::Plugin::GetUrl; +use parent 'PBot::Plugin::Base'; + +use PBot::Imports; + +use LWP::UserAgent::Paranoid; + +sub initialize { + my ($self, %conf) = @_; + + $self->{pbot}->{registry}->add_default('text', 'geturl', 'enabled', 1); + $self->{pbot}->{registry}->add_default('text', 'geturl', 'max_size', 1024 * 1024); + + $self->{pbot}->{commands}->register(sub { $self->cmd_geturl(@_) }, 'geturl', 0); +} + +sub unload { + my ($self) = @_; + $self->{pbot}->{commands}->unregister('geturl'); +} + +sub cmd_geturl { + my ($self, $context) = @_; + + return "Usage: geturl \n" if not length $context->{arguments}; + + my $enabled = $self->{pbot}->{registry}->get_value('geturl', 'enabled'); + + if (not $enabled) { + return "geturl is disabled. To enable, regset geturl.enabled 1"; + } + + # check channel-specific geturl_enabled registry setting + $enabled = $self->{pbot}->{registry}->get_value($context->{from}, 'geturl_enabled') // 1; + + if (not $enabled) { + return "geturl is disabled for $context->{from}. To enable, regset $context->{from}.geturl_enabled 1"; + } + + my $ua = LWP::UserAgent::Paranoid->new(agent => 'Mozilla/5.0', request_timeout => 10); + + my $max_size = $self->{pbot}->{registry}->get_value('geturl', 'max_size') // 1024 * 1024; + $ua->max_size($max_size); + + my $response = $ua->get($context->{arguments}); + + if ($response->is_success) { + return $response->decoded_content; + } + else { + return "[Failed to fetch page: " . $response->status_line . "]"; + } +} + +1;