diff --git a/pyproject.toml b/pyproject.toml index 5505d27..1616ab4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,7 +18,7 @@ maintainers = ["René Filip"] name = "signalbot" readme = "README.md" repository = "https://github.com/filipre/signalbot" -version = "0.9.2" +version = "0.10.1" [tool.poetry.dependencies] APScheduler = "^3.9.1" diff --git a/signalbot/bot.py b/signalbot/bot.py index 691d52d..9b6d3f4 100644 --- a/signalbot/bot.py +++ b/signalbot/bot.py @@ -6,6 +6,7 @@ import traceback from typing import Optional, Union, List, Callable import re +import uuid from .api import SignalAPI, ReceiveMessagesError from .command import Command @@ -240,6 +241,9 @@ def _resolve_receiver(self, receiver: str) -> str: if self._is_phone_number(receiver): return receiver + if self._is_valid_uuid(receiver): + return receiver + if self._is_group_id(receiver): return receiver @@ -259,6 +263,13 @@ def _is_phone_number(self, phone_number: str) -> bool: return False return True + def _is_valid_uuid(self, receiver_uuid: str): + try: + uuid.UUID(str(receiver_uuid)) + return True + except ValueError: + return False + def _is_group_id(self, group_id: str) -> bool: """Check if group_id has the right format, e.g. diff --git a/signalbot/message.py b/signalbot/message.py index 5f30ee2..05c2429 100644 --- a/signalbot/message.py +++ b/signalbot/message.py @@ -15,6 +15,8 @@ class Message: def __init__( self, source: str, + source_number: Optional[str], + source_uuid: str, timestamp: int, type: MessageType, text: str, @@ -27,6 +29,8 @@ def __init__( ): # required self.source = source + self.source_number = source_number + self.source_uuid = source_uuid self.timestamp = timestamp self.type = type self.text = text @@ -74,10 +78,13 @@ async def parse(cls, signal: SignalAPI, raw_message: str): # General attributes try: source = raw_message["envelope"]["source"] + source_uuid = raw_message["envelope"]["sourceUuid"] timestamp = raw_message["envelope"]["timestamp"] except Exception: raise UnknownMessageFormatError + source_number = raw_message["envelope"].get("sourceNumber") + # Option 1: syncMessage if "syncMessage" in raw_message["envelope"]: type = MessageType.SYNC_MESSAGE @@ -113,6 +120,8 @@ async def parse(cls, signal: SignalAPI, raw_message: str): return cls( source, + source_number, + source_uuid, timestamp, type, text,