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 messages = chat.map((item, index) => {
const punctuation = item.message.match(/(\.+$)/); let message;
let period; /* Do not perform extra parsing on player-generated
if (punctuation) { * messages */
period = punctuation[1]; if (item.normalChat) {
message = <div key={`line-${index}`}>{item.message}</div>;
} else { } else {
period = ''; const punctuation = item.message.match(/(\.+$)/);
} let period;
let lines = item.message.split('.'); if (punctuation) {
const message = lines period = punctuation[1];
.filter(line => line.trim() !== '') } else {
.map((line, index) => { period = '';
/* 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 = '';
}
} }
return <div key={`line-${index}`}>{ message }{ period }</div>; 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 = '';
}
}
return <div key={`line-${index}`}>{ message }{ period }</div>;
});
}
return ( return (
<ListItem key={`msg-${item.date}`} className={item.color ? '' : 'System'}> <ListItem key={`msg-${item.date}`}
className={item.color ? '' : 'System'}>
{ item.color && { item.color &&
<PlayerColor color={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 }); 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 now = Date.now();
let lastTime = 0; let lastTime = 0;
if (game.chat.length) { if (game.chat.length) {
@ -1039,6 +1039,9 @@ const addChatMessage = (game, session, message) => {
date: now, date: now,
message: message message: message
}; };
if (isNormalChat) {
entry.normalChat = true;
}
if (session && session.name) { if (session && session.name) {
entry.from = session.name; entry.from = session.name;
} }
@ -3694,7 +3697,7 @@ router.ws("/ws/:id", async (ws, req) => {
case 'chat': case 'chat':
console.log(`${short}:${id} - ${data.type} - ${data.message}`) 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); parseChatCommands(game, data.message);
sendUpdateToPlayers(game, { chat: game.chat }); sendUpdateToPlayers(game, { chat: game.chat });
saveGame(game); saveGame(game);