writ.lua (1813B)
1 require "lib.utils" 2 3 local fns = { 4 tmp = ".tmp" 5 } 6 7 function cantus(args, players, log) 8 if not (players[args.who]) then 9 die("No such player.") 10 end 11 12 h = table.query(p.history, function (c) return c.active end) 13 14 if not h then 15 die(string.format("Player '%s' is not active.", args.name)) 16 end 17 18 local monthname = os.date("%B", args.when) 19 local dayord = ord(tonumber(os.date("%d", args.when))) 20 local day = os.date("%d", args.when) 21 local datestring = string.format("The %s%s of %s of %d", day, dayord, monthname, os.date("%Y", args.when)) 22 local datepad = (string.rep(" ", (80 - string.len(datestring))//2)) 23 local namepad = (string.rep(" ", (80 - string.len(args.who))//2)) 24 25 local defs = { 26 MAILDATE = os.date("%a, %d %b %Y %T %z"), 27 NAME = args.who, 28 PADDEDNAME = namepad .. args.who, 29 DATE = datepad .. datestring, 30 FILEPATH = args.cantus, 31 FULLTEXT = string.format("include(%s)", FILEPATH) 32 } 33 34 os.execute(string.format("m4 %s templates/writ.m4 > %s", m4flags(defs), fns.tmp)) 35 36 37 if args.p then 38 os.execute(string.format("cat %s", fns.tmp)) 39 os.remove(fns.tmp) 40 io.write(string.format("Deregister player %s.\n", args.name)) 41 pprint.pprint(h) 42 io.write("active := nil\n") 43 io.write("latest := nil\n") 44 io.write(string.format("deregistration := %s\n", os.date("%Y-%m-%d"))) 45 io.write("reason := w\n") 46 else 47 os.execute(string.format("neomutt -H %s -E", fns.tmp)) 48 local archive_name = os.date("archive/%F-writ-") .. args.who .. ".txt" 49 if yn(string.format("Archive report to '%s'? [Yn] ", archive_name)) then 50 os.rename(fns.tmp, archive_name) 51 table.insert(log, {what = "writ", who = args.who, when = args.when, where = args.m}) 52 h.active = nil 53 h.deregistration = os.date("%Y-%m-%d") 54 h.reason = "w" 55 h.latest = nil 56 else 57 os.remove(fns.tmp) 58 end 59 end 60 end 61 62 return cantus