aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--geldschieberbot.py119
1 files changed, 59 insertions, 60 deletions
diff --git a/geldschieberbot.py b/geldschieberbot.py
index 33fee20..27f87ae 100644
--- a/geldschieberbot.py
+++ b/geldschieberbot.py
@@ -7,18 +7,18 @@ import subprocess
import sys
import tanken
-"""Path where our data is stored persistent on disk"""
+# Path where our data is stored persistent on disk
state_file = os.environ["GSB_STATE_FILE"]
if os.path.isfile(state_file):
state = json.load(open(state_file, "r"))
else:
- """Dict containing the whole state of geldschieberbot
- balance - dict of dicts associating two persons to an amount
- name2num, num2name - dicts associating numbers to names and vice versa
- cars - dict associating car names to their service charge
- scheduled_cmds - dict associating names to cmds, their schedule, and the last execution
- changes - dict associating users with their changes"""
+ # Dict containing the whole state of geldschieberbot
+ # balance - dict of dicts associating two persons to an amount
+ # name2num, num2name - dicts associating numbers to names and vice versa
+ # cars - dict associating car names to their service charge
+ # scheduled_cmds - dict associating names to cmds, their schedule, and the last execution
+ # changes - dict associating users with their changes
state = {
"balance": {},
"name2num": {},
@@ -44,7 +44,7 @@ else:
for num in state["changes"]:
name = state["num2name"][num]
state["changes"][name] = state["changes"][num]
- del (state["changes"][num])
+ del state["changes"][num]
balance = state["balance"]
name2num = state["name2num"]
@@ -103,7 +103,7 @@ def to_euro(cents):
def send(msg):
if not quiet:
- subprocess.run(send_cmd.split(' '), input=msg.encode())
+ subprocess.run(send_cmd.split(' '), input=msg.encode(), check=True)
def create_summary(user):
@@ -218,7 +218,7 @@ def register(sender, args, msg):
try:
to_cent(name)
return None, "pure numerical names are not allowed"
- except:
+ except (ValueError, TypeError):
pass
if name in name2num:
@@ -241,25 +241,25 @@ cmds["reg"] = register
cmds["register"] = register
-def summary(sender, args, msg):
+def summary(sender, args, msg): # pylint: disable=unused-argument
if len(args) == 1:
return create_total_summary(), None
- elif len(args) > 1:
- err = None
- msg = "Summary:\n"
- for name in args[1:]:
- if name in name2num or name in available_cars:
- msg += create_summary(name) + "\n"
- else:
- err = f'name "{name}" not registered'
- return msg, err
+
+ err = None
+ msg = "Summary:\n"
+ for name in args[1:]:
+ if name in name2num or name in available_cars:
+ msg += create_summary(name) + "\n"
+ else:
+ err = f'name "{name}" not registered'
+ return msg, err
cmds["sum"] = summary
cmds["summary"] = summary
-def list_users(sender, args, msg):
+def list_users(sender, args, msg): # pylint: disable=unused-argument
return create_members(), None
@@ -267,7 +267,7 @@ cmds["ls"] = list_users
cmds["list"] = list_users
-def usage(sender, args, msg):
+def usage(sender, args, msg): # pylint: disable=unused-argument
return create_help(), None
@@ -285,13 +285,13 @@ def split(sender, args, msg):
try:
amount = to_cent(args[1])
persons = args[2:]
- except:
+ except (ValueError, TypeError):
# support !split name amount
if len(args) == 3:
try:
amount = to_cent(args[2])
persons = [args[1]]
- except:
+ except (ValueError, TypeError):
return None, "amount must be a positive number"
else:
return None, "amount must be a positive number"
@@ -350,7 +350,7 @@ def transaction(sender, args, msg):
try:
amount = to_cent(amount)
- except:
+ except (ValueError, TypeError):
return None, "amount must be a positive number"
if args[0] in ["!zieh", "!nimm"]:
@@ -381,20 +381,20 @@ def transfer(sender, args, msg):
if not sender in num2name:
return None, 'you must register first'
- else:
- sender = num2name[sender]
+
+ sender = num2name[sender]
try:
amount_raw = args[1]
amount_cent = to_cent(amount_raw)
- except:
+ except (ValueError, TypeError):
return None, "amount must be a positive number"
source, destination = args[2:4]
if source not in balance:
return None, f'source "{source}" not known'
- elif destination not in balance:
+ if destination not in balance:
return None, f'destination "{destination}" not known'
output = ""
@@ -407,8 +407,8 @@ def transfer(sender, args, msg):
if err:
# No changes yet we can fail
return None, err
- else:
- output += ret
+
+ output += ret
# Sender <- X Source
change.append((sender, source, -amount_cent))
@@ -416,8 +416,8 @@ def transfer(sender, args, msg):
if err:
output += err + "\nThe balance may be in a inconsistent state please take care manually"
return output, None
- else:
- output += ret
+
+ output += ret
# Sender -> X Destination
change.append((sender, destination, amount_cent))
@@ -425,8 +425,8 @@ def transfer(sender, args, msg):
if err:
output += err + "\nThe balance may be in a inconsistent state please take care manually"
return output, None
- else:
- output += ret
+
+ output += ret
# Destination -> X Source
change.append((destination, source, amount_cent))
@@ -461,35 +461,37 @@ def cars(sender, args, msg):
return None, f'"{car}" is no available car\n'
return ret_msg[:-1], None
+
# add car
- elif args[1] in ["add", "new"]:
+ if args[1] in ["add", "new"]:
if len(args) < 4:
return None, f'not in form "{args[0]} {args[1]} car-name service-charge"'
car = args[2]
if car in available_cars:
- return None, '"{}" already registered'.format(car)
+ return None, f'"{car}" already registered'
if car in balance:
return None, f'A user named "{car}" already exists. Please use a different name for this car'
try:
service_charge = to_cent(args[3])
- except:
+ except (ValueError, TypeError):
return None, "service-charge must be a positive number"
available_cars[car] = service_charge
add_to_balance(car)
return f'added "{car}" as an available car', None
+
# pay bill
- elif args[1] in ["pay"]:
+ if args[1] in ["pay"]:
if len(args) < 4:
return None, f'not in form "{args[0]} {args[1]} car-name amount"'
if not sender in num2name:
return None, "you must register first"
- else:
- sender_name = num2name[sender]
+
+ sender_name = num2name[sender]
car = args[2]
if car not in available_cars:
@@ -498,7 +500,7 @@ def cars(sender, args, msg):
try:
amount = to_cent(args[3])
amount_euro = to_euro(amount)
- except:
+ except (ValueError, TypeError):
return None, "amount must be a positive number"
output = ""
@@ -521,7 +523,7 @@ def cars(sender, args, msg):
proportion = -1 * (amount / total_available_charge)
_, err = transaction(sender, f"!gib {car} {amount_euro}".split(), "")
- assert (err is None)
+ assert err is None
output += f"{sender_name} payed {amount_euro}\n"
# transfer money
@@ -534,7 +536,7 @@ def cars(sender, args, msg):
to_move_euro = to_euro(to_move)
ret, err = transfer(sender,
["transfer", to_move_euro, car, person], "")
- assert (err is None)
+ assert err is None
output += "Transfer {} from {} to {}\n".format(
to_move_euro, person, sender_name)
@@ -548,8 +550,8 @@ def cars(sender, args, msg):
changes[sender_name].append(change)
return output, None
- else:
- return None, 'unknown car subcommand "{}".'.format(args[1])
+
+ return None, f'unknown car subcommand "{args[1]}".'
cmds["cars"] = cars
@@ -557,11 +559,10 @@ cmds["cars"] = cars
def _tanken(sender, args, msg):
if len(args) < 2:
- return None, 'not in form "{} amount [person] [car] [info]"'.format(
- args[0])
+ return None, f'not in form "{args[0]} amount [person] [car] [info]"'
try:
amount = to_cent(args[1])
- except:
+ except (ValueError, TypeError):
return None, "amount must be a number"
# find recipient
@@ -585,7 +586,7 @@ def _tanken(sender, args, msg):
parts, err = tanken.tanken(msg[1:], amount, service_charge)
- if err != None:
+ if err:
return None, err
output = ""
@@ -601,8 +602,7 @@ def _tanken(sender, args, msg):
person_to_charge = pname
if pname not in name2num:
person_to_charge = recipient
- output += " {} held accountable for service charge.".format(
- recipient)
+ output += f" {recipient} held accountable for service charge."
record(car, person_to_charge, values["service_charge"])
change.append([car, person_to_charge, values["service_charge"]])
@@ -634,8 +634,8 @@ cmds["tanken"] = _tanken
def fuck(sender, args, msg):
if not sender in num2name:
return None, "you must register first"
- else:
- name = num2name[sender]
+
+ name = num2name[sender]
nchanges = len(changes[name])
if nchanges == 0:
@@ -746,14 +746,13 @@ def schedule(sender, args, msg):
sender_name = num2name[sender]
if len(args) < 3:
- return None, 'not in form "{} name cmd"'.format(args[0])
+ return None, f'not in form "{args[0]} name cmd"'
name = args[1]
cmd = args[2:]
if name in scheduled_cmds:
- return None, 'there is already a scheduled command named "{}"'.format(
- name)
+ return None, f'there is already a scheduled command named "{name}"'
# Test the command
global dry_run
@@ -802,14 +801,14 @@ cmds["yearly"] = schedule
def cancel(sender, args, msg):
cmd_name = args[1]
if not cmd_name in scheduled_cmds:
- return None, '"{}" is not a scheduled command'.format(cmd_name)
+ return None, f'"{cmd_name}" is not a scheduled command'
cmd = scheduled_cmds[cmd_name]
if not cmd["sender"] == sender:
return None, 'only the original creator can cancel this command'
- del (scheduled_cmds[cmd_name])
- return 'Cancelled the {} cmd "{}"'.format(cmd["schedule"], cmd_name), None
+ del scheduled_cmds[cmd_name]
+ return f'Cancelled the {cmd["schedule"]} cmd "{cmd_name}"', None
cmds["cancel"] = cancel