spider/cmd/kill.pl

76 lines
1.7 KiB
Perl
Raw Normal View History

1998-10-01 10:49:50 +00:00
#
# kill or delete a message
#
# Copyright (c) Dirk Koopman G1TLH
#
# $Id$
#
use strict;
1998-10-01 10:49:50 +00:00
my ($self, $line) = @_;
my @f = split /\s+/, $line;
my $msgno;
my @out;
my @body;
my $ref;
my @refs;
my $call = $self->call;
my $full;
# $DB::single = 1;
while (@f) {
my $f = shift @f;
if ($f =~ /^fu/io) {
return (1, $self->msg('e5')) if $self->priv < 5;
$full = 1;
} elsif ($f =~ /^\d+$/o) {
$ref = DXMsg::get($f);
if (!$ref) {
push @out, "Msg $f not found";
next;
}
if ($self->priv < 5 && $ref->to ne $call && $ref->from ne $call) {
push @out, "Msg $f not available";
next;
}
push @refs, $ref;
} elsif ($f =~ /(\d+)-(\d+)/) {
my $from = $1;
my $to = $2;
@refs = grep { !($self->priv < 5 && $_->to ne $call && $_->from ne $call) } DXMsg::get_all() unless @refs;
@refs = grep { $_->msgno >= $from && $_->msgno <= $to } @refs;
} elsif ($f =~ /^fr/io) {
$f = shift @f;
if ($f) {
$f = shellregex($f);
@refs = grep { !($self->priv < 5 && $_->to ne $call && $_->from ne $call) } DXMsg::get_all() unless @refs;
@refs = grep { $_->from =~ m{$f}i } @refs;
}
} elsif ($f =~ /^to/io) {
$f = shift @f;
if ($f) {
$f = shellregex($f);
@refs = grep { !($self->priv < 5 && $_->to ne $call && $_->from ne $call) } DXMsg::get_all() unless @refs;
@refs = grep { $_->to =~ m{$f}i } @refs;
}
} else {
push @out, "invalid argument '$f'";
return (1, @out);
}
}
foreach $ref ( @refs) {
Log('msg', "Message $ref->{msgno} from $ref->{from} to $ref->{to} deleted by $call");
if ($full) {
DXChannel::broadcast_nodes(DXProt::pc49($ref->{from}, $ref->{subject}), $main::me);
}
2001-08-16 14:41:52 +00:00
my $tonode = $ref->tonode;
$ref->stop_msg($tonode) if $tonode;
2001-10-04 11:32:14 +00:00
$ref->mark_delete;
1999-06-27 17:29:44 +00:00
push @out, $self->msg('m12', $ref->msgno);
1998-10-01 10:49:50 +00:00
}
return (1, @out);