Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
145 lines (138 sloc) 3.2 KB
#!/usr/bin/perl
use Irssi;
use DBI;
use DBD::SQLite;
use strict;
use vars qw($VERSION %IRSSI);
$VERSION = "0.2";
%IRSSI = (
authors => "Jesper Lindh",
contact => "rakblad\@midgard.liu.se",
name => "IRC Completion with mysql-database",
description => "Adds words from IRC to your tab-completion list",
license => "Public Domain",
url => "http://midgard.liu.se/~n02jesli/perl/",
changed => "2017-03-19",
modules => "DBD::SQLite"
);
my $bd= Irssi::get_irssi_dir();
my $fndb="wordcompletition.db";
#my ($dsn) = "DBI:mysql:yourdatabase:databashostname";
my ($dsn) = "DBI:SQLite:dbname=$bd/$fndb";
my ($user_name) = "";
my ($password) = "";
my ($dbh, $sth);
my (@ary);
my $query;
my $connect = 1;
$dbh = DBI->connect ($dsn, $user_name, $password, { RaiseError => 1 });
$dbh->do("create table if not exists words (word varchar(30), prio int)");
sub wordsearch
{
my $sw = shift;
my @retar;
my $i = 0;
$query = qq{ select word from words where word like ? order by prio desc };
$sth = $dbh->prepare ( $query );
$sth->execute($sw.'%');
while (@ary = $sth->fetchrow_array ())
{
push @retar,$ary[0];
}
$sth->finish();
return @retar;
};
sub wordfind
{
my $sw = shift;
my $ret;
$query = qq{ select word from words where word = ? };
$sth = $dbh->prepare ( $query );
$sth->execute($sw);
@ary = $sth->fetchrow_array;
$ret = join ("", @ary), "\n";
$sth->finish();
return $ret;
};
sub wordupdate
{
my $sw = shift;
$query = qq { update words set prio = prio + 1 where word = ? };
$sth = $dbh->prepare ( $query );
$sth->execute($sw);
$sth->finish();
};
sub delword
{
my $sw = shift;
$query = qq { delete from words where word = ? };
$sth = $dbh->prepare ( $query );
$sth->execute($sw);
$sth->finish();
};
sub addword
{
my $sw = shift;
$query = qq { insert into words values (?, 1) };
$sth = $dbh->prepare ( $query );
$sth->execute($sw);
$sth->finish();
};
sub word_complete
{
my ($complist, $window, $word, $linestart, $want_space) = @_;
$word =~ s/([^a-zA-Z0-9åäöÅÄÖ])//g;
push @$complist , wordsearch($word);
};
sub word_message
{
my ($server, $message) = @_;
foreach my $word (split(' ', $message))
{
$word =~ s/([^a-zA-Z0-9åäöÅÄÖ])//g;
if (length($word) >= 4)
{
my $fword = wordfind($word);
if ($fword)
{
wordupdate($word);
}
else
{
addword($word);
};
};
};
};
sub cmd_delword
{
my $dword = shift;
delword($dword);
print "Deleted $dword from database!";
};
sub cmd_sql_disconnect
{
$dbh->disconnect();
print "Disconnected from sql-server";
$connect = 0;
};
sub cmd_sql_connect
{
if ($connect != 0)
{
print "Connecting to sql-server";
$dbh = DBI->connect ($dsn, $user_name, $password, { RaiseError => 1 });
}
else
{
print "Already connected";
};
};
foreach my $cword ("message own_public", "message own_private")
{
Irssi::signal_add($cword, "word_message");
};
Irssi::signal_add_last('complete word', 'word_complete');
Irssi::command_bind("delword", "cmd_delword");
Irssi::command_bind("sql_disconnect", "cmd_sql_disconnect");
Irssi::command_bind("sql_connect", "cmd_sql_connect");