Blame
Date:
Fri Dec 17 14:15:53 2021 UTC
Message:
Import sources
01
2021-12-17
jrmu
#!/usr/bin/perl
02
2021-12-17
jrmu
use strict;
03
2021-12-17
jrmu
use warnings;
04
2021-12-17
jrmu
05
2021-12-17
jrmu
package RSSBot;
06
2021-12-17
jrmu
use base qw(Bot::BasicBot);
07
2021-12-17
jrmu
use XML::RSS::Parser;
08
2021-12-17
jrmu
09
2021-12-17
jrmu
my %feedURLs = (
10
2021-12-17
jrmu
"undeadly" => "http://undeadly.org/cgi?action=rss",
11
2021-12-17
jrmu
"eff" => "https://www.eff.org/rss/updates.xml",
12
2021-12-17
jrmu
"hackernews" => "https://news.ycombinator.com/rss",
13
2021-12-17
jrmu
"krebs" => "https://krebsonsecurity.com/feed",
14
2021-12-17
jrmu
"ircnow" => "https://wiki.ircnow.org/index.php?n=Site.AllRecentChanges?action=rss",
15
2021-12-17
jrmu
"schneier" => "https://www.schneier.com/blog/atom.xml",
16
2021-12-17
jrmu
"slashdot" => "http://rss.slashdot.org/Slashdot/slashdotMain",
17
2021-12-17
jrmu
"theregister" => "https://www.theregister.com/headlines.rss",
18
2021-12-17
jrmu
);
19
2021-12-17
jrmu
20
2021-12-17
jrmu
sub said {
21
2021-12-17
jrmu
my $self = shift;
22
2021-12-17
jrmu
my $arguments = shift;
23
2021-12-17
jrmu
if ($arguments->{body} =~ m{^!add\s+(\w+)\s+(https?://[[:print:]]+)$}) {
24
2021-12-17
jrmu
my ($name, $url) = ($1, $2);
25
2021-12-17
jrmu
$feedURLs{$name} = $url;
26
2021-12-17
jrmu
$self->say(
27
2021-12-17
jrmu
channel => $arguments->{channel},
28
2021-12-17
jrmu
body => "$name added.",
29
2021-12-17
jrmu
);
30
2021-12-17
jrmu
}
31
2021-12-17
jrmu
if ($arguments->{body} =~ m{^!delete\s+(\w+)$}) {
32
2021-12-17
jrmu
my $name = $1;
33
2021-12-17
jrmu
delete($feedURLs{$name});
34
2021-12-17
jrmu
$self->say(
35
2021-12-17
jrmu
channel => $arguments->{channel},
36
2021-12-17
jrmu
body => "$name deleted.",
37
2021-12-17
jrmu
);
38
2021-12-17
jrmu
}
39
2021-12-17
jrmu
if ($arguments->{body} =~ /^!(\w+)$/) {
40
2021-12-17
jrmu
my $name = $1;
41
2021-12-17
jrmu
if (!exists($feedURLs{$name})) {
42
2021-12-17
jrmu
$self->say(
43
2021-12-17
jrmu
channel => $arguments->{channel},
44
2021-12-17
jrmu
body => "Error: $name has not been added",
45
2021-12-17
jrmu
);
46
2021-12-17
jrmu
return;
47
2021-12-17
jrmu
}
48
2021-12-17
jrmu
my $p = XML::RSS::Parser->new;
49
2021-12-17
jrmu
my $url = $feedURLs{$name};
50
2021-12-17
jrmu
my $feed = $p->parse_uri($url);
51
2021-12-17
jrmu
my $qtitle = $feed->query('/channel/title');
52
2021-12-17
jrmu
my $feed_title = $qtitle->text_content;
53
2021-12-17
jrmu
my @qitems = $feed->query('//item');
54
2021-12-17
jrmu
for (my $i = 0; $i < scalar(@qitems) && $i < 5; $i++) {
55
2021-12-17
jrmu
my $qitem = $qitems[$i];
56
2021-12-17
jrmu
my %item;
57
2021-12-17
jrmu
$item{feed_title} = $feed_title;
58
2021-12-17
jrmu
foreach my $tag (qw(title dc:contributor link comments)) {
59
2021-12-17
jrmu
my $qtag = $qitem->query($tag);
60
2021-12-17
jrmu
if(defined($qtag)) {
61
2021-12-17
jrmu
$item{$tag} = $qtag->text_content;
62
2021-12-17
jrmu
} else {
63
2021-12-17
jrmu
$item{$tag} = "";
64
2021-12-17
jrmu
}
65
2021-12-17
jrmu
}
66
2021-12-17
jrmu
$self->say(
67
2021-12-17
jrmu
channel => $arguments->{channel},
68
2021-12-17
jrmu
body => "[\002$item{feed_title}\002] $item{title} ($item{'dc:contributor'}) $item{link}: $item{comments}",
69
2021-12-17
jrmu
);
70
2021-12-17
jrmu
}
71
2021-12-17
jrmu
}
72
2021-12-17
jrmu
}
73
2021-12-17
jrmu
74
2021-12-17
jrmu
package main;
75
2021-12-17
jrmu
76
2021-12-17
jrmu
my $bot = RSSBot->new(
77
2021-12-17
jrmu
server => 'irc.example.com',
78
2021-12-17
jrmu
port => '6667',
79
2021-12-17
jrmu
channels => ['#perl103'],
80
2021-12-17
jrmu
nick => 'nickname',
81
2021-12-17
jrmu
name => 'username',
82
2021-12-17
jrmu
);
83
2021-12-17
jrmu
$bot->run();
IRCNow