Bot::BasicBot::Pluggable::Module::RT - This is a plugin to access information about RT tickets on IRC


Bot-BasicBot-Pluggable-Module-RT documentation Contained in the Bot-BasicBot-Pluggable-Module-RT distribution.

Index


Code Index:

NAME

Top

Bot::BasicBot::Pluggable::Module::RT - This is a plugin to access information about RT tickets on IRC

VERSION

Top

version 0.20

SYNOPSIS

Top

    < you> RT#12345
    < bot> RT 12345: there is a bug in the matrix! - open

DESCRIPTION

Top

This module uses RT::Client::REST::Ticket to connect to a RT server and grab information on tickets.

NAME

Top

Bot::BasicBot::Pluggable::Module::RT - Retrieves information of RT tickets

IRC USAGE

Top

See synopsis

VARS

Top

server

The url of the RT server. Set it using:

  !set RT server <url>

login

The login to use. Set it using:

  !set RT login <login>

password

The password to use. Set it using:

  !set RT password <password>

output

The output format the bot should use to display information. Set it using:

  !set RT output <output_string>. 

the string can contain the following placeholders :

  %i : id of the ticket
  %q : queue of the ticket
  %c : creator of the ticket
  %s : subject of the ticket
  %S : status of the ticket
  %p : priotity of the ticket
  %C : time where it was created

Default is : 'RT %i: %s - %S';

regexp

The regexp that is used to extract the rt number from the body. Set it using:

  !set RT regexp <some_regexp>.

Its first match should be the rt number. Default is (?:^|\s)rt\s*#?\s*(\d+)

COMPLETE EXAMPLE

Top

  #!/usr/bin/perl 

  use strict;
  use warnings;
  use Bot::BasicBot::Pluggable;

  my $bot = Bot::BasicBot::Pluggable->new(
      server => "server",
      port   => "6667",
      channels => ["#bottest"],
      nick      => "arty",
      alt_nicks => ["arty_", "_arty"],
      username  => "RT",
      name      => "RT Bot",
      charset => "utf-8", # charset the bot assumes the channel is using
  );

  my $rt_module=$bot->load("RT");
  $rt_module->set(user_server => 'http://rt.yourcompany.com');
  $rt_module->set(user_login => "user");
  $rt_module->set(user_password => "password");

  $bot->run();

AUTHOR

Top

Damien "dams" Krotkine, <dams@cpan.org>

BUGS

Top

Please report any bugs or feature requests to bug-bot-basicbot-pluggable-module-rt@rt.cpan.org, or through the web interface at http://rt.cpan.org/. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

COPYRIGHT & LICENSE

Top

AUTHOR

Top

Damien "dams" Krotkine

COPYRIGHT AND LICENSE

Top


Bot-BasicBot-Pluggable-Module-RT documentation Contained in the Bot-BasicBot-Pluggable-Module-RT distribution.

#
# This file is part of Bot-BasicBot-Pluggable-Module-RT
#
# This software is copyright (c) 2011 by Damien "dams" Krotkine.
#
# This is free software; you can redistribute it and/or modify it under
# the same terms as the Perl 5 programming language system itself.
#

use strict;
use warnings;

package Bot::BasicBot::Pluggable::Module::RT;
BEGIN {
  $Bot::BasicBot::Pluggable::Module::RT::VERSION = '0.20';
}

# ABSTRACT: This is a plugin to access information about RT tickets on IRC

use base qw(Bot::BasicBot::Pluggable::Module);

use RT::Client::REST;
use RT::Client::REST::Ticket;

sub init {
    my ($self) = @_;

    # default value for vars.
    foreach (qw(user_server user_login user_password)) {
        next if $self->get($_);
        $self->set($_, '** SET ME **')
   }
   defined $self->get('user_output')
       or $self->set('user_output', 'RT %i: %s - %S');
   defined $self->get('user_regexp')
       or $self->set('user_regexp', '(?:^|\s)rt\s*#?\s*(\d+)');
}

my $rt_handler;
my $connected = 0;

sub told {
    my ( $self, $mess ) = @_;
    my $bot = $self->bot();

    my $body = $mess->{body};

    my $regexp = $self->get('user_regexp');

    my ($nb) = $body =~ /$regexp/i
        or return;

    if (!$connected) {
        $rt_handler = RT::Client::REST->new(server => $self->get('user_server'));
        $rt_handler->login(
            username => $self->get('user_login'),
            password => $self->get('user_password')
        );
        $connected = 1;
    }

    my $ticket = RT::Client::REST::Ticket->new(
        rt  => $rt_handler,
        id  => $nb,
    );
    return unless defined $ticket;

    $ticket->retrieve();
    my %fields = (
        '%i' => $ticket->id(),
        '%q' => $ticket->queue(),
        '%c' => $ticket->creator(),
        '%s' => $ticket->subject(),
        '%S' => $ticket->status(),
        '%p' => $ticket->priority(),
        '%C' => $ticket->created(),
    );

    my $output = $self->get('user_output');
    while (my ($k, $v) = each(%fields)) {
        $output =~ s/\Q$k\E/$v/g;
    }
    return $output;
}

sub emoted {
    my $self = shift;
    $self->told(@_);
}

sub help { q(catch anything that looks like an RT number : /RT#?\s*(\d+)/i. it requires the RT server url, a login and password. Set them using '!set RT server', '!set RT login', '!set RT password'. The information displayed can be configured by setting the output string : '!set RT output some_string'. in the string, you can use the following placeholders :
%i : id of the ticket
%q : queue of the ticket
%c : creator of the ticket
%s : subject of the ticket
%S : status of the ticket
%p : priotity of the ticket
%C : time where it was created
Default is : 'RT %i: %s - %S';

The matching can be configured using : '!set RT regexp some_regexp'. The default is (?:^|\s)rt\s*#?\s*(\d+) .

You need to have the Vars module loaded before setting keys.
) }

1;




__END__