App-Alice

 view release on metacpan or  search on metacpan

share/commands.pl  view on Meta::CPAN

      my ($self, $window, $new_topic) = @_;
      if ($new_topic) {
        $window->topic({string => $new_topic, nick => $window->nick, time => time});
        $window->irc->send_srv(TOPIC => $window->title, $new_topic);
      }
      else {
        my $topic = $window->topic;
        $self->broadcast($window->format_event("topic", $topic->{author}, $topic->{string}));
      }
    },
  },
  {
    name => 'whois',
    re => qr{^/whois(?:\s+(-f(?:orce)?))?\s+(\S+)},
    eg => "/WHOIS [-force] <nick>",
    desc => "Shows info about the specified nick. Use -force option to refresh",
    code => sub  {
      my ($self, $window, $nick, $force) = @_;
      if (!$force and $window->irc->includes_nick($nick)) {
        $self->reply($window, $window->irc->whois_table($nick));
      }
      else {
        $window->irc->add_whois_cb($nick => sub {
            $self->reply($window, $window->irc->whois_table($nick));
          });
      }
    },
  },
  {
    name => 'me',
    re => qr{^/me\s+(.+)},
    eg => "/ME <message>",
    desc => "Sends a CTCP ACTION to the current window.",
    code => sub {
      my ($self, $window, $action) = @_;
      $self->show($window, "• $action");
      $window->irc->send_srv(PRIVMSG => $window->title, chr(01) . "ACTION $action" . chr(01));
    },
  },
  {
    name => 'quote',
    re => qr{^/(?:quote|raw)\s+(.+)},
    eg => "/QUOTE <data>",
    desc => "Sends the server raw data without parsing.",
    code => sub  {
      my ($self, $window, $command) = @_;
      $window->irc->send_raw($command);
    },
  },
  {
    name => 'disconnect',
    re => qr{^/disconnect\s+(\S+)},
    eg => "/DISCONNECT <server name>",
    desc => "Disconnects from the specified server.",
    code => sub  {
      my ($self, $window, $network) = @_;
      my $irc = $self->app->get_irc($network);
      if ($irc and $irc->is_connected) {
        $irc->disconnect;
      }
      elsif ($irc->reconnect_timer) {
        $irc->cancel_reconnect;
        $irc->log(info => "canceled reconnect");
      }
      else {
        $self->reply($window, "already disconnected");
      }
    },
  },
  {
    name => 'connect',
    re => qr{^/connect\s+(\S+)},
    eg => "/CONNECT <server name>",
    desc => "Connects to the specified server.",
    code => sub {
      my ($self, $window, $network) = @_;
      my $irc  = $self->app->get_irc($network);
      if ($irc and !$irc->is_connected) {
        $irc->connect;
      }
    },
  },
  {
    name => 'ignore',
    re => qr{^/ignore\s+(\S+)},
    eg => "/IGNORE <nick>",
    desc => "Adds nick to ignore list.",
    code => sub  {
      my ($self, $window, $nick) = @_;
      $self->app->add_ignore($nick);
      $self->reply($window, "Ignoring $nick");
    },
  },
  {
    name => 'unignore',
    re => qr{^/unignore\s+(\S+)},
    eg => "/UNIGNORE <nick>",
    desc => "Removes nick from ignore list.",
    code => sub {
      my ($self, $window, $nick) = @_;
      $self->app->remove_ignore($nick);
      $self->reply($window, "No longer ignoring $nick");
    },
  },
  {
    name => 'ignores',
    re => qr{^/ignores?},
    eg => "/IGNORES",
    desc => "Lists ignored nicks.",
    code => sub {
      my ($self, $window) = @_;
      my $msg = join ", ", $self->app->ignores;
      $msg = "none" unless $msg;
      $self->reply($window, "Ignoring:\n$msg");
    },

  },
  {
    name => 'window',
    re => qr{^/w(?:indow)?\s*(\d+|next|prev(?:ious)?)},
    eg => "/WINDOW <window number>",



( run in 0.583 second using v1.01-cache-2.11-cpan-acf6aa7dc9e )