/* mod-helpserv.c - Support Helper assistant service
- * Copyright 2002-2003 srvx Development Team
+ * Copyright 2002-2003, 2006 srvx Development Team
*
* This file is part of srvx.
*
else
send_message_type(4, user, hs->helpserv, "%s %s %s", lbuf[0], lbuf[1], lbuf[2]);
- if (hs->req_on_join && req == hs->unhandled && hs->helpchan_empty) {
+ if (hs->req_on_join && req == hs->unhandled && hs->helpchan_empty && !user->uplink->burst) {
timeq_del(0, run_empty_interval, hs, TIMEQ_IGNORE_WHEN);
run_empty_interval(hs);
}
}
/* Handle a message from a user to a HelpServ bot. */
-static void helpserv_usermsg(struct userNode *user, struct helpserv_bot *hs, char *text) {
+static void helpserv_usermsg(struct userNode *user, struct helpserv_bot *hs, const char *text) {
const int from_opserv = 0; /* for helpserv_notice */
struct helpserv_request *req=NULL, *newest=NULL;
struct helpserv_reqlist *reqlist, *hand_reqlist;
if (user->handle_info)
helpserv_notify(req->helper, "HSMSG_PAGE_UPD_REQUEST_AUTHED", req->id, user->nick, user->handle_info->handle, timestr, updatestr);
else
- helpserv_notify(req->helper, "HSMSG_PAGE_UPD_REQUESTNOT_AUTHED", req->id, user->nick, timestr, updatestr);
+ helpserv_notify(req->helper, "HSMSG_PAGE_UPD_REQUEST_NOT_AUTHED", req->id, user->nick, timestr, updatestr);
else
if (user->handle_info)
helpserv_page(PGSRC_STATUS, "HSMSG_PAGE_UPD_REQUEST_AUTHED", req->id, user->nick, user->handle_info->handle, timestr, updatestr);
}
/* Handle messages direct to a HelpServ bot. */
-static void helpserv_botmsg(struct userNode *user, struct userNode *target, char *text, UNUSED_ARG(int server_qualified)) {
+static void helpserv_botmsg(struct userNode *user, struct userNode *target, const char *text, UNUSED_ARG(int server_qualified)) {
struct helpserv_bot *hs;
struct helpserv_cmd *cmd;
struct helpserv_user *hs_user;
char *argv[MAXNUMPARAMS];
+ char tmpline[MAXLEN];
int argc, argv_shift;
const int from_opserv = 0; /* for helpserv_notice */
}
argv_shift = 1;
- argc = split_line(text, false, ArrayLength(argv)-argv_shift, argv+argv_shift);
+ safestrncpy(tmpline, text, sizeof(tmpline));
+ argc = split_line(tmpline, false, ArrayLength(argv)-argv_shift, argv+argv_shift);
if (!argc)
return;
if (!cmd->func) {
helpserv_notice(user, "HSMSG_INTERNAL_COMMAND", argv[argv_shift]);
} else if (cmd->func(user, hs, 0, argc, argv+argv_shift)) {
- unsplit_string(argv+argv_shift, argc, text);
- log_audit(HS_LOG, LOG_COMMAND, user, hs->helpserv, hs->helpchan->name, 0, text);
+ unsplit_string(argv+argv_shift, argc, tmpline);
+ log_audit(HS_LOG, LOG_COMMAND, user, hs->helpserv, hs->helpchan->name, 0, tmpline);
}
}
mod_chanmode_init(&change);
change.argc = 1;
change.args[0].mode = MODE_REMOVE | MODE_VOICE;
- change.args[0].member = mn;
+ change.args[0].u.member = mn;
mod_chanmode_announce(hs->helpserv, hs->helpchan, &change);
}
}
mod_chanmode_init(&change);
change.argc = 1;
change.args[0].mode = MODE_VOICE;
- if ((change.args[0].member = GetUserMode(hs->helpchan, req->user)))
+ if ((change.args[0].u.member = GetUserMode(hs->helpchan, req->user)))
mod_chanmode_announce(hs->helpserv, hs->helpchan, &change);
}
REQUIRE_PARMS(2);
- assert(hs_user);
-
if (!(req = smart_get_request(hs, hs_user, argv[1], &num_requests))) {
helpserv_notice(user, "HSMSG_REQ_INVALID", argv[1]);
return 0;
REQUIRE_PARMS(3);
- assert(hs_user);
-
if (!(req = smart_get_request(hs, hs_user, argv[1], &num_requests))) {
helpserv_notice(user, "HSMSG_REQ_INVALID", argv[1]);
return 0;
mod_chanmode_init(&change);
change.argc = 1;
change.args[0].mode = MODE_CHANOP;
- change.args[0].member = AddChannelUser(hs->helpserv, hs->helpchan);
+ change.args[0].u.member = AddChannelUser(hs->helpserv, hs->helpchan);
mod_chanmode_announce(hs->helpserv, hs->helpchan, &change);
}
mod_chanmode_init(&change);
change.argc = 1;
change.args[0].mode = MODE_REMOVE | MODE_VOICE;
- change.args[0].member = mn;
+ change.args[0].u.member = mn;
mod_chanmode_announce(hs->helpserv, hs->helpchan, &change);
}
if(req->handle)
* it's a harmless default */
hs = calloc(1, sizeof(struct helpserv_bot));
- if (!(hs->helpserv = AddService(nick, helpserv_conf.description, NULL))) {
+ if (!(hs->helpserv = AddLocalUser(nick, nick, NULL, helpserv_conf.description, NULL))) {
free(hs);
return NULL;
}
mod_chanmode_init(&change);
change.argc = 1;
change.args[0].mode = MODE_CHANOP;
- change.args[0].member = AddChannelUser(hs->helpserv, hs->helpchan);
+ change.args[0].u.member = AddChannelUser(hs->helpserv, hs->helpchan);
mod_chanmode_announce(hs->helpserv, hs->helpchan, &change);
}
mod_chanmode_init(&change);
change.argc = 1;
change.args[0].mode = MODE_CHANOP;
- change.args[0].member = AddChannelUser(hs->helpserv, new_target);
+ change.args[0].u.member = AddChannelUser(hs->helpserv, new_target);
mod_chanmode_announce(hs->helpserv, new_target, &change);
}
hs->page_targets[idx] = new_target;
helpserv_conf.db_backup_frequency = str ? ParseInterval(str) : 7200;
str = database_get_data(conf_node, "description", RECDB_QSTRING);
- helpserv_conf.description = str;
+ helpserv_conf.description = str ? str : "Help Queue Manager";
str = database_get_data(conf_node, "reqlogfile", RECDB_QSTRING);
if (str && strlen(str))
mod_chanmode_init(&change);
change.argc = 1;
change.args[0].mode = MODE_VOICE;
- if ((change.args[0].member = GetUserMode(hs->helpchan, user)))
+ if ((change.args[0].u.member = GetUserMode(hs->helpchan, user)))
mod_chanmode_announce(hs->helpserv, hs->helpchan, &change);
}
}