/* Do not remove the headers from this file! see /USAGE for more info. */
//
// REPLYNOTE.C 970408 Fritti
//
// Reply to a user about a post on a bulletin board.
//
#include <edit.h>
inherit CMD;
inherit M_INPUT;
inherit CLASS_NEWSMSG;
private int filter_removed(object brd, int elem) {
class news_msg msg = NEWS_D->get_message(brd->query_group(), elem);
if (!msg || !msg->body)
return 0;
return 1;
}
private void receive_body(object brd, int reply_id, string array body) {
class news_msg msg = NEWS_D->get_message(brd->query_group(), reply_id);
if (!body) {
write("Reply aborted.\n");
return;
}
// This line required a change in the mailer
// (/obj/secure/mailers/mailer.c) because it checked whether the
// previous object was the newsreader.
this_body()->query_mailer()->send_news_reply("Re: " + msg->subject,
body, lower_case(msg->poster));
write("Replied to "+lower_case(msg->poster)+".\n");
}
private void main(string arg) {
object ob, brd;
int id;
int array ids;
brd = 0;
foreach (ob in deep_inventory(environment(this_body()))) {
if ((int)ob->is_bulletin_board())
brd = ob;
}
if (!brd) {
write("There is nothing here to reply to.\n");
return;
}
if (sscanf(arg, "%d", id) != 1) {
write("Please specify a post number.\n");
return;
}
ids = sort_array(filter_array(NEWS_D->get_messages(brd->query_group()),
(: filter_removed, brd :)), 1);
if (id <= 0 || id > sizeof(ids)) {
write("No such note.\n");
return;
}
id = ids[id - 1];
new(EDIT_OB, EDIT_TEXT, 0, (: receive_body, brd, id :));
}