1
0

Do not parse player messages

Signed-off-by: James Ketrenos <james_eikona@ketrenos.com>
This commit is contained in:
James Ketrenos 2022-03-26 10:13:53 -07:00
parent 0421166bc9
commit c13b173c18
2 changed files with 51 additions and 37 deletions

View File

@ -115,45 +115,56 @@ const Chat = () => {
});
const messages = chat.map((item, index) => {
const punctuation = item.message.match(/(\.+$)/);
let period;
if (punctuation) {
period = punctuation[1];
let message;
/* Do not perform extra parsing on player-generated
* messages */
if (item.normalChat) {
message = <div key={`line-${index}`}>{item.message}</div>;
} else {
period = '';
}
let lines = item.message.split('.');
const message = lines
.filter(line => line.trim() !== '')
.map((line, index) => {
/* If the date is in the future, set it to now */
const dice = line.match(/^(.*rolled )([1-6])(, ([1-6]))?(.*)$/);
if (dice) {
if (dice[4]) {
return <div key={`line-${index}`}>{dice[1]}<Dice pips={dice[2]}/>,
<Dice pips={dice[4]}/>{dice[5]}{ period }</div>;
} else {
return <div key={`line-${index}`}>{dice[1]}<Dice pips={dice[2]}/>{dice[5]}{ period }</div>;
}
const punctuation = item.message.match(/(\.+$)/);
let period;
if (punctuation) {
period = punctuation[1];
} else {
period = '';
}
let lines = item.message.split('.');
message = lines
.filter(line => line.trim() !== '')
.map((line, index) => {
/* If the date is in the future, set it to now */
const dice = line.match(/^(.*rolled )([1-6])(, ([1-6]))?(.*)$/);
if (dice) {
if (dice[4]) {
return <div key={`line-${index}`}>{dice[1]}
<Dice pips={dice[2]}/>,
<Dice pips={dice[4]}/>{dice[5]}{ period }</div>;
} else {
return <div key={`line-${index}`}>{dice[1]}
<Dice pips={dice[2]}/>{dice[5]}{ period }</div>;
}
}
let start = line, message;
while (start) {
const resource = start.match(/^(.*)(([0-9]+) (wood|sheep|wheat|stone|brick),?)(.*)$/);
if (resource) {
const count = resource[3] ? parseInt(resource[3]) : 1;
message = <><Resource label={true} count={count} type={resource[4]}/>{resource[5]}{message}</>;
start = resource[1];
} else {
message = <>{start}{message}</>;
start = '';
let start = line, message;
while (start) {
const resource = start.match(/^(.*)(([0-9]+) (wood|sheep|wheat|stone|brick),?)(.*)$/);
if (resource) {
const count = resource[3] ? parseInt(resource[3]) : 1;
message = <><Resource label={true} count={count}
type={resource[4]}/>{resource[5]}{message}</>;
start = resource[1];
} else {
message = <>{start}{message}</>;
start = '';
}
}
}
return <div key={`line-${index}`}>{ message }{ period }</div>;
});
return <div key={`line-${index}`}>{ message }{ period }</div>;
});
}
return (
<ListItem key={`msg-${item.date}`} className={item.color ? '' : 'System'}>
<ListItem key={`msg-${item.date}`}
className={item.color ? '' : 'System'}>
{ item.color &&
<PlayerColor color={item.color}/>
}

View File

@ -1025,7 +1025,7 @@ const addActivity = (game, session, message) => {
game.activities.push({ color: session ? session.color : '', message, date });
}
const addChatMessage = (game, session, message) => {
const addChatMessage = (game, session, message, isNormalChat) => {
let now = Date.now();
let lastTime = 0;
if (game.chat.length) {
@ -1039,6 +1039,9 @@ const addChatMessage = (game, session, message) => {
date: now,
message: message
};
if (isNormalChat) {
entry.normalChat = true;
}
if (session && session.name) {
entry.from = session.name;
}
@ -3694,7 +3697,7 @@ router.ws("/ws/:id", async (ws, req) => {
case 'chat':
console.log(`${short}:${id} - ${data.type} - ${data.message}`)
addChatMessage(game, session, `${session.name}: ${data.message}`);
addChatMessage(game, session, `${session.name}: ${data.message}`, true);
parseChatCommands(game, data.message);
sendUpdateToPlayers(game, { chat: game.chat });
saveGame(game);