diff --git a/README.md b/README.md index 51fa48f..5de4c63 100755 --- a/README.md +++ b/README.md @@ -3,4 +3,4 @@ It's like Sopel, except rewritten from scratch using Twisted as a base and over ## Requirements Python 3.6+ -Python packages: `twisted python-dateutil requests bs4 wolframalpha emoji pillow ipython numpy numpngw numexpr` +Python packages: `twisted requests bs4 wolframalpha emoji pillow ipython numpy numpngw numexpr` diff --git a/modules/bq.py b/modules/bq.py index 75dac23..20408ef 100755 --- a/modules/bq.py +++ b/modules/bq.py @@ -4,8 +4,9 @@ Various things related to Banished Quest. """ from datetime import datetime +import tools +import config from module import commands -from tools.time import relativeTime @commands('bq') def BQstatus(bot, trigger): @@ -13,8 +14,8 @@ def BQstatus(bot, trigger): Displays the current status of BQ. """ status = "\x0304DEAD" - deathdate = "[2017-02-16 00:19:00]" + deathdate = datetime(2017, 2, 16, 0, 19, 0) msg = "Banished Quest status: " + status + "\nTime since death: " - msg += relativeTime(datetime.now(), deathdate) + " ago " - msg += deathdate + msg += tools.relative_time(datetime.now(), deathdate) + " ago " + msg += deathdate.strftime(config.default_time_format) bot.msg(msg) diff --git a/modules/seen.py b/modules/seen.py index 1fc9df7..4ab0208 100755 --- a/modules/seen.py +++ b/modules/seen.py @@ -12,7 +12,6 @@ from requests.structures import CaseInsensitiveDict import tools import config -from tools.time import relativeTime from module import commands, example, hook, require_chanmsg, rate @@ -91,9 +90,9 @@ def seen(bot, trigger): return bot.msg(f"I haven't seen \x0308{args.nick}") timestamp = datetime.fromtimestamp(timestamp) + reltime = tools.relative_time(datetime.now(), timestamp) t_format = config.default_time_format timestamp = datetime.strftime(timestamp, t_format) - reltime = relativeTime(datetime.now(), timestamp) if args.first: msg = "First" diff --git a/modules/tell.py b/modules/tell.py index 201d7cc..9e4b312 100755 --- a/modules/tell.py +++ b/modules/tell.py @@ -9,8 +9,8 @@ import threading from datetime import datetime from sqlite3 import OperationalError +import tools import config -from tools.time import relativeTime from module import commands, example, hook def load_database(bot): @@ -110,7 +110,7 @@ def tell_hook(bot, trigger): teller, unixtime, message = tell telldate = datetime.fromtimestamp(unixtime) - reltime = relativeTime(datetime.now(), telldate) + reltime = tools.relative_time(datetime.now(), telldate) t_format = config.default_time_format telldate = datetime.strftime(telldate, t_format) diff --git a/modules/uptime.py b/modules/uptime.py index 5261639..09732cd 100755 --- a/modules/uptime.py +++ b/modules/uptime.py @@ -7,7 +7,6 @@ import datetime from twisted.internet import defer from module import commands -import tools.time def setup(bot): diff --git a/tools/__init__.py b/tools.py similarity index 77% rename from tools/__init__.py rename to tools.py index c7b1a68..6caa8bc 100755 --- a/tools/__init__.py +++ b/tools.py @@ -6,6 +6,7 @@ import re import argparse import threading from collections import defaultdict +from datetime import datetime op_level = { "voice": 1, @@ -213,3 +214,48 @@ class FulviaArgparse(argparse.ArgumentParser): def error(self, message): raise argparse.ArgumentError(None, message) + + +def relative_time(time_1, time_2): + """ + Returns a relative timestamp between `time_1` and `time_2`. Inputs + must be datetime objects. + """ + assert type(time_1) == datetime, "time_1 must be datetime object" + assert type(time_2) == datetime, "time_2 must be datetime object" + + diff = time_1 - time_2 + msg = [] + if diff.days >= 365: + if diff.days // 365 > 1: + msg.append(f"{diff.days // 365} years") + else: + msg.append(f"{diff.days // 365} year") + + if diff.days: + if diff.days > 1: + msg.append(f"{diff.days - (diff.days // 365)*365} days") + else: + msg.append(f"{diff.days} - (diff.days // 365)*365 day") + + if not msg: + if diff.hours: + if diff.hours > 1: + msg.append(f"{diff.hours} hours") + else: + msg.append(f"{diff.hours} hour") + + if diff.minutes: + if diff.minutes > 1: + msg.append(f"{diff.minutes} minutes") + else: + msg.append(f"{diff.minutes} minute") + + if not diff.hours: + if diff.seconds > 1: + msg.append(f"{diff.seconds} seconds") + else: + msg.append(f"{diff.seconds} second") + + msg = ", ".join(msg) + return msg diff --git a/tools/time.py b/tools/time.py deleted file mode 100755 index 8d4ca68..0000000 --- a/tools/time.py +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env python3 -""" -Tools for working with time. -""" -from datetime import datetime - -from dateutil.relativedelta import relativedelta - -import config - - -def relativeTime(time_1, time_2): - """ - Returns the relative time difference between 'time_1' and 'time_2'. - If either 'time_1' or 'time_2' is a string, it will be converted to a - datetime object according to the 'default_time_format' variable in the - config. - """ - t_format = config.default_time_format - if type(time_1) == str: - time_1 = datetime.strptime(time_1, t_format) - if type(time_2) == str: - time_2 = datetime.strptime(time_2, t_format) - - msg = [] - diff = relativedelta(time_1, time_2) - if diff.years: - if diff.years > 1: - msg.append(f"{diff.years} years") - else: - msg.append(f"{diff.years} year") - - if diff.months: - if diff.months > 1: - msg.append(f"{diff.months} months") - else: - msg.append(f"{diff.months} month") - - if diff.days: - if diff.days > 1: - msg.append(f"{diff.days} days") - else: - msg.append(f"{diff.days} day") - - if not msg: - if diff.hours: - if diff.hours > 1: - msg.append(f"{diff.hours} hours") - else: - msg.append(f"{diff.hours} hour") - - if diff.minutes: - if diff.minutes > 1: - msg.append(f"{diff.minutes} minutes") - else: - msg.append(f"{diff.minutes} minute") - - if not diff.hours: - if diff.seconds > 1: - msg.append(f"{diff.seconds} seconds") - else: - msg.append(f"{diff.seconds} second") - - msg = ", ".join(msg) - return msg