aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fl.fischer@fau.de>2019-06-10 16:47:40 +0200
committerFlorian Fischer <florian.fl.fischer@fau.de>2019-06-10 16:47:40 +0200
commitd75f70a88b897b76403bdb66e0c4747b57a209ab (patch)
tree2f2ed200cc323fd58ec475f714e0682faf9ce941
parent876433d97c0073252c7d73b4136454edd51e715f (diff)
downloadgeldschieberbot-d75f70a88b897b76403bdb66e0c4747b57a209ab.tar.gz
geldschieberbot-d75f70a88b897b76403bdb66e0c4747b57a209ab.zip
change sending of messages
each cmd now must return a message and an error message. If the error message is None the message will be send otherwise the error message
-rw-r--r--geldschieberbot.py187
1 files changed, 83 insertions, 104 deletions
diff --git a/geldschieberbot.py b/geldschieberbot.py
index fd7d323..306fe5a 100644
--- a/geldschieberbot.py
+++ b/geldschieberbot.py
@@ -169,17 +169,14 @@ cmds = {}
def register(sender, args, msg):
if len(args) != 2:
- send('ERROR: not in form "{} name"'.format(args[0]))
- return 1
+ return None, 'not in form "{} name"'.format(args[0])
name = args[1]
if name in name2num:
- send("ERROR: {} already registered".format(name))
- return 1
+ return None, "{} already registered".format(name)
if sender in num2name:
- send("ERROR: you are already registered")
- return 1
+ return None,"you are already registered"
num2name[sender] = name
name2num[name] = sender
@@ -193,57 +190,50 @@ def register(sender, args, msg):
# add changes list
changes[name] = []
- send("Happy geldschiebing {}!".format(name))
- return 0
+ return "Happy geldschiebing {}!".format(name), None
cmds["reg"] = register
cmds["register"] = register
def summary(sender, args, msg):
if len(args) == 1:
- send(create_total_summary())
+ return create_total_summary(), None
elif len(args) > 1:
- ret = 0
+ err = None
msg = "Summary:\n"
for name in args[1:]:
if name in name2num:
msg += create_summary(name) + "\n"
else:
- msg += 'ERROR: name "{}" not registered'.format(name) + "\n"
- ret = 1
- send(msg)
- return ret
+ err = 'name "{}" not registered'.format(name)
+ return msg, err
cmds["sum"] = summary
cmds["summary"] = summary
def list_users(sender, args, msg):
- send(create_members())
+ return create_members(), None
cmds["ls"] = list_users
cmds["list"] = list_users
def usage(sender, args, msg):
- send(create_help())
- return 0
+ return create_help(), None
cmds["help"] = usage
cmds["usage"] = usage
def split(sender, args, msg):
if not sender in num2name:
- send('ERROR: you must register first')
- return 1
+ return None, 'you must register first'
if len(args) < 3:
- send('ERROR: not in form "{} amount [name]+"'.format(args[0]))
- return 1
+ return None, 'not in form "{} amount [name]+"'.format(args[0])
try:
amount = to_cent(args[1])
except:
- send("ERROR: amount must be a number")
- return 1
+ return None, "amount must be a number"
# len(args) - cmd - amount + sender
persons = len(args) - 2 + 1
@@ -252,8 +242,7 @@ def split(sender, args, msg):
if sender in num2name:
recipient = num2name[sender]
else:
- send("ERROR: you must register first")
- return 1
+ return None, "you must register first"
output = "Split {} between {} -> {} each\n".format(to_euro(amount),
persons,
@@ -271,20 +260,17 @@ def split(sender, args, msg):
output += "New Balance:\n"
output += create_summary(recipient)
- send(output)
- return 0
+ return output, None
cmds["split"] = split
cmds["teil"] = split
def transaction(sender, args, msg):
if len(args) != 3:
- send('ERROR: not in form "{} amount recipient"'.format(args[0]))
- return 1
+ return None, 'not in form "{} amount recipient"'.format(args[0])
if not sender in num2name:
- send('ERROR: you must register first')
- return 1
+ return None, 'you must register first'
else:
sender = num2name[sender]
@@ -293,18 +279,15 @@ def transaction(sender, args, msg):
elif args[2] in balance:
amount, recipient = args[1:3]
else:
- send('ERROR: recipient not known')
- return 1
+ return None, 'recipient not known'
try:
amount = to_cent(amount)
except:
- send("ERROR: amount must be a number")
- return 1
+ return None, "amount must be a number"
if amount < 0:
- send("ERROR: amount must be positiv")
- return 1
+ return None, "amount must be positiv"
if args[0] in ["!zieh", "!nimm"]:
amount *= -1
@@ -316,11 +299,11 @@ def transaction(sender, args, msg):
p_balance = balance[sender][recipient]
- send("New Balance: {} {} {} {}\n".format(sender,
+ output = ("New Balance: {} {} {} {}\n".format(sender,
("->" if p_balance > 0 else "<-"),
to_euro(abs(p_balance)),
recipient))
- return 0
+ return output, None
cmds["schieb"] = transaction
cmds["gib"] = transaction
@@ -331,8 +314,7 @@ def cars(sender, args, msg):
# list cars
if len(args) < 2 or args[1] in ["ls", "list"]:
if len(available_cars) == 0:
- send("No cars registered yet.")
- return 0
+ return "No cars registered yet.", None
ret_msg = ""
header_fmt = "{} - service charge {}ct/km\n"
@@ -348,31 +330,26 @@ def cars(sender, args, msg):
else:
ret_msg += "Error {} is no available car\n".format(car)
- send(ret_msg)
+ return ret_msg, None
# add car
elif args[1] in ["add", "new"]:
if len(args) < 4:
- send('ERROR: not in form "{} {} car-name service-charge"'.format(args[0], args[1]))
- return 1
+ return None, 'not in form "{} {} car-name service-charge"'.format(args[0], args[1])
car = args[2]
if car in available_cars:
- send('ERROR: {} already registered'.format(car))
- return 1
+ return None, '{} already registered'.format(car)
if car in balance:
- send('ERROR: A user named {} already exists. Please use a different name for this car'.format(car))
- return 1
+ return None, 'A user named {} already exists. Please use a different name for this car'.format(car)
try:
service_charge = to_cent(args[3])
except:
- send("ERROR: service_charge must be a number")
- return 1
+ return None, "service_charge must be a number"
if not service_charge > 0:
- send("ERROR: service-charge must be greater than 0")
- return 1
+ return None, "service-charge must be greater than 0"
available_cars[car] = service_charge
@@ -383,24 +360,19 @@ def cars(sender, args, msg):
balance[m][car] = 0
nb[m] = 0
balance[car] = nb
- send("added {} as an available car".format(car))
+ return "added {} as an available car".format(car), None
else:
- send('ERROR: cmd not in form "{} [cmd]"'.format(args[0]))
- return 1
-
- return 0
+ return None, 'cmd not in form "{} [cmd]"'.format(args[0])
cmds["cars"] = cars
def _tanken(sender, args, msg):
if len(args) < 2:
- send('ERROR: not in form "{} amount [person] [car] [info]"'.format(args[0]))
- return 1
+ return None, 'not in form "{} amount [person] [car] [info]"'.format(args[0])
try:
amount = to_cent(args[1])
except:
- send("ERROR: amount must be a number")
- return 1
+ return None, "amount must be a number"
# find recipient
if len(args) > 2 and args[2] in name2num:
@@ -408,8 +380,7 @@ def _tanken(sender, args, msg):
elif sender in num2name:
recipient = num2name[sender]
else:
- send("ERROR: recipient unknown")
- return 1
+ return None, "recipient unknown"
# find car
car = None
@@ -425,8 +396,7 @@ def _tanken(sender, args, msg):
parts, err = tanken.tanken(msg[1:], amount, service_charge)
if err != None:
- send("ERROR: " + err)
- return 1
+ return None, err
output = ""
change = [args]
@@ -462,21 +432,18 @@ def _tanken(sender, args, msg):
if car:
output += "\nCar "
output += create_summary(car)
- send(output)
- return 0
+ return output, None
cmds["tanken"] = _tanken
def fuck(sender, args, msg):
if not sender in num2name:
- send("ERROR: you must register first")
- return 1
+ return None, "you must register first"
else:
name = num2name[sender]
if len(changes[name]) == 0:
- send("Nothing to rewind")
- return 1
+ return "Nothing to rewind", None
# pop last item
last_changes = changes[name].pop()
@@ -492,13 +459,16 @@ def fuck(sender, args, msg):
change[1])
record(change[1], change[0], change[2])
- send(output)
-
for change in last_changes:
if change[0] in cmds:
- cmds[change[0]](sender, change, "")
+ ret, err = cmds[change[0]](sender, change, "")
+
+ if err:
+ output += "ERROR: " + err
+ else:
+ output += ret
- return 0
+ return output, None
cmds["fuck"] = fuck
cmds["rewind"] = fuck
@@ -506,33 +476,29 @@ cmds["undo"] = fuck
def schedule(sender, args, msg):
if not sender in num2name:
- send("ERROR: you must register first")
- return 1
+ return None, "you must register first"
+
sender_name = num2name[sender]
if len(args) < 3:
- send('ERROR: not in form "{} name cmd"'.format(args[0]))
- return 1
+ return None, 'not in form "{} name cmd"'.format(args[0])
name = args[1]
cmd = args[2:]
if name in scheduled_cmds:
- send('ERROR: there is already a scheduled command named "{}"'.format(name))
- return 1
+ return None, 'there is already a scheduled command named "{}"'.format(name)
# Test the command
global dry_run
old_dry_run, dry_run = dry_run, True
- global quiet
- old_quiet, quiet = quiet, True
- ret = cmds[cmd[0]](sender, cmd, "")
- quiet = old_quiet
+
+ ret, err = cmds[cmd[0]](sender, cmd, "")
+
dry_run = old_dry_run
- if ret:
- send('ERROR: the command "{}" failed and will not be recorded')
- return 1
+ if err:
+ return None, 'the command "{}" failed and will not be recorded'
scheduled_cmd = {"schedule": args[0][1:],
"last_time": None,
@@ -540,17 +506,24 @@ def schedule(sender, args, msg):
"cmd": cmd}
scheduled_cmds[name] = scheduled_cmd
- send('Recorded the {} command "{}" as "{}"\n'.format(args[0][1:], ' '.join(cmd), name))
+ output = 'Recorded the {} command "{}" as "{}"\n'.format(args[0][1:], ' '.join(cmd), name)
- send("Running {} command {} for {} initially\n".format(scheduled_cmd["schedule"],
- name, sender_name))
+ output += "Running {} command {} for {} initially\n".format(scheduled_cmd["schedule"],
+ name, sender_name)
+
+ ret, err = cmds[cmd[0]](sender, cmd, "")
+ if err:
+ output += "ERROR: " + err
+ else:
+ output += ret
- cmds[cmd[0]](sender, cmd, "")
changes[sender_name][0].append(["cancel", name])
now = datetime.now().date()
scheduled_cmd["last_time"] = now.isoformat()
+ return output, None
+
cmds["weekly"] = schedule
cmds["monthly"] = schedule
cmds["yearly"] = schedule
@@ -558,17 +531,14 @@ cmds["yearly"] = schedule
def cancel(sender, args, msg):
cmd_name = args[1]
if not cmd_name in scheduled_cmds:
- send('ERROR: "{}" is not a scheduled command'.format(cmd_name))
- return 1
+ return None, '"{}" is not a scheduled command'.format(cmd_name)
cmd = scheduled_cmds[cmd_name]
if not cmd["sender"] == sender:
- send('ERROR: only the original creator can cancel this command')
- return 1
+ return None, 'only the original creator can cancel this command'
del(scheduled_cmds[cmd_name])
- send('Cancelled the {} cmd "{}"'.format(cmd["schedule"], cmd_name))
- return 0
+ return 'Cancelled the {} cmd "{}"'.format(cmd["schedule"], cmd_name), None
cmds["cancel"] = cancel
@@ -595,12 +565,16 @@ def main():
continue
body = [l.strip() for l in message["message"].lower().splitlines()]
- w = body[0].split(' ')
+ args = body[0].split(' ')
- if w[0].startswith("!"):
- cmd = w[0][1:]
+ if args[0].startswith("!"):
+ cmd = args[0][1:]
if cmd in cmds:
- cmds[cmd](sender_number, w, body)
+ ret, err = cmds[cmd](sender_number, args, body)
+ if err:
+ send("ERROR: " + err)
+ else:
+ send(ret)
else:
send('ERROR: unknown cmd. Enter !help for a list of commands.')
@@ -626,7 +600,6 @@ def main():
elif cmd["schedule"] == "monthly":
if d.day > 28:
d = date(d.year, d.month, 28)
-
if d.month == 12:
d = date(d.year+1, 1, d.day)
else:
@@ -640,7 +613,13 @@ def main():
num2name[cmd["sender"]],
d.isoformat()))
- cmds[cmd["cmd"][0]](cmd["sender"], cmd["cmd"], "")
+ ret, err = cmds[cmd["cmd"][0]](cmd["sender"], cmd["cmd"], "")
+
+ if err:
+ send("ERROR: " + err)
+ else:
+ send(ret)
+
cmd["last_time"] = d.isoformat()
else:
break