From c7b6c2314d69a7ec6ee3298a440bc77c451da696 Mon Sep 17 00:00:00 2001 From: unfunny Date: Sun, 13 Sep 2026 14:39:02 -0400 Subject: [PATCH] Fix bot listening in joined rooms --- index.js | 71 +++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 50 insertions(+), 21 deletions(-) diff --git a/index.js b/index.js index 1af2587..40ff913 100644 --- a/index.js +++ b/index.js @@ -37,41 +37,70 @@ function loadQuotes() { await client.startClient(); console.log('✅ Client initialized\n'); - let joinedRooms = new Set(); let lastSentMessage = null; - client.on('RoomMember#joined', (member) => { + // Listen for all membership events from homeserver + client.on('RoomMember#joined', async (member) => { const room = member.room; - if (!joinedRooms.has(room.roomId)) { - joinedRooms.add(room.roomId); - console.log(`✅ Joined: ${room.roomId}`); + console.log(`✅ Joined room: ${room.getCanonicalRoomName() || room.roomId}`); + + // Add message listener to this room + room.on('EventMessage', async (event, stateEvent) => { + const content = event.getContent(); + if (!content || !content.body) return; - room.on('EventMessage', async (event) => { - const content = event.getContent(); - if (!content || !content.body) return; - - const body = content.body.toLowerCase(); - const cmd = (process.env.BOT_COMMAND || '!quote').toLowerCase(); - - if (body.includes(cmd)) { - if (!lastSentMessage || Date.now() - lastSentMessage > 300) { - const quote = quotes[Math.floor(Math.random() * quotes.length)]; + const body = content.body.toLowerCase().trim(); + const cmd = (process.env.BOT_COMMAND || '!quote').toLowerCase(); + + if (body === cmd || body.startsWith(cmd)) { + if (!lastSentMessage || Date.now() - lastSentMessage > 300) { + const quote = quotes[Math.floor(Math.random() * quotes.length)]; + try { await room.sendMessage(quote); console.log(`🎃 Quote: ${quote}`); lastSentMessage = Date.now(); + } catch (err) { + console.error('Failed to send quote:', err.message); } } - }); + } + }); - room.on('RoomMember#left', () => { - joinedRooms.delete(room.roomId); - console.log(`â„šī¸ Left: ${room.roomId}`); - }); + // Handle leaving the room + member.room.on('RoomMember#left', () => { + console.log(`â„šī¸ Left room: ${member.room.getCanonicalRoomName() || member.room.roomId}`); + }); + }); + + // Also listen to messages from all known rooms (for cases where client is already joined) + client.on('EventMessage', async (event, stateEvent) => { + const room = event.sender.room; + const content = event.getContent(); + if (!content || !content.body) return; + + const body = content.body.toLowerCase().trim(); + const cmd = (process.env.BOT_COMMAND || '!quote').toLowerCase(); + + // Only respond in rooms where we're a member + const roomMembers = await room.getJoinedMemberCount(); + if (roomMembers > 0 && room.getMyMembership()) { + if (body === cmd || body.startsWith(cmd)) { + if (!lastSentMessage || Date.now() - lastSentMessage > 300) { + const quote = quotes[Math.floor(Math.random() * quotes.length)]; + try { + await room.sendMessage(quote); + console.log(`🎃 Quote: ${quote}`); + lastSentMessage = Date.now(); + } catch (err) { + console.error('Failed to send quote:', err.message); + } + } + } } }); console.log('🤖 Bot is running!'); - console.log(' Invite to a Matrix room and type !quote to get an Ancestor quote.\n'); + console.log(' Invite this bot to a Matrix room and type !quote to get an Ancestor quote.\n'); } catch (err) { console.error('Fatal error:', err.message);