feat: made script more extensible

This commit is contained in:
Krzysztof Rudnicki 2024-06-23 23:47:46 +02:00
parent 09e811a2b7
commit 44f965c16b
2 changed files with 86 additions and 11 deletions

47
main.py
View File

@ -8,6 +8,7 @@ import json
# Set up environment variable for the phone number # Set up environment variable for the phone number
PHONE_NUMBER = os.getenv('PHONE_NUMBER', '1234567890') # Default to '1234567890' if not set PHONE_NUMBER = os.getenv('PHONE_NUMBER', '1234567890') # Default to '1234567890' if not set
RECEIVE_URL = f"http://localhost:9922/v1/receive/{PHONE_NUMBER}" 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 = os.getenv('GROUP_ID', '')
GROUP_ID_SEND = os.getenv('GROUP_ID_SEND', '') GROUP_ID_SEND = os.getenv('GROUP_ID_SEND', '')
CAT_API = os.getenv('CAT_API', '') CAT_API = os.getenv('CAT_API', '')
@ -38,15 +39,13 @@ def fetch_and_download_cat_image():
os.remove(image_filename) os.remove(image_filename)
return base64_encoded_data return base64_encoded_data
def send_cat(): def send_cat(quote_message):
url = 'http://localhost:9922/v2/send'
data = { data = {
"base64_attachments": [fetch_and_download_cat_image()], "base64_attachments": [fetch_and_download_cat_image()],
"number": PHONE_NUMBER, "number": PHONE_NUMBER,
"recipients": [GROUP_ID_SEND] "recipients": [GROUP_ID_SEND]
} }
response = requests.post(url, json=data) response = requests.post(SEND_URL, json=data)
if response.status_code == 200: if response.status_code == 200:
print("Request was successful.") print("Request was successful.")
else: else:
@ -54,19 +53,45 @@ def send_cat():
print(response.text) 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(): async def listen_to_server():
uri = f"ws://localhost:9922/v1/receive/{PHONE_NUMBER}" uri = f"ws://localhost:9922/v1/receive/{PHONE_NUMBER}"
async with websockets.connect(uri) as websocket: async with websockets.connect(uri) as websocket:
print(f"Connected to server at {uri}") print(f"Connected to server at {uri}")
try: try:
async for message in websocket: async for message in websocket:
message_json = json.loads(message) message_content = extract_message_content(message)
inside_message = message_json.get('envelope', {}).get('dataMessage', {}) if message_group_id(message_content) == GROUP_ID:
if inside_message == {}: message_value = message_message(message_content)
inside_message = message_json.get('envelope', {}).get('syncMessage', {}).get('sentMessage', {}) print("message_value: ", message_value)
print("message", message) if message_value in command_map:
if inside_message.get('message') == "!kot" and inside_message.get('groupInfo', {}).get('groupId', {}) == GROUP_ID: # Call the corresponding function
send_cat() command_map[message_value]()
else:
print("Unknown command")
except websockets.ConnectionClosed as e: except websockets.ConnectionClosed as e:
print(f"Connection closed: {e}") print(f"Connection closed: {e}")

50
readme.md Normal file
View File

@ -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"
}