diff --git a/main.py b/main.py index 5f9cc56..110f84c 100644 --- a/main.py +++ b/main.py @@ -8,6 +8,7 @@ import json # Set up environment variable for the phone number PHONE_NUMBER = os.getenv('PHONE_NUMBER', '1234567890') # Default to '1234567890' if not set RECEIVE_URL = f"http://localhost:9922/v1/receive/{PHONE_NUMBER}" +SEND_URL = 'http://localhost:9922/v2/send' GROUP_ID = os.getenv('GROUP_ID', '') GROUP_ID_SEND = os.getenv('GROUP_ID_SEND', '') CAT_API = os.getenv('CAT_API', '') @@ -38,15 +39,13 @@ def fetch_and_download_cat_image(): os.remove(image_filename) return base64_encoded_data -def send_cat(): - url = 'http://localhost:9922/v2/send' +def send_cat(quote_message): data = { "base64_attachments": [fetch_and_download_cat_image()], "number": PHONE_NUMBER, "recipients": [GROUP_ID_SEND] } - response = requests.post(url, json=data) - + response = requests.post(SEND_URL, json=data) if response.status_code == 200: print("Request was successful.") else: @@ -54,19 +53,45 @@ def send_cat(): print(response.text) +def message_message(inside_message): + message_value = inside_message.get('message') + return message_value + +def message_group_id(inside_message): + return inside_message.get('groupInfo', {}).get('groupId', {}) + +def message_timestamp(inside_message): + + +def extract_message_content(message): + message_json = json.loads(message) + inside_message = message_json.get('envelope', {}).get('dataMessage', {}) + if inside_message == {}: + inside_message = message_json.get('envelope', {}).get('syncMessage', {}).get('sentMessage', {}) + return inside_message + + + + +command_map = { + "!kot": lambda name: send_cat(name) +} + async def listen_to_server(): uri = f"ws://localhost:9922/v1/receive/{PHONE_NUMBER}" async with websockets.connect(uri) as websocket: print(f"Connected to server at {uri}") try: async for message in websocket: - message_json = json.loads(message) - inside_message = message_json.get('envelope', {}).get('dataMessage', {}) - if inside_message == {}: - inside_message = message_json.get('envelope', {}).get('syncMessage', {}).get('sentMessage', {}) - print("message", message) - if inside_message.get('message') == "!kot" and inside_message.get('groupInfo', {}).get('groupId', {}) == GROUP_ID: - send_cat() + message_content = extract_message_content(message) + if message_group_id(message_content) == GROUP_ID: + message_value = message_message(message_content) + print("message_value: ", message_value) + if message_value in command_map: + # Call the corresponding function + command_map[message_value]() + else: + print("Unknown command") except websockets.ConnectionClosed as e: print(f"Connection closed: {e}") diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..1af21f3 --- /dev/null +++ b/readme.md @@ -0,0 +1,50 @@ +Usefull: +https://bbernhard.github.io/signal-cli-rest-api/ + + +If the message was send from the same account as the bot is connected to: +{ + "envelope": { + "source": "NAME", + "sourceNumber": "PHONE_NUMBER", + "sourceUuid": "SOURCE_ID", + "sourceName": "USER_DEFINED_NAME", + "sourceDevice": 69, + "timestamp": 1719177728639, + "syncMessage": { + "sentMessage": { + "destination": "DEST_NAME", + "destinationNumber": "DEST_PHONE_NUMBER", + "destinationUuid": "DEST_SEND_MESSAGE", + "timestamp": 1719177728639, + "message": "MESSAGE_CONTENT", + "expiresInSeconds": 0, + "viewOnce": false + } + } + }, + "account": "BOT_ACCOUNT_PHONE_NUMBER" +} + +If the message was send from other account: +{ + "envelope": { + "source": "NAME", + "sourceNumber": "PHONE_NUMBER", + "sourceUuid": "SOURCE_ID", + "sourceName": "USER_DEFINED_NAME", + "sourceDevice": 69, + "timestamp": 1719177917717, + "dataMessage": { + "timestamp": 1719177917717, + "message": "MESSAGE_CONTENT", + "expiresInSeconds": 0, + "viewOnce": false, + "groupInfo": { + "groupId": "ID_OF_GROUP_SEND_TO", + "type": "DELIVER" + } + } + }, + "account": "BOT_ACCOUNT_PHONE_NUMBER" +} \ No newline at end of file