def handle_age(bot, ievent): """ age <nick> .. show age of user """ try: who = ievent.args[0].lower() except IndexError: ievent.missing('<nick>') return userhost = getwho(bot, who) if not userhost: ievent.reply("don't know userhost of %s" % who) return name = users.getname(userhost) if not name: ievent.reply("can't find user for %s" % userhost) return s = create_session() bd = s.query(Birthday).filter(Birthday.name==name).first() try: birthday = bd.birthday except (TypeError, AttributeError): ievent.reply("can't find birthday data for %s" % who) return btime = strtotime(birthday) if btime == None: ievent.reply("can't make a date out of %s" % birthday) return age = int(time.time()) - int(btime) ievent.reply("age of %s is %s" % (who, elapsedstring(age, ywd=True)))
def handle_checkbd2(bot, ievent): """ bd-check <nr> .. show birthdays in month (by number) """ try: monthnr = int(ievent.args[0]) if monthnr < 1 or monthnr > 12: ievent.reply("number must be between 1 and 12") return except (IndexError, ValueError): ievent.missing('<monthnr>') return mstr = "" result = [] s = create_session() bds = s.query(Birthday).all() if not bds: ievent.reply('no birthdays known') return for i in bds: btime = strtotime(i.birthday) if btime == None: continue (day, month) = getdaymonth(btime) if month == bdmonths[monthnr]: result.append((int(day), i.name, i.birthday)) result.sort(lambda x, y: cmp(x[0], y[0])) for i in result: mstr += "%s: %s " % (i[1], i[2]) if mstr: mstr = "birthdays in %s = " % bdmonths[monthnr] + mstr ievent.reply(mstr) else: ievent.reply('no birthdays found for %s' % bdmonths[monthnr])
def handle_todosettime(bot, ievent): """ todo-settime [<channel|name>] <itemnr> <timestring> .. set time \ on todo item """ ttime = strtotime(ievent.txt) if ttime == None: ievent.reply("can't detect time") return txt = striptime(ievent.txt) try: (who, itemnr) = txt.split() except ValueError: try: (itemnr, ) = txt.split() who = users.getname(ievent.userhost) except ValueError: ievent.missing('[<channe|namel>] <itemnr> <timestring>') return try: itemnr = int(itemnr) except ValueError: ievent.missing('[<channel|name>] <itemnr> <timestring>') return who = who.lower() if not todo.settime(who, itemnr, ttime): ievent.reply('no todo %s found for %s' % (itemnr, who)) return ievent.reply('time of todo %s set to %s' % (itemnr, time.ctime(ttime)))
def handle_logtime(bot, ievent): """ show log from a certain time """ if not logs: ievent.reply('log plugin is not enabled') return if ievent.channel not in logs.loglist: ievent.reply('logging is not enabled in %s' % ievent.channel) return fromtime = strtotime(ievent.rest) if not fromtime: ievent.reply("can't detect time") return result = logs.fromtimewithbot(ievent.channel, fromtime) if result: username = users.getname(ievent.userhost) res = [] for i in result: if i[2] == 'bot': txt = i[4] else: nr = i[4].find(' ') txt = i[4][nr:].strip() res.append("[%s] <%s> %s" % (hourmin(float(i[1])), i[2], txt)) ievent.reply(res) return ievent.reply('no data found')
def handle_checkbd(bot, ievent): """ bd-check .. check birthdays for current month """ (nowday, nowmonth) = getdaymonth(time.time()) mstr = "" result = [] s = create_session() bds = s.query(Birthday).all() if not bds: ievent.reply('no birthdays this month') return for i in bds: btime = strtotime(i.birthday) if btime == None: continue (day, month) = getdaymonth(btime) if month == nowmonth: result.append((int(day), i.name, i.birthday)) if day == nowday and month == nowmonth: ievent.reply("it's %s's birthday today!" % i.name) result.sort(lambda x, y: cmp(x[0], y[0])) for i in result: mstr += "%s: %s " % (i[1], i[2]) if mstr: mstr = "birthdays this month = " + mstr ievent.reply(mstr) else: ievent.reply('no birthdays this month')
def handle_settodo(bot, ievent): """ todo-set <name> <txt> .. add a todo to another user's todo list""" try: who = ievent.args[0] what = ' '.join(ievent.args[1:]) except IndexError: ievent.missing('<nick> <what>') return if not what: ievent.missing('<nick> <what>') return userhost = getwho(bot, who) if not userhost: ievent.reply("can't find userhost for %s" % who) return whouser = users.getname(userhost) if not whouser: ievent.reply("can't find user for %s" % userhost) return name = users.getname(ievent.userhost) if not users.permitted(userhost, name, 'todo'): ievent.reply("%s doesn't permit todo sharing for %s " % \ (who, name)) return what = "%s: %s" % (ievent.nick, what) ttime = strtotime(what) nr = 0 if not ttime == None: ievent.reply('time detected ' + time.ctime(ttime)) what = striptime(what) alarmnr = alarms.add(bot.name, who, ttime, what) nr = todo.add(whouser, what, ttime, alarmnr=alarmnr) else: nr = todo.add(whouser, what, 0) ievent.reply('todo item %s added' % nr)
def handle_chantodo2(bot, ievent): """ set todo item for channel""" what = ievent.rest ttime = strtotime(what) nr = 0 if not ttime == None: ievent.reply('time detected ' + time.ctime(ttime)) result = '(%s) ' % ievent.nick + striptime(what) alarmnr = alarms.add(bot.name, ievent.channel, ttime, result) nr = todo.add(ievent.channel, result, ttime, alarmnr=alarmnr) else: result = '(%s) ' % ievent.nick + what nr = todo.add(ievent.channel, result, 0) ievent.reply('todo item %s added' % nr)
def handle_todo2(bot, ievent): """ set todo item """ if not ievent.rest: ievent.missing("<what>") return else: what = ievent.rest name = users.getname(ievent.userhost) ttime = strtotime(what) nr = 0 if not ttime == None: ievent.reply('time detected ' + time.ctime(ttime)) what = striptime(what) alarmnr = alarms.add(bot.name, ievent.nick, ttime, what) nr = todo.add(name, what, ttime, alarmnr=alarmnr) else: nr = todo.add(name, what) ievent.reply('todo item %s added' % nr)
def handle_tomorrow(bot, ievent): """ todo-tomorrow .. show time related todo items for tomorrow """ username = users.getname(ievent.userhost) if ievent.rest: what = ievent.rest ttime = strtotime(what) if ttime != None: if ttime < today() or ttime > today() + 24*60*60: ievent.reply("%s is not tomorrow" % \ time.ctime(ttime + 24*60*60)) return ttime += 24*60*60 ievent.reply('time detected ' + time.ctime(ttime)) what = striptime(what) else: ttime = today() + 42*60*60 todo.add(username, what, ttime) ievent.reply('todo added') return todoos = todo.withintime(username, today()+24*60*60, today()+2*24*60*60) saytodo(bot, ievent, todoos)
def handle_tomorrow(bot, ievent): """ todo-tomorrow .. show time related todo items for tomorrow """ username = users.getname(ievent.userhost) if ievent.rest: what = ievent.rest ttime = strtotime(what) if ttime != None: if ttime < today() or ttime > today() + 24 * 60 * 60: ievent.reply("%s is not tomorrow" % \ time.ctime(ttime + 24*60*60)) return ttime += 24 * 60 * 60 ievent.reply('time detected ' + time.ctime(ttime)) what = striptime(what) else: ttime = today() + 42 * 60 * 60 todo.add(username, what, ttime) ievent.reply('todo added') return todoos = todo.withintime(username, today() + 24 * 60 * 60, today() + 2 * 24 * 60 * 60) saytodo(bot, ievent, todoos)
def handle_mailtime(bot, ievent): """ mail log since a given time """ if not logs: ievent.reply('log plugin is not enabled') return if ievent.channel not in logs.loglist: ievent.reply('logging is not enabled in %s' % ievent.channel) return fromtime = strtotime(ievent.rest) if not fromtime: ievent.reply("can't detect time") return result = logs.fromtimewithbot(ievent.channel, fromtime) if result: username = users.getname(ievent.userhost) email = getemail(username) if email: try: res = [] for i in result: if i[2] == 'bot': txt = i[4] else: nr = i[4].find(' ') txt = i[4][nr:].strip() res.append("[%s] <%s> %s" % (hourmin(float(i[1])), i[2], \ txt)) domail(email, res, subject="log of %s" % ievent.channel) except Exception, ex: ievent.reply("can't send email: %s" % str(ex)) return ievent.reply('%s lines sent' % len(result)) return else: ievent.reply("can't get email of %s" % username) return
try: ttime = time.time() + sec # check for time overflow if ttime > 2**31: ievent.reply("time overflow") return # add alarm nrid = alarms.add(bot.name, ievent.nick, ttime, \ ' '.join(ievent.args[1:]), ievent.printto) ievent.reply("alarm %s set at %s" % (nrid, time.ctime(ttime))) return except Exception, ex: handle_exception(ievent) return # see if we can determine time from txt alarmtime = strtotime(alarmtxt) if not alarmtime: ievent.reply("can't detect time") return # check if alarm txt is provided txt = striptime(alarmtxt).strip() if not txt: ievent.reply('i need txt to remind you') return if time.time() > alarmtime: ievent.reply("we are already past %s" % time.ctime(alarmtime)) return # add alarm nrid = alarms.add(bot.name, ievent.nick, alarmtime, txt, ievent.printto) ievent.reply("alarm %s set at %s" % (nrid, time.ctime(alarmtime)))