-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbot.js
More file actions
63 lines (49 loc) · 1.69 KB
/
bot.js
File metadata and controls
63 lines (49 loc) · 1.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import 'dotenv/config'
import sdk from 'matrix-js-sdk'
import { logger } from 'matrix-js-sdk/lib/logger.js'
import { parseDiceCommand } from './dice.js'
logger.setLevel('error')
const originalLog = console.log
console.log = (...args) => {
if (args[0]?.includes?.('MatrixRTCSession')) return
originalLog(...args)
}
const config = {
homeserverUrl: process.env.MATRIX_HOMESERVER,
accessToken: process.env.MATRIX_ACCESS_TOKEN,
userId: process.env.MATRIX_USER_ID
}
const client = sdk.createClient({
baseUrl: config.homeserverUrl,
accessToken: config.accessToken,
userId: config.userId
})
const startTime = Date.now()
// Auto-accept invites
client.on('RoomMember.membership', (event, member) => {
if (member.membership !== 'invite' || member.userId !== config.userId) return
client
.joinRoom(member.roomId)
.then(() => console.log(`Joined room ${member.roomId}`))
.catch((err) => console.error(`Failed to join room: ${err}`))
})
// Handle incoming messages
client.on('Room.timeline', (event, room, toStartOfTimeline) => {
if (toStartOfTimeline) return
if (event.getTimestamp() < startTime) return
if (event.getType() !== 'm.room.message') return
if (event.getSender() === config.userId) return
const content = event.getContent()
if (content.msgtype !== 'm.text') return
const message = content.body
const result = parseDiceCommand(message)
if (!result) return
console.log(`[${event.getSender()}] ${message}`)
client
.sendMessage(room.roomId, { msgtype: 'm.text', body: result })
.catch((err) => console.error(`Failed to send message: ${err}`))
})
// Start the client
client
.startClient({ initialSyncLimit: 10 })
.then(() => console.log('bones is rolling...'))