Ignore:
Timestamp:
Jan 8, 2008, 11:24:09 PM (16 years ago)
Author:
Geoffrey Thomas <geofft@mit.edu>
Branches:
master, barnowl_perlaim, debian, release-1.10, release-1.4, release-1.5, release-1.6, release-1.7, release-1.8, release-1.9
Children:
0e52069
Parents:
c0f9e30
Message:
Added support for channels in IRC. After you :irc-connect to a server, you can
:irc-join #channel, and then :irc-msg either a user or a #channel. Replies,
isprivate, and context should work vaguely as expected.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • perl/modules/IRC/lib/BarnOwl/Module/IRC/Connection.pm

    rb38b0b2 r2c40dc0  
    1515=cut
    1616
    17 use base qw(Net::IRC::Connection Class::Accessor);
     17use base qw(Net::IRC::Connection Class::Accessor Exporter);
    1818__PACKAGE__->mk_accessors(qw(alias channels));
     19our @EXPORT_OK = qw(&is_private);
    1920
    2021use BarnOwl;
     
    3031    bless($self, $class);
    3132
    32     $self->add_global_handler(endofmotd => sub { goto &on_connect });
    33     $self->add_global_handler(msg => sub { goto &on_msg });
    34     $self->add_global_handler(notice => sub { goto &on_msg });
     33    $self->add_global_handler(376 => sub { goto &on_connect });
     34    $self->add_global_handler(['msg', 'notice', 'public', 'caction'],
     35            sub { goto &on_msg });
     36    $self->add_global_handler(cping => sub { goto &on_ping });
    3537    $self->add_default_handler(sub { goto &on_event; });
    3638
     
    4951sub on_msg {
    5052    my ($self, $evt) = @_;
    51     my $replycmd = "irc-msg " . $evt->nick;
     53    my ($recipient) = $evt->to;
     54    my $body = strip_irc_formatting([$evt->args]->[0]);
     55    $body = BarnOwl::Style::boldify($evt->nick.' '.$body) if $evt->type eq 'caction';
    5256    my $msg = BarnOwl::Message->new(
    5357        type        => 'IRC',
     
    5559        server      => $self->server,
    5660        network     => $self->alias,
    57         recipient   => $self->nick,
    58         body        => strip_irc_formatting([$evt->args]->[0]),
     61        recipient   => $recipient,
     62        body        => $body,
    5963        sender      => $evt->nick,
    6064        hostname    => $evt->host,
    6165        from        => $evt->from,
    62         notice      => $evt->type eq 'notice' ? 'true' : '',
    63         isprivate   => 'true',
    64         replycmd    => $replycmd,
    65         replysendercmd => $replycmd
     66        $evt->type eq 'notice' ?
     67          (notice     => 'true') : (),
     68        is_private($recipient) ?
     69          (isprivate  => 'true') : (),
     70        replycmd    => 'irc-msg ' .
     71            (is_private($recipient) ? $evt->nick : $recipient),
     72        replysendercmd => 'irc-msg ' . $evt->nick,
    6673       );
    6774    BarnOwl::queue_message($msg);
     75}
     76
     77sub on_ping {
     78    my ($self, $evt) = @_;
     79    $self->ctcp_reply($evt->nick, join (' ', ($evt->args)));
     80}
     81
     82sub on_event {
     83    my ($self, $evt) = @_;
     84    BarnOwl::admin_message("IRC",
     85            "Unhandled IRC event of type " . $evt->type . ":\n"
     86            . strip_irc_formatting(join("\n", $evt->args)))
     87        if BarnOwl::getvar('irc:spew') eq 'on';
    6888}
    6989
     
    83103}
    84104
     105# Determines if the given message recipient is a username, as opposed to
     106# a channel that starts with # or &.
     107sub is_private {
     108    return shift !~ /^[\#\&]/;
     109}
    85110
    861111;
Note: See TracChangeset for help on using the changeset viewer.