/usr/share/irssi/scripts/wordcompletition.pl is in irssi-scripts 20170711.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | #!/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");
|