aboutsummaryrefslogtreecommitdiff
path: root/geldschieberbot.py
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2025-11-06 09:50:44 +0100
committerFlorian Fischer <florian.fischer@muhq.space>2025-11-06 09:55:33 +0100
commit08f50826ec76442d2a010bb23fda0ce66efad99d (patch)
tree69c7d00d41f51e068dae8d3b259816437e6614c9 /geldschieberbot.py
parent53be8ed80cf8b92e011b34ea8bf2e602adb8621e (diff)
downloadgeldschieberbot-08f50826ec76442d2a010bb23fda0ce66efad99d.tar.gz
geldschieberbot-08f50826ec76442d2a010bb23fda0ce66efad99d.zip
export the minimize command from the geldschieberbotminimize
Diffstat (limited to 'geldschieberbot.py')
-rw-r--r--geldschieberbot.py25
1 files changed, 25 insertions, 0 deletions
diff --git a/geldschieberbot.py b/geldschieberbot.py
index 745731f..51571c0 100644
--- a/geldschieberbot.py
+++ b/geldschieberbot.py
@@ -23,6 +23,7 @@ import typing as T
from models import MessageContext, Modification, Change, GeldschieberbotJSONEncoder, Reply
from utils import to_euro, to_cent
+from minimize import minimize
class Geldschieberbot:
@@ -268,6 +269,8 @@ class Geldschieberbot:
transfer amount source destination - transfer amount of your balance from source to destination
+ minimize - minimize the total balance by moving money in cycles
+
cars [cmd] - interact with the available cars
cars [list | ls] - list available cars and their service charge
cars add car-name service-charge - add new car
@@ -515,6 +518,27 @@ class Geldschieberbot:
Change(msg.args, modifications, msg.timestamp))
return {'msg': out}
+ def minimize(self, msg: MessageContext) -> dict[str, str]:
+ """Message handler wrapping the minimize function"""
+ if not msg.sender:
+ return {'err': 'you must register first'}
+
+ cycles = minimize(self.balance)
+ if not cycles:
+ return {'msg': 'No cycles to minimize found'}
+
+ out = ''
+ for suggestion in cycles:
+ cycle, delta = suggestion
+ for i, user in enumerate(cycle):
+ other = cycle[i - 1]
+ self.balance[other][user] -= delta
+ self.balance[user][other] += delta
+ out += f'{user} -> '
+ out = f'{out[:-4]} {delta}\n'
+
+ return {'msg': f'minimize:\n{out[:-1]}'}
+
def cars(self, msg: MessageContext) -> dict[str, str]:
"""Manage available cars
@@ -1032,6 +1056,7 @@ class Geldschieberbot:
'help': self.usage,
'usage': self.usage,
'transfer': self.transfer,
+ 'minimize': self.minimize,
'cars': self.cars,
'tanken': self.tanken,
'fuck': self.fuck,