diff --git a/doc/example.conf b/doc/example.conf index a352ba0..d215c1d 100755 --- a/doc/example.conf +++ b/doc/example.conf @@ -500,6 +500,7 @@ general { default_operstring = "is an IRC Operator"; default_adminstring = "is a Server Administrator"; default_operhost = "staff.testnet.net"; + #static_quit = "I like turtles!"; servicestring = "is a Network Service"; disable_fake_channels = no; tkline_expire_notices = no; diff --git a/doc/reference.conf b/doc/reference.conf index 948b5d9..ea3a8df 100755 --- a/doc/reference.conf +++ b/doc/reference.conf @@ -1053,6 +1053,11 @@ general { */ default_operhost = "staff.testnet.net"; + /* static quit: Quit message to display for all users (not opers) + * on QUIT. + */ + #static_quit = "I like turtles!"; + /* servicestring: defines the response for opered services (+S) * in /whois queries, eg "is a Network Service". * This is updated on rehash. diff --git a/include/s_conf.h b/include/s_conf.h index fb37c31..05ffeba 100644 --- a/include/s_conf.h +++ b/include/s_conf.h @@ -139,6 +139,7 @@ struct config_file_entry char *default_operstring; char *default_adminstring; char *default_operhost; + char *static_quit; char *servicestring; char *kline_reason; diff --git a/modules/core/m_quit.c b/modules/core/m_quit.c index bc77f09..3851b0d 100644 --- a/modules/core/m_quit.c +++ b/modules/core/m_quit.c @@ -71,6 +71,12 @@ m_quit(struct Client *client_p, struct Client *source_p, int parc, const char *p comment = reason; } + if(!IsOper(source_p) && !EmptyString(ConfigFileEntry.static_quit)) + { + exit_client(client_p, source_p, source_p, ConfigFileEntry.static_quit); + return 0; + } + if(!IsOper(source_p) && (source_p->localClient->firsttime + ConfigFileEntry.anti_spam_exit_message_time) > rb_current_time()) diff --git a/modules/m_info.c b/modules/m_info.c index 2e0d7de..85209a9 100644 --- a/modules/m_info.c +++ b/modules/m_info.c @@ -157,6 +157,12 @@ static struct InfoStruct info_table[] = { &ConfigFileEntry.default_operhost, "Default vhost for operators to receive upon opering up.", }, + { + "static_quit", + OUTPUT_STRING, + &ConfigFileEntry.static_quit, + "Quit message to show for all users.", + }, { "servicestring", OUTPUT_STRING, diff --git a/src/newconf.c b/src/newconf.c index 1d71b04..ca9dff5 100644 --- a/src/newconf.c +++ b/src/newconf.c @@ -2188,6 +2188,7 @@ static struct ConfEntry conf_general_table[] = { "default_operstring", CF_QSTRING, NULL, REALLEN, &ConfigFileEntry.default_operstring }, { "default_adminstring",CF_QSTRING, NULL, REALLEN, &ConfigFileEntry.default_adminstring }, { "default_operhost", CF_QSTRING, NULL, REALLEN, &ConfigFileEntry.default_operhost }, + { "static_quit", CF_QSTRING, NULL, REALLEN, &ConfigFileEntry.static_quit }, { "servicestring", CF_QSTRING, NULL, REALLEN, &ConfigFileEntry.servicestring }, { "egdpool_path", CF_QSTRING, NULL, MAXPATHLEN, &ConfigFileEntry.egdpool_path }, { "kline_reason", CF_QSTRING, NULL, REALLEN, &ConfigFileEntry.kline_reason }, diff --git a/src/s_conf.c b/src/s_conf.c index c6a1770..6239ed2 100644 --- a/src/s_conf.c +++ b/src/s_conf.c @@ -682,6 +682,7 @@ set_default_conf(void) ConfigFileEntry.default_operstring = rb_strdup("is an IRC operator"); ConfigFileEntry.default_adminstring = rb_strdup("is a Server Administrator"); ConfigFileEntry.default_operhost = rb_strdup(""); + ConfigFileEntry.static_quit = rb_strdup(""); ConfigFileEntry.servicestring = rb_strdup("is a Network Service"); ConfigFileEntry.default_umodes = UMODE_INVISIBLE;