From 86b135b3e0a76680af677cca491b471d6c0d6429 Mon Sep 17 00:00:00 2001 From: EyesOfAHawk Date: Tue, 16 Oct 2018 19:53:33 +1300 Subject: Add config for '@channel setopt MessageDelay '. --- conf/channels.conf | 6 ++++++ conf/messages.conf | 2 +- src/map/atcommand.c | 4 ++-- src/map/channel.c | 13 ++++++++++++- src/map/channel.h | 1 + 5 files changed, 22 insertions(+), 4 deletions(-) diff --git a/conf/channels.conf b/conf/channels.conf index 9c2b567f4..c8f14aa27 100644 --- a/conf/channels.conf +++ b/conf/channels.conf @@ -64,5 +64,11 @@ chsys: ( irc_flood_protection_enabled: true /* Whether to enable anti-flood protection for outgoing messages */ irc_flood_protection_rate: 1000 /* The delay between messages during anti-flood protection (milliseconds) */ irc_flood_protection_burst: 3 /* The maximum number of messages that are sent at once burst size before triggering the anti-flood protection */ + + // @channel setopt MessageDelay + // Sets the maximum amount of message delay (in seconds) allowed for a channel. + // Default: 10 + // Max: 255 + channel_opt_msg_delay: 10 } ) diff --git a/conf/messages.conf b/conf/messages.conf index 9fc85cb55..dd4edb477 100644 --- a/conf/messages.conf +++ b/conf/messages.conf @@ -1495,7 +1495,7 @@ 1448: -- Available options 1449: option '%s' is already enabled, if you'd like to disable it type '@channel opt %s 0' 1450: option '%s' is now enabled for channel '%s' -1451: value '%d' for option '%s' is out of range (limit is 0-10) +1451: value '%d' for option '%s' is out of range (limit is 0-%d) 1452: option '%s' is now enabled for channel '%s' with %d seconds 1453: option '%s' is now disabled for channel '%s' 1454: option '%s' is not enabled on channel '%s' diff --git a/src/map/atcommand.c b/src/map/atcommand.c index a7dc5dd95..0fdbe107f 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -9398,8 +9398,8 @@ ACMD(channel) } else { int v = atoi(sub3); if (k == HCS_OPT_MSG_DELAY) { - if (v < 0 || v > 10) { - safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd,1451), v, opt_str[k]);// value '%d' for option '%s' is out of range (limit is 0-10) + if (v < 0 || v > channel->config->channel_opt_msg_delay) { + safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 1451), v, opt_str[k], channel->config->channel_opt_msg_delay);// value '%d' for option '%s' is out of range (limit is 0-%d) clif->message(fd, atcmd_output); return false; } diff --git a/src/map/channel.c b/src/map/channel.c index f1946385d..73398c152 100644 --- a/src/map/channel.c +++ b/src/map/channel.c @@ -622,7 +622,8 @@ static void read_channels_config(void) irc_autojoin = 0, irc_flood_protection_rate = 0, irc_flood_protection_burst = 0, - irc_flood_protection_enabled = 0; + irc_flood_protection_enabled = 0, + channel_opt_msg_delay = 10; if( !libconfig->setting_lookup_string(settings, "map_local_channel_name", &local_name) ) local_name = "map"; @@ -818,6 +819,16 @@ static void read_channels_config(void) } } + libconfig->setting_lookup_int(settings, "channel_opt_msg_delay", &channel_opt_msg_delay); + if (channel_opt_msg_delay < 0) { + ShowWarning("channels.conf: channel_opt_msg_delay value '%d' must be from 0-255. Defaulting to 0...\n", channel_opt_msg_delay); + channel_opt_msg_delay = 0; + } else if (channel_opt_msg_delay > 255) { + ShowWarning("channels.conf: channel_opt_msg_delay value '%d' must be from 0-255. Defaulting to 255...\n", channel_opt_msg_delay); + channel_opt_msg_delay = 255; + } + channel->config->channel_opt_msg_delay = channel_opt_msg_delay; + ShowStatus("Done reading '"CL_WHITE"%u"CL_RESET"' channels in '"CL_WHITE"%s"CL_RESET"'.\n", db_size(channel->db), config_filename); } libconfig->destroy(&channels_conf); diff --git a/src/map/channel.h b/src/map/channel.h index 4ac3c6037..c56227c66 100644 --- a/src/map/channel.h +++ b/src/map/channel.h @@ -75,6 +75,7 @@ struct Channel_Config { char irc_server[40], irc_channel[50], irc_nick[40], irc_nick_pw[30]; unsigned short irc_server_port; bool irc_use_ghost; + int channel_opt_msg_delay; }; struct channel_ban_entry { -- cgit v1.2.3-60-g2f50