diff options
Diffstat (limited to 'geldschieberbot.py')
| -rw-r--r-- | geldschieberbot.py | 57 |
1 files changed, 48 insertions, 9 deletions
diff --git a/geldschieberbot.py b/geldschieberbot.py index 79cb643..969540f 100644 --- a/geldschieberbot.py +++ b/geldschieberbot.py @@ -7,8 +7,6 @@ import os import subprocess import sys -import tanken - # Path where our data is stored persistent on disk STATE_FILE = os.environ["GSB_STATE_FILE"] @@ -591,7 +589,51 @@ class Geldschieberbot: return {'err': f'unknown car subcommand "{args[1]}".'} - def _tanken(self, sender, args, msg) -> dict[str, str]: + def parse_tank_bill(self, _drives: list[str], fuel_charge: int, + service_charge: int): + """Parse and distribute the tank bill across all passangers""" + passengers: dict[str, dict[str, int]] = {} + distance = 0. + drives = [d.split(' ') for d in _drives] + + for drive in drives: + try: + drive_distance = int(drive[0]) + except (IndexError, ValueError): + return None, "Lines have to start with the driven distance!" + + # calculate overall distance + distance += drive_distance + + # collect distances per passenger + drive_passengers = self.expand_aliases(drive[1:]) + for passenger in drive_passengers: + passengers.setdefault(passenger, { + "distance": 0, + "cost": 0, + "service_charge": 0 + })["distance"] += drive_distance + + # calculate cost per kilometer + if distance <= 0: + return None, "Driven distance must be greater than 0!" + + c_km = fuel_charge / distance + + for drive in drives: + drive_distance = int(drive[0]) + drive_passengers = self.expand_aliases(drive[1:]) + # calculate cost per drive split among passengers + c_d = int(c_km * drive_distance / (len(drive_passengers))) + sc_d = int(service_charge * drive_distance / + (len(drive_passengers))) + for passenger in drive_passengers: + passengers[passenger]["cost"] += c_d + passengers[passenger]["service_charge"] += sc_d + + return passengers, None + + def tanken(self, sender, args, msg) -> dict[str, str]: """Split a tank across all passengers""" if len(args) < 2: return { @@ -617,12 +659,9 @@ class Geldschieberbot: elif len(args) > 3 and args[3] in self.available_cars: car = args[3] - service_charge = 0 - if car: - service_charge = self.available_cars[car] - - parts, err = tanken.tanken(msg[1:], amount, service_charge) + service_charge = self.available_cars.get(car, 0) + parts, err = self.parse_tank_bill(msg[1:], amount, service_charge) if err: return {'err': err} @@ -925,7 +964,7 @@ class Geldschieberbot: 'usage': self.usage, 'transfer': self.transfer, 'cars': self.cars, - 'tanken': self._tanken, + 'tanken': self.tanken, 'fuck': self.fuck, 'rewind': self.fuck, 'undo': self.fuck, |
