diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2025-11-06 09:50:44 +0100 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2025-11-06 09:55:33 +0100 |
| commit | 08f50826ec76442d2a010bb23fda0ce66efad99d (patch) | |
| tree | 69c7d00d41f51e068dae8d3b259816437e6614c9 /geldschieberbot.py | |
| parent | 53be8ed80cf8b92e011b34ea8bf2e602adb8621e (diff) | |
| download | geldschieberbot-08f50826ec76442d2a010bb23fda0ce66efad99d.tar.gz geldschieberbot-08f50826ec76442d2a010bb23fda0ce66efad99d.zip | |
export the minimize command from the geldschieberbotminimize
Diffstat (limited to 'geldschieberbot.py')
| -rw-r--r-- | geldschieberbot.py | 25 |
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, |
