diff --git a/src/protections/FirstMessageIsImage.ts b/src/protections/FirstMessageIsImage.ts
index 65922dde..1b7ddd93 100644
--- a/src/protections/FirstMessageIsImage.ts
+++ b/src/protections/FirstMessageIsImage.ts
@@ -82,7 +82,10 @@ export class FirstMessageIsImageProtection extends AbstractProtection implements
const roomID = room.toRoomIDOrAlias();
if (!this.justJoined[roomID]) this.justJoined[roomID] = [];
if (Value.Check(RoomMessage, event)) {
- const msgtype = event.content?.['msgtype'] || 'm.text';
+ if (!('msgtype' in event.content)) {
+ return Ok(undefined);
+ }
+ const msgtype = event.content['msgtype'] || 'm.text';
const formattedBody = event.content !== undefined && 'formatted_body' in event.content ? event.content?.['formatted_body'] || '' : '';
const isMedia = msgtype === 'm.image' || msgtype === 'm.video' || formattedBody.toLowerCase().includes('
> {
if (Value.Check(RoomMessage, event)) {
+ if (!('msgtype' in event.content)) {
+ return Ok(undefined);
+ }
const msgtype = event.content?.['msgtype'] || 'm.text';
const formattedBody = event.content !== undefined && 'formatted_body' in event.content ? event.content?.['formatted_body'] || '' : '';
const isMedia = msgtype === 'm.image' || msgtype === 'm.video' || formattedBody.toLowerCase().includes('
> {
const roomID = room.toRoomIDOrAlias();
if (Value.Check(RoomMessage, event)) {
- if (event.content?.msgtype !== 'm.audio') {
+ if (!('msgtype' in event.content) || event.content?.msgtype !== 'm.audio') {
return Ok(undefined);
}
await this.draupnir.managementRoomOutput.logMessage(LogLevel.INFO, "MessageIsVoice", `Redacting event from ${event['sender']} for posting a voice message. ${Permalinks.forEvent(roomID, event['event_id'], [serverName(this.draupnir.clientUserID)])}`);
diff --git a/src/protections/WordList.ts b/src/protections/WordList.ts
index f3dbc778..3c20a0ce 100644
--- a/src/protections/WordList.ts
+++ b/src/protections/WordList.ts
@@ -88,6 +88,9 @@ export class WordListProtection extends AbstractProtection implements Protection
public async handleTimelineEvent(room: MatrixRoomID, event: RoomEvent): Promise> {
const minsBeforeTrusting = this.draupnir.config.protections.wordlist.minutesBeforeTrusting;
if (Value.Check(RoomMessage, event)) {
+ if (!('msgtype' in event.content)) {
+ return Ok(undefined);
+ }
const message = (event.content !== undefined && 'formatted_body' in event.content && event.content?.['formatted_body']) || event.content?.['body'];
if (!message === undefined) {
return Ok(undefined);