writ.lua (1788B)
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 = namepad .. args.who, 28 DATE = datepad .. datestring, 29 FILEPATH = args.cantus, 30 FULLTEXT = string.format("include(%s)", FILEPATH) 31 } 32 33 os.execute(string.format("m4 %s templates/writ.m4 > %s", m4flags(defs), fns.tmp)) 34 35 36 if args.p then 37 os.execute(string.format("cat %s", fns.tmp)) 38 os.remove(fns.tmp) 39 io.write(string.format("Deregister player %s.\n", args.name)) 40 pprint.pprint(h) 41 io.write("active := nil\n") 42 io.write("latest := nil\n") 43 io.write(string.format("deregistration := %s\n", os.date("%Y-%m-%d"))) 44 io.write("reason := w\n") 45 else 46 os.execute(string.format("neomutt -H %s -E", fns.tmp)) 47 local archive_name = os.date("archive/%F-writ-") .. args.who .. ".txt" 48 if yn(string.format("Archive report to '%s'? [Yn] ", archive_name)) then 49 os.rename(fns.tmp, archive_name) 50 table.insert(log, {what = "writ", who = args.who, when = args.when, where = args.m}) 51 h.active = nil 52 h.deregistration = os.date("%Y-%m-%d") 53 h.reason = "w" 54 h.latest = nil 55 else 56 os.remove(fns.tmp) 57 end 58 end 59 end 60 61 return cantus