Skip to content

Commit

Permalink
Several fixes
Browse files Browse the repository at this point in the history
- Added msg delay on connect to space out commands
- Fixed linewrap issue
- Added MRC Trust verbs
- Added PM local echo
- Fixed to_user and from_user uppercase
  • Loading branch information
stack-fault committed Aug 27, 2024
1 parent 5b6fc32 commit 27937ed
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 25 deletions.
68 changes: 50 additions & 18 deletions core/mrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -275,21 +275,7 @@ exports.getModule = class mrcModule extends MenuModule {
const chatLogView = this.viewControllers.mrcChat.getView(
MciViewIds.mrcChat.chatLog
);
const messageLength = stripMciColorCodes(msg).length;
const chatWidth = chatLogView.dimens.width;
let padAmount = 0;
let spaces = 2;

if (messageLength > chatWidth) {
padAmount = chatWidth - (messageLength % chatWidth) - spaces;
} else {
padAmount = chatWidth - messageLength - spaces;
}

if (padAmount < 0) padAmount = 0;

const padding = ' |00' + ' '.repeat(padAmount);
chatLogView.addText(pipeToAnsi(msg + padding));
chatLogView.addText(pipeToAnsi(msg));

if (chatLogView.getLineCount() > this.config.maxScrollbackLines) {
chatLogView.deleteLine(0);
Expand Down Expand Up @@ -380,7 +366,7 @@ exports.getModule = class mrcModule extends MenuModule {

// Deliver PrivMsg
else if (
message.to_user.toLowerCase() == this.state.alias.toLowerCase()
message.to_user.toUpperCase() == this.state.alias.toUpperCase()
) {
const currentTime = moment().format(
this.client.currentTheme.helpers.getTimeFormat()
Expand Down Expand Up @@ -450,6 +436,14 @@ exports.getModule = class mrcModule extends MenuModule {
} else {
// pm
formattedMessage = stringFormat(privateMessageFormat, textFormatObj);

// Echo PrivMSG to chat log (the server does not echo it back)
const currentTime =moment().format(
this.client.currentTheme.helpers.getTimeFormat()
);
this.addMessageToChatLog(
'|08' + currentTime + '|00 ' + formattedMessage + '|00'
);
}

try {
Expand Down Expand Up @@ -562,6 +556,7 @@ exports.getModule = class mrcModule extends MenuModule {
/**
* Process known additional server commands directly
*/

case 'afk':
this.sendServerMessage(`AFK ${message.substr(5)}`);
break;
Expand Down Expand Up @@ -594,6 +589,30 @@ exports.getModule = class mrcModule extends MenuModule {
this.sendServerMessage(cmd[0].toUpperCase());
break;

/**
* MRC Trust commands
*/

case 'trust':
this.sendServerMessage(`REGISTER ${message.substr(7)}`);
break;

case 'register':
this.sendServerMessage(`REGISTER ${message.substr(10)}`);
break;

case 'identify':
this.sendServerMessage(`IDENTIFY ${message.substr(10)}`);
break;

case 'update':
this.sendServerMessage(`UPDATE ${message.substr(8)}`);
break;

/**
* Local client commands
*/

case 'quit':
return this.prevMenu();

Expand Down Expand Up @@ -665,13 +684,26 @@ exports.getModule = class mrcModule extends MenuModule {
this.sendServerMessage('USERLIST');
}

/**
* MRC Server flood protection requires messages to be spaced in time
*/
msgDelay(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}

/**
* Things that happen when a local user connects to the MRC multiplexer
*/
clientConnect() {
async clientConnect() {
this.sendHeartbeat();
await this.msgDelay(100);

this.sendServerMessage('MOTD');
await this.msgDelay(100);

this.joinRoom('lobby');
await this.msgDelay(100);

this.sendServerMessage('STATS');
this.sendHeartbeat();
}
};
12 changes: 5 additions & 7 deletions core/servers/chat/mrc_multiplexer.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ const os = require('os');

// MRC
const clientVersion = '1.3.1';
const lineDelimiter = new RegExp('\r\n|\r|\n'); // eslint-disable-line no-control-regex
const lineDelimiter = new RegExp('\r\n|\r|\n|\n\r'); // eslint-disable-line no-control-regex

const ModuleInfo = (exports.moduleInfo = {
name: 'MRC',
Expand Down Expand Up @@ -327,19 +327,17 @@ exports.getModule = class MrcModule extends ServerModule {
* Takes an MRC message and parses it into something usable
*/
parseMessage(line) {
const [from_user, from_site, from_room, to_user, to_site, to_room, body] =
let [from_user, from_site, from_room, to_user, to_site, to_room, body] =
line.split('~');

// const msg = line.split('~');
// if (msg.length < 7) {
// return;
// }

// Make sure to_user is always uppercase
try {
to_user = to_user.toUpperCase();
}
catch (e) {}
// Make sure to_user and from_user are always uppercase
to_user = (to_user || '').toUpperCase();
from_user = (from_user || '').toUpperCase();

return { from_user, from_site, from_room, to_user, to_site, to_room, body };
}
Expand Down

0 comments on commit 27937ed

Please sign in to comment.