Skip to content

Commit

Permalink
fix: use phonenumbers library to check if a recipient id is a phone n…
Browse files Browse the repository at this point in the history
…umber (#95)

Closes #29 
---------

Co-authored-by: Kariton <[email protected]>
  • Loading branch information
Era-Dorta and Kariton authored Feb 8, 2025
1 parent 28538a7 commit 98a7811
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 8 deletions.
13 changes: 12 additions & 1 deletion poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ aiohttp = ">=3.11.9"
python = ">=3.9"
redis = ">=5.2.0"
websockets = ">=14.1"
phonenumbers = ">=8.13.54"

[tool.poetry.dev-dependencies]
black = ">=24.10.0"
Expand Down
11 changes: 5 additions & 6 deletions signalbot/bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from typing import Optional, Union, List, Callable, Any
import re
import uuid
import phonenumbers

from .api import SignalAPI, ReceiveMessagesError
from .command import Command
Expand Down Expand Up @@ -285,13 +286,11 @@ def _resolve_receiver(self, receiver: str) -> str:
raise SignalBotError(f"Cannot resolve receiver.")

def _is_phone_number(self, phone_number: str) -> bool:
if phone_number is None:
return False
if phone_number[0] != "+":
return False
if len(phone_number[1:]) > 15:
try:
parsed_number = phonenumbers.parse(phone_number, region=None)
return phonenumbers.is_valid_number(parsed_number)
except phonenumbers.phonenumberutil.NumberParseException:
return False
return True

def _is_valid_uuid(self, receiver_uuid: str):
try:
Expand Down
2 changes: 1 addition & 1 deletion tests/test_bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ def test_listenUser_invalid_phone_number(self):

def test_listen_valid_invalid_phone_number(self):
invalid_number = "49987654321"
valid_number = "+49123454321"
valid_number = "+49303454321"
self.signal_bot.listen(invalid_number)
self.signal_bot.listen(valid_number)
expected_user_chats = {valid_number}
Expand Down

0 comments on commit 98a7811

Please sign in to comment.