Skip to content

Instantly share code, notes, and snippets.

@jsimpsoncd
Created April 5, 2018 17:36
Show Gist options
  • Save jsimpsoncd/f5236ef7538c3817ef166e3d9a46571d to your computer and use it in GitHub Desktop.
Save jsimpsoncd/f5236ef7538c3817ef166e3d9a46571d to your computer and use it in GitHub Desktop.
irssi mysql logger.
#
# 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