X-Git-Url: https://jfr.im/git/irc/evilnet/x3.git/blobdiff_plain/d76ed9a966ee3d955c8ef00ecc02e643c2005e2e..c9bf23febfe7c108b9da7dd1937b586eace40812:/src/mod-helpserv.c diff --git a/src/mod-helpserv.c b/src/mod-helpserv.c index 1a8efc5..2557458 100644 --- a/src/mod-helpserv.c +++ b/src/mod-helpserv.c @@ -1,9 +1,9 @@ /* mod-helpserv.c - Support Helper assistant service * Copyright 2002-2003 srvx Development Team * - * This file is part of srvx. + * This file is part of x3. * - * srvx is free software; you can redistribute it and/or modify + * x3 is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. @@ -218,6 +218,7 @@ static const struct message_entry msgtab[] = { { "HSMSG_REQ_PERSIST_PART", "Everything you tell me until you are helped (or you leave %s) will be recorded. If you part %s, your request will be lost." }, { "HSMSG_REQ_PERSIST_HANDLE", "Everything you tell me until you are helped will be recorded." }, { "HSMSG_REQ_MAXLEN", "Sorry, but your request has reached the maximum number of lines. Please wait to be assigned to a helper and continue explaining your request to them." }, + { "HSMSQ_REQ_TEXT_ADDED", "Message from $b%s:$b %s" }, { "HSMSG_REQ_FOUND_ANOTHER", "Request ID#%lu has been closed. $S detected that you also have request ID#%lu open. If you send $S a message, it will be associated with that request." }, /* Messages that are inserted into request text */ @@ -958,7 +959,7 @@ static struct helpserv_request * create_request(struct userNode *user, struct he 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); } @@ -1072,7 +1073,7 @@ static void helpserv_usermsg(struct userNode *user, struct helpserv_bot *hs, cha 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); @@ -1085,7 +1086,22 @@ static void helpserv_usermsg(struct userNode *user, struct helpserv_bot *hs, cha req->updated = now; if (!hs->req_maxlen || req->text->used < hs->req_maxlen) + { string_list_append(req->text, strdup(text)); + + struct userNode *likely_helper; + /* Find somebody likely to be the helper */ + if (!req->helper) + likely_helper = NULL; + else if ((likely_helper = req->helper->handle->users) && !likely_helper->next_authed) { + /* only one user it could be :> */ + } else for (likely_helper = req->helper->handle->users; likely_helper; likely_helper = likely_helper->next_authed) + if (GetUserMode(hs->helpchan, likely_helper)) + break; + + if(likely_helper) + send_target_message(1, likely_helper->nick, hs->helpserv, "HSMSQ_REQ_TEXT_ADDED", user->nick, text); + } else helpserv_msguser(user, "HSMSG_REQ_MAXLEN"); } @@ -1392,7 +1408,7 @@ static int show_helper_range(struct userNode *user, struct helpserv_bot *hs, int struct helpfile_table tbl; struct helpserv_user *hs_user; dict_iterator_t it; - enum helpserv_level last_level; +/* enum helpserv_level last_level; Zoot style */ unsigned int ii; users.used = 0; @@ -1413,7 +1429,8 @@ static int show_helper_range(struct userNode *user, struct helpserv_bot *hs, int } qsort(users.list, users.used, sizeof(users.list[0]), helpserv_user_comp); switch (user->handle_info->userlist_style) { - case HI_STYLE_DEF: + default: + case HI_STYLE_NORMAL: tbl.length = users.used + 1; tbl.width = 3; tbl.flags = TABLE_NO_FREE; @@ -1431,6 +1448,7 @@ static int show_helper_range(struct userNode *user, struct helpserv_bot *hs, int } table_send((from_opserv ? opserv : hs->helpserv), user->nick, 0, NULL, tbl); break; + /* case HI_STYLE_ZOOT: default: last_level = HlNone; tbl.length = 0; @@ -1454,6 +1472,7 @@ static int show_helper_range(struct userNode *user, struct helpserv_bot *hs, int helpserv_notice(user, "HSMSG_USERLIST_ZOOT_LVL", hs->helpserv->nick, helpserv_level_names[last_level]); table_send((from_opserv ? opserv : hs->helpserv), user->nick, 0, NULL, tbl); } + */ } return 1; } @@ -1550,7 +1569,7 @@ static void free_request(void *data) { /* Logging */ if (shutting_down && (req->hs->persist_types[PERSIST_T_REQUEST] != PERSIST_CLOSE || !req->handle)) { - helpserv_log_request(req, "srvx shutdown"); + helpserv_log_request(req, "X3 shutdown"); } /* Clean up from the unhandled queue */ @@ -1676,7 +1695,7 @@ static HELPSERV_FUNC(cmd_close) { 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); } } @@ -1880,7 +1899,7 @@ static int helpserv_assign(int from_opserv, struct helpserv_bot *hs, struct user 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); } @@ -1904,8 +1923,6 @@ static HELPSERV_FUNC(cmd_show) { 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; @@ -1990,8 +2007,6 @@ static HELPSERV_FUNC(cmd_addnote) { 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; @@ -2201,7 +2216,7 @@ static HELPSERV_FUNC(cmd_move) { REQUIRE_PARMS(2); if (is_valid_nick(argv[1])) { - char *newnick = argv[1], oldnick[NICKLEN], reason[MAXLEN]; + char *newnick = argv[1], oldnick[NICKLEN]; strcpy(oldnick, hs->helpserv->nick); @@ -2216,8 +2231,8 @@ static HELPSERV_FUNC(cmd_move) { helpserv_notice(user, "HSMSG_RENAMED", oldnick, newnick); - snprintf(reason, MAXLEN, "HelpServ bot %s (in %s) renamed to %s by %s.", oldnick, hs->helpchan->name, newnick, user->nick); - global_message(MESSAGE_RECIPIENT_OPERS, reason); + global_message_args(MESSAGE_RECIPIENT_OPERS, "HSMSG_BOT_RENAMED", oldnick, + hs->helpchan->name, newnick, user->nick); return 1; } else if (IsChannelName(argv[1])) { @@ -2250,14 +2265,14 @@ static HELPSERV_FUNC(cmd_move) { } if (!(hs->helpchan = GetChannel(newchan))) { - hs->helpchan = AddChannel(newchan, now, NULL, NULL); + hs->helpchan = AddChannel(newchan, now, NULL, NULL, NULL); AddChannelUser(hs->helpserv, hs->helpchan)->modes |= MODE_CHANOP; } else if (!helpserv_in_channel(hs, old_helpchan)) { struct mod_chanmode change; 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); } @@ -2267,8 +2282,8 @@ static HELPSERV_FUNC(cmd_move) { } helpserv_botlist_append(botlist, hs); - snprintf(reason, MAXLEN, "HelpServ %s (%s) moved to %s by %s.", hs->helpserv->nick, oldchan, newchan, user->nick); - global_message(MESSAGE_RECIPIENT_OPERS, reason); + global_message_args(MESSAGE_RECIPIENT_OPERS, "HSMSG_BOT_MOVED", hs->helpserv->nick, + oldchan, newchan, user->nick); return 1; } else { @@ -2336,7 +2351,7 @@ static void helpserv_page_helper_gone(struct helpserv_bot *hs, struct helpserv_r 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) @@ -2603,7 +2618,7 @@ static struct helpserv_bot *register_helpserv(const char *nick, const char *help * it's a harmless default */ hs = calloc(1, sizeof(struct helpserv_bot)); - if (!(hs->helpserv = AddService(nick, helpserv_conf.description, NULL))) { + if (!(hs->helpserv = AddService(nick, "+iok", helpserv_conf.description, NULL))) { free(hs); return NULL; } @@ -2611,14 +2626,14 @@ static struct helpserv_bot *register_helpserv(const char *nick, const char *help reg_privmsg_func(hs->helpserv, helpserv_botmsg); if (!(hs->helpchan = GetChannel(help_channel))) { - hs->helpchan = AddChannel(help_channel, now, NULL, NULL); + hs->helpchan = AddChannel(help_channel, now, NULL, NULL, NULL); AddChannelUser(hs->helpserv, hs->helpchan)->modes |= MODE_CHANOP; } else { struct mod_chanmode change; 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); } @@ -2644,7 +2659,7 @@ static struct helpserv_bot *register_helpserv(const char *nick, const char *help } static HELPSERV_FUNC(cmd_register) { - char *nick, *helpchan, reason[MAXLEN]; + char *nick, *helpchan; struct handle_info *handle; REQUIRE_PARMS(4); @@ -2680,9 +2695,9 @@ static HELPSERV_FUNC(cmd_register) { helpserv_notice(user, "HSMSG_REG_SUCCESS", handle->handle, nick); - snprintf(reason, MAXLEN, "HelpServ %s (%s) registered to %s by %s.", nick, hs->helpchan->name, handle->handle, user->nick); /* Not sent to helpers, since they can't register HelpServ */ - global_message(MESSAGE_RECIPIENT_OPERS, reason); + global_message_args(MESSAGE_RECIPIENT_OPERS, "HSMSG_BOT_REGISTERED", nick, + hs->helpchan->name, handle->handle, user->nick); return 1; } @@ -2723,8 +2738,7 @@ static void helpserv_unregister(struct helpserv_bot *bot, const char *quit_fmt, snprintf(reason, sizeof(reason), quit_fmt, actor); DelUser(bot->helpserv, NULL, 1, reason); dict_remove(helpserv_bots_dict, botname); - snprintf(reason, sizeof(reason), global_fmt, botname, channame, actor); - global_message(MESSAGE_RECIPIENT_OPERS, reason); + global_message_args(MESSAGE_RECIPIENT_OPERS, global_fmt, botname, channame, actor); } static HELPSERV_FUNC(cmd_unregister) { @@ -2736,7 +2750,7 @@ static HELPSERV_FUNC(cmd_unregister) { log_audit(HS_LOG, LOG_COMMAND, user, hs->helpserv, hs->helpchan->name, 0, "unregister CONFIRM"); } - helpserv_unregister(hs, "Unregistered by %s", "HelpServ %s (%s) unregistered by %s.", user->nick); + helpserv_unregister(hs, "Unregistered by %s", "HSMSG_BOT_UNREGISTERED", user->nick); return from_opserv; } @@ -2752,7 +2766,7 @@ static HELPSERV_FUNC(cmd_expire) { next = iter_next(it); if ((unsigned int)(now - bot->last_active) < helpserv_conf.expire_age) continue; - helpserv_unregister(bot, "Registration expired due to inactivity", "HelpServ %s (%s) expired at request of %s.", user->nick); + helpserv_unregister(bot, "Registration expired due to inactivity", "HSMSG_BOT_EXPIRED", user->nick); count++; } helpserv_notice(user, "HSMSG_EXPIRATION_DONE", count); @@ -2858,7 +2872,7 @@ static void set_page_target(struct helpserv_bot *hs, enum page_source idx, const } new_target = GetChannel(target); if (!new_target) { - new_target = AddChannel(target, now, NULL, NULL); + new_target = AddChannel(target, now, NULL, NULL, NULL); AddChannelUser(hs->helpserv, new_target); } } else { @@ -2875,7 +2889,7 @@ static void set_page_target(struct helpserv_bot *hs, enum page_source idx, const 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; @@ -3652,7 +3666,7 @@ static void helpserv_conf_read(void) { 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)) @@ -3906,7 +3920,7 @@ static void associate_requests_bybot(struct helpserv_bot *hs, struct userNode *u 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); } }