diff --git a/src/components/views/rooms/SendMessageComposer.js b/src/components/views/rooms/SendMessageComposer.js index c8f8ab1293..7987949524 100644 --- a/src/components/views/rooms/SendMessageComposer.js +++ b/src/components/views/rooms/SendMessageComposer.js @@ -174,11 +174,27 @@ export default class SendMessageComposer extends React.Component { _isSlashCommand() { const parts = this.model.parts; - return parts.length && parts[0].type === "command"; + const firstPart = parts[0]; + if (firstPart) { + if (firstPart.type === "command") { + return true; + } + // be extra resilient when somehow the AutocompleteWrapperModel or + // CommandPartCreator fails to insert a command part, so we don't send + // a command as a message + if (firstPart.type === "plain" && firstPart.text.startsWith("/")) { + return true; + } + } + return false; } async _runSlashCommand() { const commandText = this.model.parts.reduce((text, part) => { + // use mxid to textify user pills in a command + if (part.type === "user-pill") { + return text + part.resourceId; + } return text + part.text; }, ""); const cmd = processCommandInput(this.props.room.roomId, commandText);