static dict_t opserv_hostinfo_dict; /* data is struct opserv_hostinfo* */
static dict_t opserv_user_alerts; /* data is struct opserv_user_alert* */
static dict_t opserv_nick_based_alerts; /* data is struct opserv_user_alert* */
+static dict_t opserv_account_based_alerts; /* data is struct opserv_user_alert* */
static dict_t opserv_channel_alerts; /* data is struct opserv_user_alert* */
static struct module *opserv_module;
static struct log_type *OS_LOG;
dict_insert(opserv_channel_alerts, name_dup, alert);
if (alert->discrim->mask_nick)
dict_insert(opserv_nick_based_alerts, name_dup, alert);
+ if (alert->discrim->accountmask)
+ dict_insert(opserv_account_based_alerts, name_dup, alert);
return alert;
}
return 0;
}
+static void
+opserv_alert_check_account(struct userNode *user, UNUSED_ARG(struct handle_info *old_handle))
+{
+ dict_foreach(opserv_account_based_alerts, alert_check_user, user);
+}
+
static void
opserv_alert_check_nick(struct userNode *user, UNUSED_ARG(const char *old_nick))
{
struct gag_entry *gag;
- dict_foreach(opserv_nick_based_alerts, alert_check_user, user);
+
+ dict_foreach(opserv_nick_based_alerts, alert_check_user, user);
+
/* Gag them if appropriate (and only if). */
user->modes &= ~FLAGS_GAGGED;
for (gag = gagList; gag; gag = gag->next) {
for (i=1; i<argc; i++) {
dict_remove(opserv_nick_based_alerts, argv[i]);
dict_remove(opserv_channel_alerts, argv[i]);
+ dict_remove(opserv_account_based_alerts, argv[i]);
if (dict_remove(opserv_user_alerts, argv[i]))
reply("OSMSG_REMOVED_ALERT", argv[i]);
else
opserv_channel_alerts = dict_new();
dict_delete(opserv_nick_based_alerts);
opserv_nick_based_alerts = dict_new();
+ dict_delete(opserv_account_based_alerts);
+ opserv_account_based_alerts = dict_new();
dict_delete(opserv_user_alerts);
opserv_user_alerts = dict_new();
dict_set_free_keys(opserv_user_alerts, free);
unreg_del_user_func(opserv_user_cleanup);
dict_delete(opserv_hostinfo_dict);
dict_delete(opserv_nick_based_alerts);
+ dict_delete(opserv_account_based_alerts);
dict_delete(opserv_channel_alerts);
dict_delete(opserv_user_alerts);
for (nn=0; nn<ArrayLength(level_strings); ++nn)
reg_del_channel_func(opserv_channel_delete);
reg_join_func(opserv_join_check);
reg_auth_func(opserv_staff_alert);
+ reg_auth_func(opserv_alert_check_account);
reg_notice_func(opserv, opserv_notice_handler);
opserv_db_init();