diff options
Diffstat (limited to 'src/index.js')
-rw-r--r-- | src/index.js | 97 |
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)}` ) } |