spider/cmd/msg.pl

111 lines
2.4 KiB
Perl

#
# a universal message mangling routine which allows the sysop
# tinker with the properties of a message
#
# Copyright (c) 1999 Dirk Koopman G1TLH
#
# $Id$
#
my ($self, $line) = @_;
return (1, $self->msg('e5')) if $self->priv < 6;
# a line is cmd, msgno, data
my @f = split /\s+/, $line, 3;
my $cmd;
my $msgno;
my $data;
#$DB::single = 1;
$cmd = shift @f if @f && $f[0] =~ /^\w+$/;
$msgno = shift @f if @f && $f[0] =~ /^\d+$/;
# handle queuing
if ($cmd =~ /^qu/i && !$msgno) {
DXMsg::queue_msg(0);
return (1, $self->msg('msg1'));
}
if ($cmd =~ /^qu/i) {
DXMsg::queue_msg(1);
return (1, $self->msg('msg2'));
}
return (1, $self->msg('msgu')) unless $cmd && $msgno;
$data = shift @f;
# get me message
my $ref = DXMsg::get($msgno);
return (1, $self->msg('m13', $msgno)) unless $ref;
my $old;
my $new;
my $m;
if ($cmd =~ /^to/i) {
$m = 'To';
$old = $ref->to;
$new = $ref->to(uc $data);
} elsif ($cmd =~ /^fr/i) {
$m = 'From';
$old = $ref->from;
$new = $ref->from(uc $data);
} elsif ($cmd =~ /^pr/i) {
$m = 'Msg Type';
$old = $ref->private ? 'P' : 'B';
$new = 'P';
$ref->private(1);
} elsif ($cmd =~ /^nop/i || $cmd =~ /^bu/i) {
$m = 'Msg Type';
$old = $ref->private ? 'P' : 'B';
$new = 'B';
$ref->private(0);
} elsif ($cmd =~ /^re/i) {
$m = 'Msg Type';
$old = $ref->read ? 'Read' : 'Unread';
$new = 'Read';
$ref->read(1);
} elsif ($cmd =~ /^(nore|unre)/i) {
$m = 'Msg Type';
$old = $ref->read ? 'Read' : 'Unread';
$new = 'Unread';
$ref->read(0);
} elsif ($cmd =~ /^rr/i) {
$m = 'RR Req';
$old = $ref->rrreq ? 'RR Req' : 'No RR Req';
$new = 'RR Req';
$ref->rrreq(1);
} elsif ($cmd =~ /^norr/i) {
$m = 'RR Req';
$old = $ref->rrreq ? 'RR Req' : 'No RR Req';
$new = 'No RR Req';
$ref->rrreq(0);
} elsif ($cmd =~ /^ke/i) {
$m = 'Keep';
$old = $ref->keep ? 'Keep' : 'No Keep';
$new = 'Keep';
$ref->keep(1);
} elsif ($cmd =~ /^noke/i) {
$m = 'Keep';
$old = $ref->keep ? 'Keep' : 'No Keep';
$new = 'No Keep';
$ref->keep(0);
} elsif ($cmd =~ /^su/i) {
$m = 'Subject';
$old = $ref->subject;
$new = $ref->subject($data);
} elsif ($cmd =~ /^wa/i) {
$m = 'Wait Time';
$old = cldatetime($ref->waitt) || 'None';
$new = 'None';
$ref->waitt(0);
} else {
return (1, $self->msg('e15', $cmd));
}
# store changes and return
$ref->store( [ $ref->read_msg_body() ] );
return(1, $self->msg('msg3', $msgno, $m, $old, $new));