Created
April 5, 2018 17:36
-
-
Save jsimpsoncd/f5236ef7538c3817ef166e3d9a46571d to your computer and use it in GitHub Desktop.
irssi mysql logger.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# Based on url logging script by Riku Voipio, lite. | |
# http://nchip.ukkosenjyly.mine.nu/irssiscripts/ | |
use DBI; | |
use Irssi; | |
use Irssi::Irc; | |
use vars qw($VERSION %IRSSI); | |
$VERSION = "1.1.5"; | |
%IRSSI = ( | |
authors => "Jonathan Simpson", | |
contact => "scripts@jdsnetwork.com", | |
name => "myssqllogger", | |
description => "logs channel messages to mysql database", | |
license => "GPLv2", | |
url => "", | |
); | |
$dsn = 'DBI:mysql:irssilocal:localhost'; | |
$db_user_name = 'logger'; | |
$db_password = 'password'; | |
sub cmd_fallback{ | |
my ($server, $data, $nick, $mask) = @_; | |
@values = split(' ',$data); | |
if ($values[0] eq "MODE") { | |
$channel = $values[1]; | |
if ($mask eq '') { | |
$mask = $nick; | |
} | |
Irssi::print("Mode change $data by $nick"); | |
return cmd_logline($server, "mode change $data",$nick, $mask, $channel); | |
} | |
} | |
sub cmd_chanmode{ | |
my ($server, $channel, $nick, $mask, $data) = @_; | |
if ($mask eq '') { | |
$mask = $nick; | |
} | |
Irssi::print("Mode change $data | $nick | $mask | $channel"); | |
return cmd_logline($server, "mode change $data", $nick, $mask, $channel); | |
} | |
sub cmd_logline { | |
my ($server, $data, $nick, $mask, $target) = @_; | |
$d = $data; | |
db_insert($nick, $target, $data, $mask); | |
return 1; | |
} | |
sub cmd_notice { | |
my ($server, $data, $mask, $target) = @_; | |
return cmd_logline($server, "***notice*** $data", $server->{nick}, "", $target); | |
} | |
sub cmd_own { | |
my ($server, $data, $target) = @_; | |
return cmd_logline($server, $data, $server->{nick}, "", $target); | |
} | |
sub cmd_own_notice { | |
my ($server, $data, $target) = @_; | |
return cmd_logline($server, "***notice*** $data", $server->{nick}, "", $target); | |
} | |
sub cmd_join { | |
my ($server, $channel, $nick, $mask) = @_; | |
return cmd_logline($server, "has joined $channel", $nick, $mask, $channel); | |
} | |
sub cmd_part { | |
my ($server, $channel, $nick, $mask, $data) = @_; | |
return cmd_logline($server, "has left $channel ($data)", $nick, $mask, $channel); | |
} | |
sub cmd_kick { | |
my ($server, $channel, $nick, $mask, $data) = @_; | |
return cmd_logline($server, "has been kicked from $channel ($data)", $nick, $mask, $channel); | |
} | |
sub cmd_quit { | |
#quit is "special" as if we only store the quit we lose useful data. So the quit is stored, and | |
#a special "part_quit" is also stored for each visible channel. | |
#First we store the actual quit. | |
($server, $nick, $mask, $data) = @_; | |
cmd_logline($server, "has quit irc ($data)", $nick, $mask, "all"); | |
#Now lets produce a part for each channel | |
@channels = $server->channels(); | |
foreach my $channel (@channels) { | |
my $snick = $channel->nick_find($nick); | |
if (defined($snick)) { | |
#Irssi::print("Bye $channel->{name}"); | |
cmd_logline($server, "has quit irc ($data)", $nick, $mask, $channel->{'name'}); | |
} | |
} | |
} | |
sub cmd_action { | |
my ($server, $data, $nick, $mask, $target) = @_; | |
return cmd_logline($server, $data, $nick, $mask, $target); | |
} | |
sub cmd_topic { | |
my ($server, $target, $data, $nick, $mask) = @_; | |
return cmd_logline($server, "$nick changes topic to $data", $nick, $mask, $target); | |
} | |
sub db_insert { | |
my ($nick, $target, $line, $mask)=@_; | |
my $dbh = DBI->connect($dsn, $db_user_name, $db_password); | |
my $sql="insert into events (insertime, nick, target, line, mask) values (NOW()".",". $dbh->quote($nick) ."," . $dbh->quote($target) ."," . $dbh->quote($line) . "," . $dbh->quote($mask).")"; | |
# Irssi::print($sql); | |
my $sth = $dbh->do($sql); | |
$dbh->disconnect(); | |
} | |
#Irssi::signal_add_last('channel mode changed', 'cmd_chanmode'); | |
#Irssi::signal_add_last('nick mode changed', 'cmd_nickmode'); | |
Irssi::signal_add_last('message public', 'cmd_logline'); | |
Irssi::signal_add_last('message join', 'cmd_join'); | |
Irssi::signal_add_last('message notice', 'cmd_notice'); | |
Irssi::signal_add_last('message part', 'cmd_part'); | |
Irssi::signal_add_last('message kick', 'cmd_kick'); | |
#Irssi::signal_add_last('channel mode changed', \&cmd_channel_mode_changed); | |
Irssi::signal_add_last('server event', 'cmd_fallback'); | |
#Irssi::signal_add_last('message irc mode', 'cmd_chanmode'); | |
Irssi::signal_add_first('message quit', 'cmd_quit'); | |
Irssi::signal_add_last('message own_public', 'cmd_own'); | |
Irssi::signal_add_last('message own_notice', 'cmd_own_notice'); | |
Irssi::signal_add_last('message topic', 'cmd_topic'); | |
Irssi::signal_add_last('ctcp action', 'cmd_action'); | |
Irssi::print("mysql logger $VERSION by JonathanD loaded."); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment