From 01955f1c646be7fbac4f01a76377b075ce684e7a Mon Sep 17 00:00:00 2001 From: linuxdaemon Date: Wed, 10 Jul 2019 14:46:31 -0500 Subject: [PATCH] feat(parser): add tag access fields to Message objects --- irclib/parser.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/irclib/parser.py b/irclib/parser.py index 3f4b611..036f5a9 100644 --- a/irclib/parser.py +++ b/irclib/parser.py @@ -4,6 +4,7 @@ Backported from async-irc (https://github.com/snoonetIRC/async-irc.git) """ +import datetime import re from abc import ABCMeta, abstractmethod from typing import ( @@ -70,6 +71,17 @@ SelfT = TypeVar("SelfT") +def parse_server_time(value: Optional[str]) -> datetime.datetime: + if value: + ts = datetime.datetime.strptime(value, "%Y-%m-%dT%H:%M:%S.%fZ").replace( + tzinfo=datetime.timezone.utc + ) + else: + ts = datetime.datetime.now(datetime.timezone.utc) + + return ts + + class Parseable(metaclass=ABCMeta): """Abstract class for parseable objects""" @@ -579,6 +591,22 @@ def __init__( self._command = command self._parameters = _parse_params(parameters) + self.time = parse_server_time(self.get_tag_value("time")) + self.message_id = self.get_tag_value("msgid") + self.batch_id = self.get_tag_value("batch") + + def has_tag(self, name: str) -> bool: + if not self.tags: + return False + + return name in self.tags + + def get_tag_value(self, name: str) -> Optional[str]: + if self.tags and name in self.tags: + return self.tags[name].value + + return None + @property def tags(self) -> MsgTagList: """IRC tag list"""