improve MOTD
This commit is contained in:
@@ -74,7 +74,12 @@ class WTVIRC {
|
|||||||
this.oper_username = this.irc_config.oper_username || 'minisrv';
|
this.oper_username = this.irc_config.oper_username || 'minisrv';
|
||||||
this.oper_password = this.irc_config.oper_password || 'changeme573';
|
this.oper_password = this.irc_config.oper_password || 'changeme573';
|
||||||
this.oper_enabled = this.irc_config.oper_enabled || this.debug || false; // Default to off to prevent accidental use with default credentials
|
this.oper_enabled = this.irc_config.oper_enabled || this.debug || false; // Default to off to prevent accidental use with default credentials
|
||||||
this.irc_motd = this.irc_config.motd || 'Welcome to the minisrv WebTV IRC server!';
|
this.irc_motd = this.irc_config.motd || [
|
||||||
|
'Welcome to the zefIRCd IRC server, powered by minisrv.',
|
||||||
|
'This server is powered by Node.js, and the minisrv project.',
|
||||||
|
'For more information, visit:',
|
||||||
|
'https://github.com/zefie/zefie_wtvp_minisrv'
|
||||||
|
];
|
||||||
this.nicklen = this.irc_config.nick_len || 31;
|
this.nicklen = this.irc_config.nick_len || 31;
|
||||||
this.maxbans = this.irc_config.max_bans || 100;
|
this.maxbans = this.irc_config.max_bans || 100;
|
||||||
this.maxlimit = this.irc_config.max_limit || 50;
|
this.maxlimit = this.irc_config.max_limit || 50;
|
||||||
@@ -88,10 +93,12 @@ class WTVIRC {
|
|||||||
this.awaylen = this.irc_config.away_len || 200;
|
this.awaylen = this.irc_config.away_len || 200;
|
||||||
this.enable_tls = this.irc_config.enable_ssl || false;
|
this.enable_tls = this.irc_config.enable_ssl || false;
|
||||||
this.maxtargets = this.irc_config.max_targets || 4;
|
this.maxtargets = this.irc_config.max_targets || 4;
|
||||||
|
this.server_hello = this.irc_config.server_hello || `zefIRCd v${this.version} IRC server powered by minisrv`;
|
||||||
this.enable_eval = this.debug || false; // Enable eval in debug mode only
|
this.enable_eval = this.debug || false; // Enable eval in debug mode only
|
||||||
this.serverId = this.irc_config.server_id || '00A'; // Default server ID, can be overridden in config
|
this.serverId = this.irc_config.server_id || '00A'; // Default server ID, can be overridden in config
|
||||||
this.allow_public_vhosts = this.irc_config.allow_public_vhosts || true; // If true, users can set their host to a virtual host that is not a real hostname or IP address, if false, only opers can.
|
this.allow_public_vhosts = this.irc_config.allow_public_vhosts || true; // If true, users can set their host to a virtual host that is not a real hostname or IP address, if false, only opers can.
|
||||||
this.kick_insecure_users_on_secure = this.irc_config.kick_insecure_users_on_secure || true; // If true, users without SSL connections will be kicked from a channel when +Z is applied
|
this.kick_insecure_users_on_secure = this.irc_config.kick_insecure_users_on_secure || true; // If true, users without SSL connections will be kicked from a channel when +Z is applied
|
||||||
|
this.hide_version = this.irc_config.hide_version || false; // If true, the server will not send its version in the MOTD
|
||||||
this.clientpeak = 0;
|
this.clientpeak = 0;
|
||||||
this.globalpeak = 0;
|
this.globalpeak = 0;
|
||||||
this.socketpeak = 0;
|
this.socketpeak = 0;
|
||||||
@@ -365,7 +372,7 @@ class WTVIRC {
|
|||||||
socket.uniqueId = serverId;
|
socket.uniqueId = serverId;
|
||||||
socket.serverIdent = line;
|
socket.serverIdent = line;
|
||||||
this.servers.set(socket, serverName)
|
this.servers.set(socket, serverName)
|
||||||
socket.write(`SERVER ${this.servername} 1 ${this.serverId} + :${this.irc_motd}\r\n`);
|
socket.write(`SERVER ${this.servername} 1 ${this.serverId} + :${this.server_hello}\r\n`);
|
||||||
for (const [sock, nickname] of this.nicknames.entries()) {
|
for (const [sock, nickname] of this.nicknames.entries()) {
|
||||||
if (!sock || !nickname) continue;
|
if (!sock || !nickname) continue;
|
||||||
const uniqueId = sock.uniqueId;
|
const uniqueId = sock.uniqueId;
|
||||||
@@ -1183,7 +1190,7 @@ class WTVIRC {
|
|||||||
userChannels.push(prefix + ch);
|
userChannels.push(prefix + ch);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
output_lines.push(`:${this.serverId} 312 ${targetUniqueId} ${whoisNick} :${this.servername} :minisrv-${this.minisrv_config.version}\r\n`);
|
output_lines.push(`:${this.serverId} 312 ${targetUniqueId} ${whoisNick} :${this.servername} :zefIRCd v${this.version}\r\n`);
|
||||||
if (this.isIRCOp(whoisNick)) {
|
if (this.isIRCOp(whoisNick)) {
|
||||||
output_lines.push(`:${this.serverId} 313 ${targetUniqueId} ${whoisNick} :is an IRC operator\r\n`);
|
output_lines.push(`:${this.serverId} 313 ${targetUniqueId} ${whoisNick} :is an IRC operator\r\n`);
|
||||||
}
|
}
|
||||||
@@ -2978,14 +2985,14 @@ class WTVIRC {
|
|||||||
socket.write(`:${this.servername} 451 ${socket.uniqueId} ${command} :You have not registered\r\n`);
|
socket.write(`:${this.servername} 451 ${socket.uniqueId} ${command} :You have not registered\r\n`);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
this.doMOTD(socket.nickname, socket);
|
await this.doMOTD(socket.nickname, socket);
|
||||||
break;
|
break;
|
||||||
case 'VERSION':
|
case 'VERSION':
|
||||||
if (!socket.registered) {
|
if (!socket.registered) {
|
||||||
socket.write(`:${this.servername} 451 ${socket.uniqueId} ${command} :You have not registered\r\n`);
|
socket.write(`:${this.servername} 451 ${socket.uniqueId} ${command} :You have not registered\r\n`);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
socket.write(`:${this.servername} 351 ${socket.nickname} ${this.servername} minisrv ${this.minisrv_config.version} :minisrv IRC server\r\n`);
|
socket.write(`:${this.servername} 351 ${socket.nickname} ${this.servername} zefIRCd ${this.version} :zefIRCd IRC server\r\n`);
|
||||||
break;
|
break;
|
||||||
case 'WALLOPS':
|
case 'WALLOPS':
|
||||||
if (!socket.registered) {
|
if (!socket.registered) {
|
||||||
@@ -4072,31 +4079,40 @@ class WTVIRC {
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
} else if (mode === 'b') {
|
} else if (mode === 'b') {
|
||||||
|
// Get the list of channel bans
|
||||||
|
var output_lines = [];
|
||||||
if (this.channelbans.has(channel)) {
|
if (this.channelbans.has(channel)) {
|
||||||
const bans = Array.from(this.channelbans.get(channel));
|
const bans = Array.from(this.channelbans.get(channel));
|
||||||
for (const ban of bans) {
|
for (const ban of bans) {
|
||||||
socket.write(`:${this.servername} 367 ${nickname} ${channel} ${ban}\r\n`);
|
output_lines.push(`:${this.servername} 367 ${nickname} ${channel} ${ban}\r\n`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
socket.write(`:${this.servername} 368 ${nickname} ${channel} :End of channel ban list\r\n`);
|
output_lines.push(`:${this.servername} 368 ${nickname} ${channel} :End of channel ban list\r\n`);
|
||||||
|
this.sendThrottled(socket, output_lines);
|
||||||
return;
|
return;
|
||||||
} else if (mode === 'e') {
|
} else if (mode === 'e') {
|
||||||
|
// Get the list of channel exemptions
|
||||||
|
var output_lines = [];
|
||||||
if (this.channelexemptions.has(channel)) {
|
if (this.channelexemptions.has(channel)) {
|
||||||
const exemptions = Array.from(this.channelexemptions.get(channel));
|
const exemptions = Array.from(this.channelexemptions.get(channel));
|
||||||
for (const exemption of exemptions) {
|
for (const exemption of exemptions) {
|
||||||
socket.write(`:${this.servername} 348 ${nickname} ${channel} ${exemption}\r\n`);
|
output_lines.push(`:${this.servername} 348 ${nickname} ${channel} ${exemption}\r\n`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
socket.write(`:${this.servername} 349 ${nickname} ${channel} :End of channel exception list\r\n`);
|
output_lines.push(`:${this.servername} 349 ${nickname} ${channel} :End of channel exception list\r\n`);
|
||||||
|
this.sendThrottled(socket, output_lines);
|
||||||
return;
|
return;
|
||||||
} else if (mode === 'I') {
|
} else if (mode === 'I') {
|
||||||
|
// Get the list of channel invites masks
|
||||||
|
var output_lines = [];
|
||||||
if (this.channelinvites.has(channel)) {
|
if (this.channelinvites.has(channel)) {
|
||||||
const invites = Array.from(this.channelinvites.get(channel));
|
const invites = Array.from(this.channelinvites.get(channel));
|
||||||
for (const invite of invites) {
|
for (const invite of invites) {
|
||||||
socket.write(`:${this.servername} 336 ${nickname} ${channel} ${invite}\r\n`);
|
output_lines.push(`:${this.servername} 336 ${nickname} ${channel} ${invite}\r\n`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
socket.write(`:${this.servername} 337 ${nickname} ${channel} :End of channel invite list\r\n`);
|
output_lines.push(`:${this.servername} 337 ${nickname} ${channel} :End of channel invite list\r\n`);
|
||||||
|
this.sendThrottled(socket, output_lines);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
socket.write(`:${this.servername} 472 ${nickname} ${mode} :is unknown mode char to me\r\n`);
|
socket.write(`:${this.servername} 472 ${nickname} ${mode} :is unknown mode char to me\r\n`);
|
||||||
@@ -4104,12 +4120,24 @@ class WTVIRC {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
doMOTD(nickname, socket) {
|
async doMOTD(nickname, socket) {
|
||||||
// Sends the Message of the Day (MOTD) to the user
|
// Sends the Message of the Day (MOTD) to the user
|
||||||
socket.write(`:${this.servername} 375 ${nickname} :${this.servername} message of the day\r\n`);
|
var output_lines = [];
|
||||||
socket.write(`:${this.servername} 372 ${nickname} :This is zefIRCd v${this.version}, running on minisrv ${this.minisrv_config.version}\r\n`);
|
output_lines.push(`:${this.servername} 375 ${nickname} :${this.servername} message of the day\r\n`);
|
||||||
socket.write(`:${this.servername} 372 ${nickname} :${this.irc_motd}\r\n`);
|
if (!this.irc_config.hide_version) {
|
||||||
socket.write(`:${this.servername} 376 ${nickname} :End of /MOTD command\r\n`);
|
output_lines.push(`:${this.servername} 372 ${nickname} :This is zefIRCd v${this.version}, running on minisrv v${this.minisrv_config.version}\r\n`);
|
||||||
|
}
|
||||||
|
if (typeof this.irc_motd === 'string' && this.irc_motd.length > 0) {
|
||||||
|
output_lines.push(`:${this.servername} 372 ${nickname} :${this.irc_motd}\r\n`);
|
||||||
|
} else if (Array.isArray(this.irc_motd) && this.irc_motd.length > 0) {
|
||||||
|
for (const line of this.irc_motd) {
|
||||||
|
output_lines.push(`:${this.servername} 372 ${nickname} :${line}\r\n`);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
output_lines.push(`:${this.servername} 372 ${nickname} :No message of the day is set\r\n`);
|
||||||
|
}
|
||||||
|
output_lines.push(`:${this.servername} 376 ${nickname} :End of /MOTD command\r\n`);
|
||||||
|
await this.sendThrottled(socket, output_lines);
|
||||||
}
|
}
|
||||||
|
|
||||||
isReservedChannel(channel) {
|
isReservedChannel(channel) {
|
||||||
@@ -4475,7 +4503,7 @@ class WTVIRC {
|
|||||||
}
|
}
|
||||||
output_lines.push(`:${this.servername} 042 ${nickname} ${socket.uniqueId} :your unique ID\r\n`);
|
output_lines.push(`:${this.servername} 042 ${nickname} ${socket.uniqueId} :your unique ID\r\n`);
|
||||||
|
|
||||||
this.doMOTD(nickname, socket);
|
await this.doMOTD(nickname, socket);
|
||||||
|
|
||||||
const visibleClients = Array.from(this.nicknames.values()).filter(nick => {
|
const visibleClients = Array.from(this.nicknames.values()).filter(nick => {
|
||||||
const modes = this.usermodes.get(nick) || [];
|
const modes = this.usermodes.get(nick) || [];
|
||||||
|
|||||||
@@ -63,7 +63,6 @@
|
|||||||
"irc": {
|
"irc": {
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"port": 1667,
|
"port": 1667,
|
||||||
"motd": "Welcome to the minisrv WebTV IRC Server!",
|
|
||||||
"oper_username": "minisrv",
|
"oper_username": "minisrv",
|
||||||
"oper_password": "changeme573",
|
"oper_password": "changeme573",
|
||||||
"oper_enabled": false, // Don't enable with default credentials!
|
"oper_enabled": false, // Don't enable with default credentials!
|
||||||
|
|||||||
Reference in New Issue
Block a user