<?php declare(strict_types=1);
-namespace Common;
-
-require 'vendor/autoload.php';
-require __DIR__ . '/config.php';
+require_once('vendor/autoload.php');
+require_once(__DIR__ . '/config.php');
use Telegram\Bot\Api;
-use DateTimeImmutable;
function getTelegram() {
STATIC $tg;
return $inboxes[$inbox];
}
+function getRules() {
+ STATIC $rules;
+ return $rules = $rules ?? require 'rules.php';
+}
+
+function getString($identifier, ...$vars) {
+ STATIC $strings;
+ $strings = $strings ?? require 'strings.php';
+
+ return sprintf($strings[$identifier], ...$vars);
+}
+
+function formatDate($date) {
+ return $date->format(DATE_FORMAT);
+}
+
+const sendToGroupChat = 'sendToGroupChat';
+function sendToGroupChat(string $message) {
+ return getTelegram()->sendMessage(['chat_id' => CHAT_ID, 'text' => $message]);
+}
+
+const generateReminderText = 'generateReminderText';
+function generateReminderText($message) {
+ return getString('billreminder', REMIND_THRESHOLD, $message['service'], splitBill($message['amount']), formatDate($message['due']));
+}
+
+const generateNewBillText = 'generateNewBillText';
+function generateNewBillText($message) {
+ return getString('newbill', $message['service'], splitBill($message['amount']), formatDate($message['due']));
+}
+
+const messageNeedsReminder = 'messageNeedsReminder';
+function messageNeedsReminder($message) {
+ return $message['due']->diff(new DateTimeImmutable)->d == REMIND_THRESHOLD;
+}
+
+
+function ∘(...$fs) {
+ return function($arg) use ($fs) {
+ return array_reduce(array_reverse($fs), function($c, $f) {
+ return $f($c);
+ }, $arg);
+ };
+}
+
+function map($callable) {
+ return function($list) use ($callable) {
+ return array_map($callable, $list);
+ };
+}
+
+function filter($callable) {
+ return function($list) use ($callable) {
+ return array_filter($list, $callable);
+ };
+}
+
+function ∪($a, $b) {
+ return array_merge($a, $b);
+}
+
function getMessagesFromInbox($inbox, array $rules, $unseenOnly = true) {
return array_filter(
array_map(
return [];
}
+ $messageTransform = $rule['messageTransform'] ?? 'identity';
+ $dateTransform = $rule['dateTransform'] ?? 'identity';
+
$body = imap_fetchbody($inbox, $emails[0], '1', FT_UID);
- preg_match($rule['regex'], $rule['messageTransform']($body), $matches);
+ preg_match($rule['regex'], $messageTransform($body), $matches);
return [
'service' => $service,
'id' => substr(md5($body), 0, 6),
'uid' => $emails[0],
- 'telegramMessage' => $rule['telegramMessage'],
- 'due' => new DateTimeImmutable($rule['dateTransform']($matches['due'])),
+ 'due' => new DateTimeImmutable($dateTransform($matches['due'])),
'amount' => $matches['amount']
];
},