birthday.lua (1707B)
1 require "lib.utils" 2 pprint = require "pprint" 3 4 local fns = { 5 tmp = ".tmp" 6 } 7 8 function announce(args, date, original) 9 local time = { 10 year = tonumber(string.sub(date, 1, 4)), 11 month = tonumber(string.sub(date, 6, 7)), 12 day = tonumber(string.sub(date, 9, 10)) 13 } 14 local monthname = os.date("%B", os.time(time)) 15 local dayord = ord(time.day) 16 local count = tostring(time.year - tonumber(string.sub(original, 1, 4))) 17 local countord = ord(count) 18 local day = tostring(time.day) 19 local datestring = string.format("The %s%s of %s of %d", day, dayord, monthname, time.year) 20 local datepad = (string.rep(" ", (80 - string.len(datestring))//2)) 21 22 defs = { 23 MAILDATE = os.date("%a, %d %b %Y %T %z"), 24 DATE = datepad .. datestring, 25 PLAYER = args.name, 26 COUNT = count .. countord 27 } 28 29 os.execute(string.format("m4 %s templates/birthday.m4 > %s", m4flags(defs), fns.tmp)) 30 if args.p then 31 os.execute(string.format("cat %s", fns.tmp)) 32 else 33 os.execute(string.format("neomutt -H %s -E", fns.tmp)) 34 end 35 os.remove(fns.tmp) 36 end 37 38 function birthday(args, players, log) 39 if not (players[args.name]) then 40 die("No such player.") 41 end 42 43 local original = "xxxx-xx-xx" 44 if players[args.name].birthday then 45 original = players[args.name].birthday 46 else 47 for _,e in ipairs(players[args.name].history) do 48 original = math.min(original, e.registration) 49 end 50 end 51 52 local this_birthday = os.date("%Y") .. "-" .. string.sub(original, 6) 53 local prev_birthday = tostring(tonumber(os.date("%Y")) - 1) .. "-" .. string.sub(original, 6) 54 local today = os.date("%Y-%m-%d") 55 56 if (this_birthday <= today) then 57 announce(args, this_birthday, original) 58 else 59 announce(args, prev_birthday, original) 60 end 61 end 62 63 return birthday