};
}, [roomId]);
- const sendBody = async (body, msgType = 'm.text') => {
+ const sendBody = async (body, options) => {
+ const opt = options ?? {};
+ if (!opt.msgType) opt.msgType = 'm.text';
+ if (typeof opt.autoMarkdown !== 'boolean') opt.autoMarkdown = true;
if (roomsInput.isSending(roomId)) return;
sendIsTyping(false);
}
textAreaRef.current.disabled = true;
textAreaRef.current.style.cursor = 'not-allowed';
- await roomsInput.sendInput(roomId, msgType);
+ await roomsInput.sendInput(roomId, opt);
textAreaRef.current.disabled = false;
textAreaRef.current.style.cursor = 'unset';
focusInput();
confirmDialog('Invalid Command', `"${cmdName}" is not a valid command.`, 'Alright');
return;
}
- if (['me', 'shrug'].includes(cmdName)) {
- commands[cmdName].exe(roomId, cmdData, (message, msgType) => sendBody(message, msgType));
+ if (['me', 'shrug', 'plain'].includes(cmdName)) {
+ commands[cmdName].exe(roomId, cmdData, sendBody);
return;
}
commands[cmdName].exe(roomId, cmdData);
return;
}
if (msgBody === '' && attachment === null) return;
- sendBody(msgBody, 'm.text');
+ sendBody(msgBody);
};
const handleSendSticker = async (data) => {
exe: (roomId, data, onSuccess) => {
const body = data.trim();
if (body === '') return;
- onSuccess(body, 'm.emote');
+ onSuccess(body, { msgType: 'm.emote' });
},
},
shrug: {
description: 'Send ¯\\_(ツ)_/¯ as message',
exe: (roomId, data, onSuccess) => onSuccess(
`¯\\_(ツ)_/¯${data.trim() !== '' ? ` ${data}` : ''}`,
- 'm.text',
+ { msgType: 'm.text' },
),
},
+ plain: {
+ name: 'plain',
+ description: 'Send plain text message',
+ exe: (roomId, data, onSuccess) => {
+ const body = data.trim();
+ if (body === '') return;
+ onSuccess(body, { msgType: 'm.text', autoMarkdown: false });
+ },
+ },
help: {
name: 'help',
description: 'View all commands',
return this.roomIdToInput.get(roomId)?.isSending || false;
}
- async sendInput(roomId, msgType) {
+ async sendInput(roomId, options) {
+ const { msgType, autoMarkdown } = options;
const room = this.matrixClient.getRoom(roomId);
const input = this.getInput(roomId);
input.isSending = true;
};
// Apply formatting if relevant
- let formattedBody = settings.isMarkdown
+ let formattedBody = settings.isMarkdown && autoMarkdown
? getFormattedBody(rawMessage)
: sanitizeText(rawMessage);
- formattedBody = formatUserPill(room, formattedBody);
- formattedBody = formatEmoji(this.matrixClient, room, this.roomList, formattedBody);
+ if (autoMarkdown) {
+ formattedBody = formatUserPill(room, formattedBody);
+ formattedBody = formatEmoji(this.matrixClient, room, this.roomList, formattedBody);
+
+ content.body = findAndReplace(
+ content.body,
+ MXID_REGEX,
+ (match) => room.currentState.userIdsToDisplayNames[match[0]],
+ (match) => `@${room.currentState.userIdsToDisplayNames[match[0]]}`,
+ );
+ }
- content.body = findAndReplace(
- content.body,
- MXID_REGEX,
- (match) => room.currentState.userIdsToDisplayNames[match[0]],
- (match) => `@${room.currentState.userIdsToDisplayNames[match[0]]}`,
- );
if (formattedBody !== sanitizeText(rawMessage)) {
// Formatting was applied, and we need to switch to custom HTML
content.format = 'org.matrix.custom.html';