Mercurial > hg > skillbot
annotate skillbot.pl @ 28:2964c53ca7eb
Fixes eta status after skill should have completed
author | Dominic Cleal <dominic@computerkb.co.uk> |
---|---|
date | Sat, 06 Dec 2008 23:34:36 +0000 |
parents | 708653f624f3 |
children | c25d5c1e7f28 |
rev | line source |
---|---|
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
2 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
3 # vim:set ts=4 shiftwidth=4 cindent: |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
4 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
5 =pod |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
6 |
5
dddb84241032
Bot can now read skills from the API for its friends
Dominic Cleal <dominic@computerkb.co.uk>
parents:
1
diff
changeset
|
7 skillbot |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
8 |
5
dddb84241032
Bot can now read skills from the API for its friends
Dominic Cleal <dominic@computerkb.co.uk>
parents:
1
diff
changeset
|
9 Provides notifications of EVE Online skill completions over IRC. |
dddb84241032
Bot can now read skills from the API for its friends
Dominic Cleal <dominic@computerkb.co.uk>
parents:
1
diff
changeset
|
10 |
dddb84241032
Bot can now read skills from the API for its friends
Dominic Cleal <dominic@computerkb.co.uk>
parents:
1
diff
changeset
|
11 Based on Andy Smith's twitfolk bot: |
dddb84241032
Bot can now read skills from the API for its friends
Dominic Cleal <dominic@computerkb.co.uk>
parents:
1
diff
changeset
|
12 $Id: twitfolk.pl 802 2008-11-29 00:07:38Z andy $ |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
13 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
14 Copyright ©2008 Andy Smith <andy+twitfolk.pl@bitfolk.com> |
5
dddb84241032
Bot can now read skills from the API for its friends
Dominic Cleal <dominic@computerkb.co.uk>
parents:
1
diff
changeset
|
15 Portions copyright ©2008 Dominic Cleal <dominic@computerkb.co.uk> |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
16 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
17 Artistic license same as Perl. |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
18 =cut |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
19 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
20 use strict; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
21 use warnings; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
22 |
5
dddb84241032
Bot can now read skills from the API for its friends
Dominic Cleal <dominic@computerkb.co.uk>
parents:
1
diff
changeset
|
23 use WebService::EveOnline; |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
24 use Data::Dumper; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
25 use Net::IRC; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
26 use HTML::Entities; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
27 use POSIX; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
28 use Encode; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
29 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
30 require 'timers.pl'; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
31 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
32 # Config variables |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
33 my %config; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
34 |
9
c797330cd371
Handles multiple characters on one account
Dominic Cleal <dominic@computerkb.co.uk>
parents:
8
diff
changeset
|
35 my %frienduids; |
c797330cd371
Handles multiple characters on one account
Dominic Cleal <dominic@computerkb.co.uk>
parents:
8
diff
changeset
|
36 my @friends; |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
37 |
5
dddb84241032
Bot can now read skills from the API for its friends
Dominic Cleal <dominic@computerkb.co.uk>
parents:
1
diff
changeset
|
38 open(CONFIG, "< skillbot.conf") or die "can't open skillbot.conf for reading: $!"; |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
39 while(<CONFIG>) { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
40 chomp; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
41 s/#.*//; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
42 s/^\s+//; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
43 s/\s+$//; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
44 next unless length; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
45 my ($var, $value) = split(/\s*=\s*/, $_, 2); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
46 $config{$var} = $value; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
47 } |
5
dddb84241032
Bot can now read skills from the API for its friends
Dominic Cleal <dominic@computerkb.co.uk>
parents:
1
diff
changeset
|
48 close(CONFIG) or die "can't close skillbot.conf: $!"; |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
49 |
5
dddb84241032
Bot can now read skills from the API for its friends
Dominic Cleal <dominic@computerkb.co.uk>
parents:
1
diff
changeset
|
50 my $version = '0.01'; |
dddb84241032
Bot can now read skills from the API for its friends
Dominic Cleal <dominic@computerkb.co.uk>
parents:
1
diff
changeset
|
51 my $ircname = "skillbot v$version"; |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
52 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
53 my $DEBUG = $ENV{'IRC_DEBUG'} || 0; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
54 my $time_to_die = 0; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
55 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
56 justme(); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
57 daemonize(); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
58 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
59 open(PIDFILE, "> $config{'pidfile'}") or die "can't write $config{'pidfile'}: $!"; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
60 print PIDFILE "$$\n"; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
61 close(PIDFILE) or die "can't close $config{'pidfile'}: $!"; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
62 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
63 update_friends(undef); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
64 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
65 my $irc = new Net::IRC; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
66 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
67 my $conn = $irc->newconn(Server => $config{'target_server'}, |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
68 Port => $config{'target_port'}, |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
69 Nick => $config{'nick'}, |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
70 Ircname => $ircname, |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
71 Username => $config{'username'}, |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
72 Password => $config{'target_pass'}) |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
73 or die "can't connect to $config{'target_server'}:$config{'target_port'}: $@\n"; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
74 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
75 binmode $conn->{_socket}, ":bytes"; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
76 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
77 init_handlers($conn); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
78 init_timers(); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
79 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
80 until ($time_to_die) { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
81 $irc->do_one_loop(); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
82 do_timers_once($conn); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
83 do_timers_repeat($conn); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
84 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
85 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
86 if ($conn) { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
87 $conn->quit("Caught SIGINT, bye."); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
88 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
89 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
90 cleanup_and_die(); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
91 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
92 sub cleanup_and_die { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
93 unlink($config{'pidfile'}); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
94 exit(); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
95 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
96 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
97 sub init_handlers |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
98 { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
99 my ($self) = shift; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
100 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
101 $self->add_handler('notice', \&on_notice); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
102 $self->add_handler([ 251,252,253,254,302,255 ], \&on_init); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
103 $self->add_handler('disconnect', \&on_disconnect); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
104 $self->add_handler(376, \&on_connect); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
105 $self->add_handler(433, \&on_nick_taken); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
106 $self->add_handler('cversion', \&on_cversion); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
107 $self->add_handler('cping', \&on_ping); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
108 $self->add_handler('join', \&on_join); |
21
7bcc70b2121a
Adding !eta handler to report current training status
Dominic Cleal <dominic@computerkb.co.uk>
parents:
18
diff
changeset
|
109 $self->add_handler('public', \&on_public); |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
110 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
111 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
112 sub irc_debug |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
113 { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
114 my ($fmt, @args) = @_; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
115 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
116 return unless $DEBUG; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
117 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
118 $fmt = '%s| *** ' . $fmt . "\n"; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
119 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
120 print sprintf($fmt, scalar gmtime(), @args); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
121 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
122 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
123 =pod |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
124 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
125 Timers to set going when we start. |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
126 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
127 =cut |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
128 sub init_timers |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
129 { |
22
119c2b763dd2
small textual change, and my first hg commit --- i hate you dom
user@eee-df
parents:
20
diff
changeset
|
130 # Join channels for the first time, ~15 secs after connect |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
131 add_one_shot_timer(15, sub { my ($timer, $self) = @_; join_channels($self); }); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
132 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
133 # Check we are in the right channels every 10 minutes |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
134 add_repeat_timer(600, sub { my ($timer, $self) = @_; join_channels($self); }); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
135 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
136 # Read the "friends" config file every 6 minutes and make sure we have |
5
dddb84241032
Bot can now read skills from the API for its friends
Dominic Cleal <dominic@computerkb.co.uk>
parents:
1
diff
changeset
|
137 # API sessions for them all |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
138 add_repeat_timer(360, sub { my ($timer, $self) = @_; update_friends($self); }); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
139 |
14
5e35c408cc3c
Handles cases where the skills change and aren't seen to completion
Dominic Cleal <dominic@computerkb.co.uk>
parents:
13
diff
changeset
|
140 # Check for new skills every 60 minutes. |
5e35c408cc3c
Handles cases where the skills change and aren't seen to completion
Dominic Cleal <dominic@computerkb.co.uk>
parents:
13
diff
changeset
|
141 add_repeat_timer(3600, sub { my ($timer, $self) = @_; check_training($self); }); |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
142 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
143 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
144 sub nickserv_id_now |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
145 { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
146 my ($self) = shift; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
147 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
148 $self->privmsg("NickServ", sprintf("IDENTIFY %s", $config{nick_pass})); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
149 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
150 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
151 sub nickserv_release |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
152 { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
153 my ($self) = shift; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
154 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
155 $self->privmsg("NickServ", sprintf("RELEASE %s %s", $config{nick}, |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
156 $config{nick_pass})); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
157 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
158 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
159 sub on_connect |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
160 { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
161 my $self = shift; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
162 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
163 =pod |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
164 $twit->update(sprintf("Connected to irc://%s/, joining channels", $config{target_server})); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
165 $twit->http_code == 200 or print sprintf("%s| *** %s\n", scalar gmtime(), $twit->http_message); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
166 =cut |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
167 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
168 $self->away($config{away}) if ($config{away}); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
169 join_channels($self); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
170 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
171 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
172 sub join_channels |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
173 { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
174 my $self = shift; |
10
9cc6dbc803f6
Fixing docs, allowing chankey
Dominic Cleal <dominic@computerkb.co.uk>
parents:
9
diff
changeset
|
175 $self->join('#' . $config{channel}, $config{chankey}); |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
176 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
177 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
178 sub on_join |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
179 { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
180 my ($self, $event) = @_; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
181 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
182 # print Dumper($event); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
183 if ($event->nick eq $config{nick}) { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
184 =pod |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
185 $twit->update("In channel, checking for tweets"); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
186 $twit->http_code == 200 or print sprintf("%s| *** %s\n", scalar gmtime(), $twit->http_message); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
187 =cut |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
188 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
189 # Now we're in, check for tweets as a one-off |
5
dddb84241032
Bot can now read skills from the API for its friends
Dominic Cleal <dominic@computerkb.co.uk>
parents:
1
diff
changeset
|
190 add_one_shot_timer(10, sub { my ($timer, $self) = @_; check_training($self); }); |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
191 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
192 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
193 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
194 sub on_ping |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
195 { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
196 my ($self, $event) = @_; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
197 my $their_nick = $event->nick; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
198 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
199 $self->ctcp_reply($their_nick, "PING " . join (' ', ($event->args))); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
200 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
201 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
202 sub on_init |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
203 { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
204 my ($self, $event) = @_; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
205 my (@args) = ($event->args); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
206 shift (@args); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
207 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
208 # irc_debug(@args); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
209 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
210 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
211 sub on_disconnect |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
212 { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
213 my ($self, $event) = @_; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
214 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
215 irc_debug("Disconnected from %s (%s). Attempting to reconnect...", |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
216 $event->from, ($event->args())[0]); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
217 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
218 while (! $self->connect()) { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
219 irc_debug("%s", $@); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
220 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
221 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
222 |
21
7bcc70b2121a
Adding !eta handler to report current training status
Dominic Cleal <dominic@computerkb.co.uk>
parents:
18
diff
changeset
|
223 sub on_public |
7bcc70b2121a
Adding !eta handler to report current training status
Dominic Cleal <dominic@computerkb.co.uk>
parents:
18
diff
changeset
|
224 { |
7bcc70b2121a
Adding !eta handler to report current training status
Dominic Cleal <dominic@computerkb.co.uk>
parents:
18
diff
changeset
|
225 my ($self, $event) = @_; |
7bcc70b2121a
Adding !eta handler to report current training status
Dominic Cleal <dominic@computerkb.co.uk>
parents:
18
diff
changeset
|
226 my ($their_nick, $msg) = ($event->nick, $event->args); |
7bcc70b2121a
Adding !eta handler to report current training status
Dominic Cleal <dominic@computerkb.co.uk>
parents:
18
diff
changeset
|
227 |
26
bb1f7ab990b1
Adding an optional argument to !eta for a character name
Dominic Cleal <dominic@computerkb.co.uk>
parents:
25
diff
changeset
|
228 if ($msg =~ /^\!eta(\s+(.+))?/i) { |
21
7bcc70b2121a
Adding !eta handler to report current training status
Dominic Cleal <dominic@computerkb.co.uk>
parents:
18
diff
changeset
|
229 my $found = 0; |
7bcc70b2121a
Adding !eta handler to report current training status
Dominic Cleal <dominic@computerkb.co.uk>
parents:
18
diff
changeset
|
230 for my $f (@friends) { |
26
bb1f7ab990b1
Adding an optional argument to !eta for a character name
Dominic Cleal <dominic@computerkb.co.uk>
parents:
25
diff
changeset
|
231 if ((defined $2 && $f->{char}->name eq $2) |
bb1f7ab990b1
Adding an optional argument to !eta for a character name
Dominic Cleal <dominic@computerkb.co.uk>
parents:
25
diff
changeset
|
232 || (!defined $2 && $f->{nick} eq $their_nick)) { |
28
2964c53ca7eb
Fixes eta status after skill should have completed
Dominic Cleal <dominic@computerkb.co.uk>
parents:
27
diff
changeset
|
233 my $text = ((defined $f->{skill} |
2964c53ca7eb
Fixes eta status after skill should have completed
Dominic Cleal <dominic@computerkb.co.uk>
parents:
27
diff
changeset
|
234 && $f->{skill}->finish_time > time()) |
21
7bcc70b2121a
Adding !eta handler to report current training status
Dominic Cleal <dominic@computerkb.co.uk>
parents:
18
diff
changeset
|
235 ? sprintf("Currently training %s (finish in %s)", |
7bcc70b2121a
Adding !eta handler to report current training status
Dominic Cleal <dominic@computerkb.co.uk>
parents:
18
diff
changeset
|
236 $f->{skill}->name, |
7bcc70b2121a
Adding !eta handler to report current training status
Dominic Cleal <dominic@computerkb.co.uk>
parents:
18
diff
changeset
|
237 $f->{skill}->time_remaining) |
7bcc70b2121a
Adding !eta handler to report current training status
Dominic Cleal <dominic@computerkb.co.uk>
parents:
18
diff
changeset
|
238 : "No skill currently training"); |
7bcc70b2121a
Adding !eta handler to report current training status
Dominic Cleal <dominic@computerkb.co.uk>
parents:
18
diff
changeset
|
239 |
7bcc70b2121a
Adding !eta handler to report current training status
Dominic Cleal <dominic@computerkb.co.uk>
parents:
18
diff
changeset
|
240 $self->privmsg('#' . $config{channel}, sprintf( |
27
708653f624f3
Simplifying bold formatting codes
Dominic Cleal <dominic@computerkb.co.uk>
parents:
26
diff
changeset
|
241 "\002%s:\002 %s", $f->{char}->name, |
708653f624f3
Simplifying bold formatting codes
Dominic Cleal <dominic@computerkb.co.uk>
parents:
26
diff
changeset
|
242 encode("utf8", $text))); |
21
7bcc70b2121a
Adding !eta handler to report current training status
Dominic Cleal <dominic@computerkb.co.uk>
parents:
18
diff
changeset
|
243 $found++; |
7bcc70b2121a
Adding !eta handler to report current training status
Dominic Cleal <dominic@computerkb.co.uk>
parents:
18
diff
changeset
|
244 } |
7bcc70b2121a
Adding !eta handler to report current training status
Dominic Cleal <dominic@computerkb.co.uk>
parents:
18
diff
changeset
|
245 } |
7bcc70b2121a
Adding !eta handler to report current training status
Dominic Cleal <dominic@computerkb.co.uk>
parents:
18
diff
changeset
|
246 |
7bcc70b2121a
Adding !eta handler to report current training status
Dominic Cleal <dominic@computerkb.co.uk>
parents:
18
diff
changeset
|
247 if ($found == 0) { |
7bcc70b2121a
Adding !eta handler to report current training status
Dominic Cleal <dominic@computerkb.co.uk>
parents:
18
diff
changeset
|
248 $self->privmsg('#' . $config{channel}, "No characters found"); |
7bcc70b2121a
Adding !eta handler to report current training status
Dominic Cleal <dominic@computerkb.co.uk>
parents:
18
diff
changeset
|
249 } |
7bcc70b2121a
Adding !eta handler to report current training status
Dominic Cleal <dominic@computerkb.co.uk>
parents:
18
diff
changeset
|
250 } |
7bcc70b2121a
Adding !eta handler to report current training status
Dominic Cleal <dominic@computerkb.co.uk>
parents:
18
diff
changeset
|
251 } |
7bcc70b2121a
Adding !eta handler to report current training status
Dominic Cleal <dominic@computerkb.co.uk>
parents:
18
diff
changeset
|
252 |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
253 sub on_notice |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
254 { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
255 my ($self, $event) = @_; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
256 my ($their_nick) = $event->nick; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
257 my ($notice_txt) = join(' ', $event->args); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
258 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
259 $_ = $their_nick; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
260 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
261 irc_debug("Got notice from %s: %s", $_, $notice_txt); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
262 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
263 if (/^NickServ$/i) { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
264 do_nickserv_notice($self, $notice_txt); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
265 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
266 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
267 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
268 sub do_nickserv_notice |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
269 { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
270 my ($self, $notice) = @_; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
271 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
272 $_ = $notice; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
273 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
274 if (/This nick is owned by someone else/ || |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
275 /This nickname is registered and protected/i) { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
276 irc_debug("ID to NickServ at request of NickServ"); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
277 nickserv_id_now($self); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
278 } elsif (/Your nick has been recovered/i) { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
279 irc_debug("NickServ told me I recovered my nick, RELEASE'ing now"); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
280 nickserv_release($self); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
281 } elsif (/Your nick has been released from custody/i) { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
282 irc_debug("NickServ told me my nick is released, /nick'ing now"); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
283 $self->nick($config{nick}); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
284 } else { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
285 irc_debug("Ignoring NickServ notice: %s", $notice); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
286 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
287 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
288 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
289 sub on_nick_taken |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
290 { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
291 my ($self) = shift; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
292 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
293 $self->nick($config{nick} . $$); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
294 nickserv_recover($self); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
295 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
296 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
297 sub on_cversion |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
298 { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
299 my ($self, $event) = @_; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
300 |
24
db2e2a751dd6
Changed the c2cp version reply to match the irc name (any playing a bith with hg)
df
parents:
22
diff
changeset
|
301 my $vstring = sprintf("VERSION %s", $ircname); |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
302 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
303 $self->ctcp_reply($event->nick, $vstring); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
304 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
305 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
306 sub justme |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
307 { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
308 if (open(PIDFILE, "< $config{pidfile}")) { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
309 my $pid; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
310 chop($pid = <PIDFILE>); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
311 close(PIDFILE) or die "couldn't close $config{pidfile}: $1"; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
312 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
313 if (kill(0, $pid)) { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
314 print "$0 already running (pid $pid), bailing out\n"; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
315 cleanup_and_die(); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
316 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
317 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
318 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
319 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
320 sub handle_sig_int_term |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
321 { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
322 $time_to_die = 1; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
323 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
324 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
325 =pod |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
326 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
327 Splurge the perl error to IRC for the amusement of others. |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
328 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
329 =cut |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
330 sub handle_perl_death |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
331 { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
332 die @_ if $^S; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
333 my $msg = shift; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
334 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
335 if ($conn) { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
336 $conn->quit($msg . ", died"); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
337 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
338 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
339 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
340 sub daemonize |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
341 { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
342 $SIG{__DIE__} = \&handle_perl_death; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
343 $SIG{INT} = $SIG{TERM} = \&handle_sig_int_term; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
344 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
345 # Only daemonize if not running debug mode |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
346 return if ($DEBUG); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
347 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
348 my $pid = fork(); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
349 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
350 exit if $pid; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
351 die "Couldn't fork: $!" unless defined($pid); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
352 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
353 close(STDOUT); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
354 close(STDERR); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
355 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
356 POSIX::setsid() or die "Can't start a new session: $!"; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
357 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
358 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
359 =pod |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
360 |
10
9cc6dbc803f6
Fixing docs, allowing chankey
Dominic Cleal <dominic@computerkb.co.uk>
parents:
9
diff
changeset
|
361 Read a list of friends from the friends_file. Format is: |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
362 |
10
9cc6dbc803f6
Fixing docs, allowing chankey
Dominic Cleal <dominic@computerkb.co.uk>
parents:
9
diff
changeset
|
363 user_id api_key IRC_nick character_name |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
364 |
10
9cc6dbc803f6
Fixing docs, allowing chankey
Dominic Cleal <dominic@computerkb.co.uk>
parents:
9
diff
changeset
|
365 Start a line with # for a comment. Character name is optional, if left |
9cc6dbc803f6
Fixing docs, allowing chankey
Dominic Cleal <dominic@computerkb.co.uk>
parents:
9
diff
changeset
|
366 out then all characters will be monitored. |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
367 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
368 =cut |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
369 sub update_friends |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
370 { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
371 my $self = shift; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
372 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
373 open(FF, "< $config{friends_file}") or die "Couldn't open friends_file: $!"; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
374 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
375 while (<FF>) { |
7
6b73a2781c15
Skill completion notifications done
Dominic Cleal <dominic@computerkb.co.uk>
parents:
5
diff
changeset
|
376 chomp; |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
377 next if (/^#/); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
378 |
12
d9526ab0c6bb
Fixing the handling of df's weird API key
Dominic Cleal <dominic@computerkb.co.uk>
parents:
11
diff
changeset
|
379 if (/^([0-9]+)\s+([a-z0-9]{64})\s+(\S+)(\s+(.+))?/i) { |
9
c797330cd371
Handles multiple characters on one account
Dominic Cleal <dominic@computerkb.co.uk>
parents:
8
diff
changeset
|
380 my $uid = $1; |
12
d9526ab0c6bb
Fixing the handling of df's weird API key
Dominic Cleal <dominic@computerkb.co.uk>
parents:
11
diff
changeset
|
381 my $key = $2; |
9
c797330cd371
Handles multiple characters on one account
Dominic Cleal <dominic@computerkb.co.uk>
parents:
8
diff
changeset
|
382 my $nick = $3; |
c797330cd371
Handles multiple characters on one account
Dominic Cleal <dominic@computerkb.co.uk>
parents:
8
diff
changeset
|
383 my $c = $5; |
5
dddb84241032
Bot can now read skills from the API for its friends
Dominic Cleal <dominic@computerkb.co.uk>
parents:
1
diff
changeset
|
384 |
9
c797330cd371
Handles multiple characters on one account
Dominic Cleal <dominic@computerkb.co.uk>
parents:
8
diff
changeset
|
385 if (! $frienduids{$uid}) { |
5
dddb84241032
Bot can now read skills from the API for its friends
Dominic Cleal <dominic@computerkb.co.uk>
parents:
1
diff
changeset
|
386 my $api = WebService::EveOnline->new( { user_id => $uid, |
dddb84241032
Bot can now read skills from the API for its friends
Dominic Cleal <dominic@computerkb.co.uk>
parents:
1
diff
changeset
|
387 api_key => $key } ); |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
388 |
9
c797330cd371
Handles multiple characters on one account
Dominic Cleal <dominic@computerkb.co.uk>
parents:
8
diff
changeset
|
389 my $loaded = 0; |
5
dddb84241032
Bot can now read skills from the API for its friends
Dominic Cleal <dominic@computerkb.co.uk>
parents:
1
diff
changeset
|
390 foreach my $character ($api->characters) { |
9
c797330cd371
Handles multiple characters on one account
Dominic Cleal <dominic@computerkb.co.uk>
parents:
8
diff
changeset
|
391 next if defined $c && $c ne $character->name; |
c797330cd371
Handles multiple characters on one account
Dominic Cleal <dominic@computerkb.co.uk>
parents:
8
diff
changeset
|
392 push @friends, { |
c797330cd371
Handles multiple characters on one account
Dominic Cleal <dominic@computerkb.co.uk>
parents:
8
diff
changeset
|
393 char => $character, |
c797330cd371
Handles multiple characters on one account
Dominic Cleal <dominic@computerkb.co.uk>
parents:
8
diff
changeset
|
394 api => $api, |
c797330cd371
Handles multiple characters on one account
Dominic Cleal <dominic@computerkb.co.uk>
parents:
8
diff
changeset
|
395 nick => $nick |
c797330cd371
Handles multiple characters on one account
Dominic Cleal <dominic@computerkb.co.uk>
parents:
8
diff
changeset
|
396 }; |
c797330cd371
Handles multiple characters on one account
Dominic Cleal <dominic@computerkb.co.uk>
parents:
8
diff
changeset
|
397 $loaded++; |
5
dddb84241032
Bot can now read skills from the API for its friends
Dominic Cleal <dominic@computerkb.co.uk>
parents:
1
diff
changeset
|
398 } |
dddb84241032
Bot can now read skills from the API for its friends
Dominic Cleal <dominic@computerkb.co.uk>
parents:
1
diff
changeset
|
399 |
18
10587dbd634b
Ignoring bad data which was actually negative
Dominic Cleal <dominic@computerkb.co.uk>
parents:
17
diff
changeset
|
400 if (defined $c && $loaded eq 0) |
5
dddb84241032
Bot can now read skills from the API for its friends
Dominic Cleal <dominic@computerkb.co.uk>
parents:
1
diff
changeset
|
401 { |
20
631123cc735c
Removing EVE prefix from log messages
Dominic Cleal <dominic@computerkb.co.uk>
parents:
18
diff
changeset
|
402 irc_debug("Unable to find character %s for ID %lu", |
5
dddb84241032
Bot can now read skills from the API for its friends
Dominic Cleal <dominic@computerkb.co.uk>
parents:
1
diff
changeset
|
403 $c, $uid); |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
404 next; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
405 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
406 |
13
d9a9bcd44c2e
Fixing re-adding of friends
Dominic Cleal <dominic@computerkb.co.uk>
parents:
12
diff
changeset
|
407 $frienduids{$uid} = $loaded; |
20
631123cc735c
Removing EVE prefix from log messages
Dominic Cleal <dominic@computerkb.co.uk>
parents:
18
diff
changeset
|
408 irc_debug("Adding new friend %s (%lu), %lu characters", |
9
c797330cd371
Handles multiple characters on one account
Dominic Cleal <dominic@computerkb.co.uk>
parents:
8
diff
changeset
|
409 $nick, $uid, $loaded); |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
410 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
411 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
412 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
413 |
22
119c2b763dd2
small textual change, and my first hg commit --- i hate you dom
user@eee-df
parents:
20
diff
changeset
|
414 close(FF) or warn "Something weird occured when closing friends_file: $!"; |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
415 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
416 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
417 =pod |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
418 |
5
dddb84241032
Bot can now read skills from the API for its friends
Dominic Cleal <dominic@computerkb.co.uk>
parents:
1
diff
changeset
|
419 Check for any characters that aren't known to be training, then call the API |
dddb84241032
Bot can now read skills from the API for its friends
Dominic Cleal <dominic@computerkb.co.uk>
parents:
1
diff
changeset
|
420 to see if they've started, setting timers. |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
421 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
422 =cut |
5
dddb84241032
Bot can now read skills from the API for its friends
Dominic Cleal <dominic@computerkb.co.uk>
parents:
1
diff
changeset
|
423 sub check_training |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
424 { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
425 my $self = shift; |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
426 |
15
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
427 check_friend($self, $_) foreach (@friends); |
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
428 } |
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
429 |
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
430 sub check_friend |
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
431 { |
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
432 my $self = shift; |
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
433 my $f = shift; |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
434 |
15
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
435 my $skill = $f->{char}->skill->in_training; |
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
436 |
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
437 # Nothing training |
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
438 unless (defined $skill) |
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
439 { |
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
440 # If the char was training before and now has stopped then cancel |
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
441 # the announcement |
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
442 del_one_shot_timer($f->{timer}) if defined $f->{timer}; |
17
bef72aa85f2b
Ignoring bad data with 2^32 second finish times
Dominic Cleal <dominic@computerkb.co.uk>
parents:
16
diff
changeset
|
443 return; |
15
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
444 } |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
445 |
15
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
446 # Check for changes in the skill, skip or cancel announcement |
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
447 if (defined $f->{skill}) { |
18
10587dbd634b
Ignoring bad data which was actually negative
Dominic Cleal <dominic@computerkb.co.uk>
parents:
17
diff
changeset
|
448 return if $skill->id eq $f->{skill}->id; |
15
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
449 del_one_shot_timer($f->{timer}); |
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
450 } |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
451 |
17
bef72aa85f2b
Ignoring bad data with 2^32 second finish times
Dominic Cleal <dominic@computerkb.co.uk>
parents:
16
diff
changeset
|
452 my $finish = $skill->finish_time - time(); |
bef72aa85f2b
Ignoring bad data with 2^32 second finish times
Dominic Cleal <dominic@computerkb.co.uk>
parents:
16
diff
changeset
|
453 my $prefinish = $finish - 60; |
bef72aa85f2b
Ignoring bad data with 2^32 second finish times
Dominic Cleal <dominic@computerkb.co.uk>
parents:
16
diff
changeset
|
454 |
18
10587dbd634b
Ignoring bad data which was actually negative
Dominic Cleal <dominic@computerkb.co.uk>
parents:
17
diff
changeset
|
455 irc_debug("Character %s is training %s %d (%s == %d sec)", |
15
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
456 $f->{char}->name, $skill->name, $skill->level, |
17
bef72aa85f2b
Ignoring bad data with 2^32 second finish times
Dominic Cleal <dominic@computerkb.co.uk>
parents:
16
diff
changeset
|
457 $skill->time_remaining, $finish); |
bef72aa85f2b
Ignoring bad data with 2^32 second finish times
Dominic Cleal <dominic@computerkb.co.uk>
parents:
16
diff
changeset
|
458 |
18
10587dbd634b
Ignoring bad data which was actually negative
Dominic Cleal <dominic@computerkb.co.uk>
parents:
17
diff
changeset
|
459 # Ignore bad data |
10587dbd634b
Ignoring bad data which was actually negative
Dominic Cleal <dominic@computerkb.co.uk>
parents:
17
diff
changeset
|
460 if ($finish < 0) |
17
bef72aa85f2b
Ignoring bad data with 2^32 second finish times
Dominic Cleal <dominic@computerkb.co.uk>
parents:
16
diff
changeset
|
461 { |
bef72aa85f2b
Ignoring bad data with 2^32 second finish times
Dominic Cleal <dominic@computerkb.co.uk>
parents:
16
diff
changeset
|
462 irc_debug("Unreasonable finish time given of %s seconds, ignoring", |
bef72aa85f2b
Ignoring bad data with 2^32 second finish times
Dominic Cleal <dominic@computerkb.co.uk>
parents:
16
diff
changeset
|
463 $finish); |
bef72aa85f2b
Ignoring bad data with 2^32 second finish times
Dominic Cleal <dominic@computerkb.co.uk>
parents:
16
diff
changeset
|
464 return; |
bef72aa85f2b
Ignoring bad data with 2^32 second finish times
Dominic Cleal <dominic@computerkb.co.uk>
parents:
16
diff
changeset
|
465 } |
15
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
466 |
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
467 $f->{skill} = $skill; |
7
6b73a2781c15
Skill completion notifications done
Dominic Cleal <dominic@computerkb.co.uk>
parents:
5
diff
changeset
|
468 |
15
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
469 my $text = sprintf("%s has completed training skill %s %s", |
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
470 $f->{char}->name, $skill->name, $skill->level); |
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
471 |
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
472 if ($text =~ /[\n\r]/) { |
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
473 $text =~ s/[\n\r]/ /g; |
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
474 } |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
475 |
15
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
476 # Add a timer shortly before the end to ensure the user's still training |
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
477 if ($prefinish > 0) |
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
478 { |
16
e238f28f774a
No need to save timer
Dominic Cleal <dominic@computerkb.co.uk>
parents:
15
diff
changeset
|
479 add_one_shot_timer($prefinish, sub { |
15
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
480 check_friend($self, $f); |
7
6b73a2781c15
Skill completion notifications done
Dominic Cleal <dominic@computerkb.co.uk>
parents:
5
diff
changeset
|
481 }); |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
482 } |
15
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
483 |
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
484 $f->{timer} = add_one_shot_timer($skill->finish_time - time(), sub { |
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
485 $self->privmsg('#' . $config{channel}, sprintf( |
27
708653f624f3
Simplifying bold formatting codes
Dominic Cleal <dominic@computerkb.co.uk>
parents:
26
diff
changeset
|
486 "\002%s:\002 %s", $f->{nick}, |
708653f624f3
Simplifying bold formatting codes
Dominic Cleal <dominic@computerkb.co.uk>
parents:
26
diff
changeset
|
487 encode("utf8", $text))); |
15
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
488 delete $f->{skill}; |
2ab5ccc01036
Adding a check in shortly before an announcement to double-check the current skill
Dominic Cleal <dominic@computerkb.co.uk>
parents:
14
diff
changeset
|
489 }); |
0
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
490 } |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
491 |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
492 END { |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
493 cleanup_and_die(); |
d6521d5ea884
Import of Andy Smith's twitfolk bot
Dominic Cleal <dominic@computerkb.co.uk>
parents:
diff
changeset
|
494 } |