X-Git-Url: https://ruin.nu/git/?p=NDIRC.git;a=blobdiff_plain;f=IrcContext.pm;fp=IrcContext.pm;h=b8eae0d003889a52869d3fe53efd16333343025b;hp=0000000000000000000000000000000000000000;hb=468a4e3e07c0d9e6ed66a75c73f0d7ff2921b90a;hpb=cd18307dc7e3886266937935feffbb41b1df422d diff --git a/IrcContext.pm b/IrcContext.pm new file mode 100644 index 0000000..b8eae0d --- /dev/null +++ b/IrcContext.pm @@ -0,0 +1,134 @@ +#************************************************************************** +# Copyright (C) 2009 by Michael Andreen * +# * +# This program is free software; you can redistribute it and/or modify * +# it under the terms of the GNU General Public License as published by * +# the Free Software Foundation; either version 2 of the License, or * +# (at your option) any later version. * +# * +# This program is distributed in the hope that it will be useful, * +# but WITHOUT ANY WARRANTY; without even the implied warranty of * +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +# GNU General Public License for more details. * +# * +# You should have received a copy of the GNU General Public License * +# along with this program; if not, write to the * +# Free Software Foundation, Inc., * +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * +#**************************************************************************/ + +package NDIRC::IrcContext; +use strict; +use warnings; +use feature ':5.10'; + +use Moose; +use namespace::autoclean; +extends "NDIRC::Context"; + +use Set::Object (); + +has host => ( + is => 'ro', + isa => 'Str', + required => 1 +); + +has nick => ( + is => 'ro', + isa => 'Str', + required => 1 +); + +has server => ( + is => 'ro', + isa => 'Object', + required => 1 +); + +has reply_string => ( + is => 'ro', + isa => 'Str', + required => 1, +); + +sub reply { + my ($self,$msg) = @_; + + my @command = split / /, $self->reply_string; + $self->message(@command, $msg); +} + +sub message { + my ($self,$command, $target, $msg) = @_; + + $msg =~ s`(.*?)`${\(chr(2))}$1${\(chr(15))}`gi; + $msg =~ s`(.*?)`${\(chr(3))}$1$2${\(chr(15))}`gi; + + #Split the message, using the, slightly modified, algorithm from splitlong.pl in the irssi distribution. + if ($command eq 'privmsg'){ + my $lend = ' ...'; + my $lstart = '... '; + my $maxlength = $self->server->{msg_length} - bytes::length("privmsg $target :" . $self->server->nick_name()); + my $maxlength2 = $maxlength - bytes::length($lend); + + if (bytes::length($msg) > ($maxlength)) { + my @spltarr; + + while (bytes::length($msg) > ($maxlength)) { + my $pos = rindex($msg, " ", $maxlength2); + push @spltarr, substr($msg, 0, ($pos < ($maxlength/10 + 4)) ? $maxlength2 : $pos) . $lend; + $msg = $lstart . substr($msg, ($pos < ($maxlength/10 + 4)) ? $maxlength2 : $pos+1); + } + + push @spltarr, $msg; + for (@spltarr) { + $self->command($command, $target, $_); + } + return; + } + } + $self->command($command, $target, $msg); +} + +sub replyId { + my $self = shift; + return $self->nick; +} + +sub command { + my ($self,@command) = @_; + + $self->server->yield(@command); +} + +sub _build_uid { + my ($self) = @_; + + my $query = $self->model->prepare(q{ +SELECT uid FROM users +WHERE hostmask = $1 + }); + $query->execute($self->host); + + if (my ($uid) = $query->fetchrow_array){ + $query->finish; + return $uid; + } + return -4; +} + +sub valuecolor { + shift @_; + my $s = $_; + $s = $_[1] if $#_ >= 1; + $s = "" unless defined $s; + return "$s" if $s eq 'Hostile'; + return "$s" if $s eq 'Friendly'; + return "$s" if $s eq 'Nap' or $s eq 'NAP'; + return "$s" if $_[0]; + return $s; +} + +__PACKAGE__->meta->make_immutable; +1;