aboutsummaryrefslogtreecommitdiff
path: root/src/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/index.js')
-rw-r--r--src/index.js97
1 files changed, 90 insertions, 7 deletions
diff --git a/src/index.js b/src/index.js
index dd92f9d..ae7cfe0 100644
--- a/src/index.js
+++ b/src/index.js
@@ -82,6 +82,11 @@ matrixClient.on('Room.timeline', async (event, room, toStartOfTimeline) => {
let users = await db.getUsers(room.roomId)
+ let from
+ let to
+ let amount
+ let description
+
switch (command) {
case 'h':
case 'help':
@@ -102,6 +107,16 @@ matrixClient.on('Room.timeline', async (event, room, toStartOfTimeline) => {
)
sendMessage(
room.roomId,
+ '!e @zaphod 42: delegate the expense',
+ '<b>!e @zaphod 42</b>: delegate the expense'
+ )
+ sendMessage(
+ room.roomId,
+ '!e 10 @trillian: transfor to a fellow user',
+ '<b>!e 10 @trillian</b>: transfor to a fellow user'
+ )
+ sendMessage(
+ room.roomId,
'!b: get the balance',
'<b>!b</b>: get the balance'
)
@@ -235,13 +250,9 @@ matrixClient.on('Room.timeline', async (event, room, toStartOfTimeline) => {
case 'e':
case 'exp':
case 'expense':
- let from
- let amount
- let description
-
if (users.includes(args[0])) {
// Use delegated sender
- from = parseFloat(args[0])
+ from = args[0]
amount = parseFloat(args[1])
description = args
.slice(2)
@@ -295,6 +306,76 @@ matrixClient.on('Room.timeline', async (event, room, toStartOfTimeline) => {
})
break
+ case 't':
+ case 'transfer':
+ if (users.includes(args[0])) {
+ // Use delegated sender
+ from = args[0]
+ amount = parseFloat(args[1])
+ to = args[2]
+ description = args
+ .slice(3)
+ .filter((a) => {
+ console.log(a, a[0])
+ return a[0] !== '?'
+ })
+ .join(' ')
+ } else {
+ // Use event sender
+ from = event.getSender()
+ amount = parseFloat(args[0])
+ to = args[1]
+ description = args
+ .slice(2)
+ .filter((a) => {
+ console.log(a, a[0])
+ return a[0] !== '?'
+ })
+ .join(' ')
+ }
+
+ // Check amount
+ if (!amount) {
+ sendMessage(
+ room.roomId,
+ '❌ That expense is invalid, need !help ?'
+ )
+ return
+ }
+
+ // Check recipient
+ if (!users.includes(to)) {
+ sendMessage(
+ room.roomId,
+ `❌ I don't know any "${to}", please try !users`
+ )
+ return
+ }
+
+ db.write({
+ type: 'transfer',
+ timestamp: event.getDate(),
+ roomId: room.roomId,
+ userId: event.getSender(),
+ data: {
+ from: from,
+ to: to,
+ amount: amount,
+ currency: 'EUR',
+ description: description,
+ },
+ })
+ .then(() => {
+ sendMessage(room.roomId, '👍 Transfer noted')
+ })
+ .catch((e) => {
+ sendMessage(
+ room.roomId,
+ `❌ Whoops, something went wrong (${e})`
+ )
+ })
+ break
+
case 'b':
case 'balance':
if (users.length === 0) {
@@ -318,12 +399,14 @@ matrixClient.on('Room.timeline', async (event, room, toStartOfTimeline) => {
const diff =
(balance[userId2].spentForUserId[userId1] || 0) -
- (balance[userId1].spentForUserId[userId2] || 0)
+ (balance[userId1].spentForUserId[userId2] || 0) +
+ (balance[userId2].sentToUserId[userId1] || 0) -
+ (balance[userId1].sentToUserId[userId2] || 0)
sendMessage(
room.roomId,
`${userId1} ${
- diff > 0 ? '→' : '←'
+ diff == 0 ? '=' : diff > 0 ? '→' : '←'
} ${userId2}: ${Math.abs(diff).toFixed(2)}`
)
}