diff options
Diffstat (limited to 'bot.pl')
-rw-r--r-- | bot.pl | 55 |
1 files changed, 37 insertions, 18 deletions
@@ -110,14 +110,9 @@ sub irc_join { | |||
110 | my $host = (split /@/, $_[ARG0])[1]; | 110 | my $host = (split /@/, $_[ARG0])[1]; |
111 | 111 | ||
112 | if( $nick eq $current_nick ) { | 112 | if( $nick eq $current_nick ) { |
113 | $kernel->post( 'irc_client', 'privmsg', $channel, 'Hier bin ich!'); | 113 | $kernel->post( 'irc_client', 'privmsg', $channel, 'Hier bin ich!'); |
114 | } else { | 114 | } else { |
115 | my ($cnt) = $dbh->selectrow_array( "SELECT COUNT(*) FROM users WHERE nick='$nick'" ); | 115 | francoise_verifyuser( $nick, $host, 1 ); |
116 | if ( $cnt == 0 ) { | ||
117 | $dbh->do( "INSERT INTO users(id, nick, words, lines, lastlogin, lasthost) VALUES ( '$nick', '$nick', 0, 0, now(), '$host' )"); | ||
118 | } else { | ||
119 | $dbh->do( "UPDATE users SET lasthost = '$host', lastlogin = now() WHERE nick = '$nick'" ); | ||
120 | } | ||
121 | } | 116 | } |
122 | 117 | ||
123 | print "#-> $nick has joined $channel\n"; | 118 | print "#-> $nick has joined $channel\n"; |
@@ -132,18 +127,21 @@ sub irc_quit { | |||
132 | } | 127 | } |
133 | 128 | ||
134 | sub irc_pub_msg{ | 129 | sub irc_pub_msg{ |
135 | my $kernel = $_[KERNEL]; | 130 | my $kernel = $_[KERNEL]; |
136 | my $nick = (split /!/, $_[ARG0])[0]; | 131 | my $nick = (split /!/, $_[ARG0])[0]; |
137 | my $channel = $_[ARG1]->[0]; | 132 | my $channel = $_[ARG1]->[0]; |
138 | my $msg = $_[ARG2]; | 133 | my $msg = $_[ARG2]; |
139 | my $words = (split / /, $msg); | 134 | my @words = (split / /, $msg); |
135 | my $numwords = $#words; | ||
140 | 136 | ||
141 | if( $msg =~ /^!(\S+)(.*)$/ ) { | 137 | if( $msg =~ /^!(\S+)(.*)$/ ) { |
142 | &{$commands{ $1 } || \&francoise_donothing } ( $kernel, $channel, $msg ); | 138 | &{$commands{ $1 } || \&francoise_donothing } ( $kernel, $channel, $msg ); |
143 | } | 139 | } |
144 | 140 | ||
141 | $nick = francoise_verifyuser( $nick, "", 0, $kernel ); | ||
142 | |||
145 | if( $nick ne $current_nick ) { | 143 | if( $nick ne $current_nick ) { |
146 | $dbh->do( "UPDATE users SET lines = lines + 1, words = words + $words WHERE nick = '$nick'" ); | 144 | $dbh->do( "UPDATE users SET lines = lines + 1, words = words + $numwords + 1 WHERE nick = '$nick'" ); |
147 | } | 145 | } |
148 | 146 | ||
149 | print "$channel: <$nick> $msg\n"; | 147 | print "$channel: <$nick> $msg\n"; |
@@ -154,7 +152,6 @@ sub irc_priv_msg{ | |||
154 | my $nick = (split /!/, $_[ARG0])[0]; | 152 | my $nick = (split /!/, $_[ARG0])[0]; |
155 | my $msg = $_[ARG2]; | 153 | my $msg = $_[ARG2]; |
156 | 154 | ||
157 | |||
158 | if( $msg =~ /^!(\S+)(.*)$/ ) { | 155 | if( $msg =~ /^!(\S+)(.*)$/ ) { |
159 | &{$commands{ $1 } || \&francoise_donothing } ( $kernel, $nick, $msg ); | 156 | &{$commands{ $1 } || \&francoise_donothing } ( $kernel, $nick, $msg ); |
160 | } | 157 | } |
@@ -167,21 +164,43 @@ sub irc_whois{ | |||
167 | my $host = (split / /, $_[ARG1])[2]; | 164 | my $host = (split / /, $_[ARG1])[2]; |
168 | 165 | ||
169 | if( $nick ne $current_nick ) { | 166 | if( $nick ne $current_nick ) { |
167 | francoise_verifyuser( $nick, $host, 0 ); | ||
168 | } | ||
169 | } | ||
170 | |||
171 | sub francoise_verifyuser { | ||
172 | my $nick_ = $_[0]; | ||
173 | my $host = $_[1]; | ||
174 | my $updtime = $_[2]; | ||
175 | my $kernel = $_[3]; | ||
176 | |||
177 | my $nick = ( split /_/, $nick_ )[0] || $nick_; | ||
178 | |||
179 | if( $host ) { | ||
170 | my ($cnt) = $dbh->selectrow_array( "SELECT COUNT(*) FROM users WHERE nick='$nick'" ); | 180 | my ($cnt) = $dbh->selectrow_array( "SELECT COUNT(*) FROM users WHERE nick='$nick'" ); |
171 | if ( $cnt == 0 ) { | 181 | if ( $cnt == 0 ) { |
172 | $dbh->do( "INSERT INTO users(id, nick, words, lines, lastlogin, lasthost) VALUES ( '', '$nick', 0, 0, now(), '$host' )"); | 182 | $dbh->do( "INSERT INTO users(id, nick, words, lines, lastlogin, lasthost) VALUES ( '$nick', '$nick', 0, 0, now(), '$host' )"); |
173 | } else { | 183 | } else { |
174 | $dbh->do( "UPDATE users SET lasthost = '$host' WHERE nick = '$nick'" ); | 184 | $dbh->do( "UPDATE users SET lasthost = '$host'" . ( $updtime ? ", lastlogin = now()" : "" ) . " WHERE nick = '$nick'" ); |
175 | } | 185 | } |
186 | } else { | ||
187 | $kernel->post( 'irc_client', 'whois', $nick_); | ||
176 | } | 188 | } |
189 | |||
190 | return $nick; | ||
177 | } | 191 | } |
178 | 192 | ||
179 | sub francoise_help { | 193 | sub francoise_help { |
180 | my $kernel = $_[0]; | 194 | my $kernel = $_[0]; |
181 | my $dest = $_[1]; | 195 | my $dest = $_[1]; |
182 | 196 | ||
183 | $kernel->post( 'irc_client', 'privmsg', $dest, 'Ich bins doch.'); | 197 | $kernel->post( 'irc_client', 'privmsg', $dest, 'Hallo, ich bin Francoise, der freundliche Kifferchat-Bot.'); |
184 | 198 | $kernel->post( 'irc_client', 'privmsg', $dest, 'Ich kann folgende Kommandos ausfuehren:'); | |
199 | $kernel->post( 'irc_client', 'privmsg', $dest, '!help Diese Hilfe anzeigen'); | ||
200 | $kernel->post( 'irc_client', 'privmsg', $dest, '!stat Informationen ueber mich ausgeben'); | ||
201 | $kernel->post( 'irc_client', 'privmsg', $dest, '!topten Die aktivsten Chatter anzeigen'); | ||
202 | $kernel->post( 'irc_client', 'privmsg', $dest, '!topten0r Die 13370rsten Chatter anzeigen'); | ||
203 | $kernel->post( 'irc_client', 'privmsg', $dest, '!forget Einen Trigger vergessen'); | ||
185 | } | 204 | } |
186 | 205 | ||
187 | sub francoise_stat { | 206 | sub francoise_stat { |