diff --git a/src/data_types/counter.py b/src/data_types/counter.py index 212cf89..d2356ba 100644 --- a/src/data_types/counter.py +++ b/src/data_types/counter.py @@ -4,7 +4,7 @@ from collections import defaultdict # Custom libs -from utils import plural, from_now, percent, val_sum, top_key +from utils import plural, from_now, percent, val_sum, top_key, utc_today class Counter: @@ -25,7 +25,7 @@ class Counter: if self.last_used is None: return 0 return self.all_usages() + 1 / ( - 100000 * ((datetime.today() - self.last_used).days + 1) + 100000 * ((utc_today() - self.last_used).days + 1) ) def all_usages(self) -> int: diff --git a/src/data_types/emoji.py b/src/data_types/emoji.py index cb052e9..c80c591 100644 --- a/src/data_types/emoji.py +++ b/src/data_types/emoji.py @@ -5,7 +5,7 @@ import discord # Custom libs -from utils import mention, plural, from_now, top_key, percent +from utils import mention, plural, from_now, top_key, percent, utc_today class Emoji: @@ -44,14 +44,14 @@ class Emoji: ) def life_days(self) -> int: - return (datetime.today() - self.emoji.created_at).days + return (utc_today() - self.emoji.created_at).days def use_days(self) -> int: # If never used, use creation date instead if self.last_used is None: return self.life_days() else: - return (datetime.today() - self.last_used).days + return (utc_today() - self.last_used).days def get_top_member(self) -> int: return top_key(self.members) diff --git a/src/main.py b/src/main.py index 3ad4718..a375c1e 100644 --- a/src/main.py +++ b/src/main.py @@ -18,7 +18,7 @@ emojis.load_emojis() bot = Bot( "Discord Analyst", - "1.17.1", + "1.17.2", alias="%", ) diff --git a/src/scanners/scanner.py b/src/scanners/scanner.py index 552b1c5..042d787 100644 --- a/src/scanners/scanner.py +++ b/src/scanners/scanner.py @@ -18,6 +18,7 @@ from utils import ( command_cache, FilterLevel, SPLIT_TOKEN, + utc_now ) from logs import ( GuildLogs, @@ -131,7 +132,7 @@ class Scanner(ABC): self.start_date = None if len(dates) < 1 else min(dates) self.stop_date = None if len(dates) < 2 else max(dates) - if self.start_date is not None and self.start_date > datetime.now(): + if self.start_date is not None and self.start_date > utc_now(): await message.channel.send( f"Start date is after today", reference=message ) @@ -228,7 +229,7 @@ class Scanner(ABC): ), ) if self.stop_date is None: - self.stop_date = datetime.utcnow() + self.stop_date = utc_now() self.msg_count = 0 self.total_msg = 0 diff --git a/src/utils/utils.py b/src/utils/utils.py index fb27b8c..f8f948d 100644 --- a/src/utils/utils.py +++ b/src/utils/utils.py @@ -4,7 +4,7 @@ import os import logging import discord import math -from datetime import datetime, timedelta +from datetime import datetime, timedelta, timezone import re import time import dateutil.parser @@ -258,13 +258,18 @@ def parse_iso_datetime(str_date: str) -> datetime: RELATIVE_REGEX = r"(yesterday|today|\d*hours?|\d+h(ours?)?|\d*days?|\d+d(ays?)?|\d*weeks?|\d+w(eeks?)?|\d*months?|\d+m(onths?)?|\d*years?|\d+y(ears?)?)" +def utc_now() -> datetime: + return datetime.now(tz=timezone.utc) + +def utc_today() -> datetime: + return datetime.now(tz=timezone.utc).date() + + def parse_relative_time(src: str) -> datetime: - today = datetime.utcnow().date() - today = datetime(today.year, today.month, today.day) if src == "today": - return today + return utc_today() elif src == "yesterday": - return today - relativedelta(days=1) + return utc_today() - relativedelta(days=1) else: m = re.match("(\d*)(\w+)", src) delta = None @@ -280,7 +285,7 @@ def parse_relative_time(src: str) -> datetime: delta = relativedelta(months=value) elif unit == "y": delta = relativedelta(years=value) - return datetime.utcnow() - delta + return utc_now() - delta def parse_time(src: str) -> datetime: @@ -344,7 +349,7 @@ def get_intro( """ time_text = "" if start_datetime is not None: - stop_datetime = datetime.now() if stop_datetime is None else stop_datetime + stop_datetime = utc_now() if stop_datetime is None else stop_datetime time_text = f" (in {str_delta(stop_datetime - start_datetime)})" # Show all data (members, channels) when it's less than 5 units if len(members) == 0: