mirror of
https://github.com/kuhyx/signal-bot.git
synced 2026-07-04 15:43:18 +02:00
feat: count messages send by id
This commit is contained in:
parent
807a0ef9f5
commit
6ec89d8e34
54
main.py
54
main.py
@ -17,6 +17,18 @@ 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', '')
|
||||||
|
|
||||||
|
class StringCounter:
|
||||||
|
def __init__(self):
|
||||||
|
self.string_map = {}
|
||||||
|
|
||||||
|
async def update_string_map(self, string):
|
||||||
|
await asyncio.sleep(0) # This is just to simulate asynchronous behavior
|
||||||
|
if string in self.string_map:
|
||||||
|
self.string_map[string] += 1
|
||||||
|
else:
|
||||||
|
self.string_map[string] = 1
|
||||||
|
return self.string_map
|
||||||
|
|
||||||
def download_image(image_url):
|
def download_image(image_url):
|
||||||
# Download the image
|
# Download the image
|
||||||
image_response = requests.get(image_url)
|
image_response = requests.get(image_url)
|
||||||
@ -66,9 +78,9 @@ async def send_image(base64_attachments, recipients=GROUP_ID_SEND):
|
|||||||
print(f"Request failed with status code: {response.status_code}")
|
print(f"Request failed with status code: {response.status_code}")
|
||||||
print(response.text)
|
print(response.text)
|
||||||
|
|
||||||
def send_message(message_content, recipients=GROUP_ID_SEND):
|
def send_message(message_content, recipients=PHONE_NUMBER):
|
||||||
data = {
|
data = {
|
||||||
"message": message_content,
|
"message": str(message_content),
|
||||||
"number": PHONE_NUMBER,
|
"number": PHONE_NUMBER,
|
||||||
"recipients": [recipients]
|
"recipients": [recipients]
|
||||||
}
|
}
|
||||||
@ -76,7 +88,7 @@ def send_message(message_content, recipients=GROUP_ID_SEND):
|
|||||||
if response.status_code == 200:
|
if response.status_code == 200:
|
||||||
print("Request was successful.")
|
print("Request was successful.")
|
||||||
else:
|
else:
|
||||||
print(f"Request failed with status code: {response.status_code}")
|
print(f"Request failed with status code: {response.status_code} {data}")
|
||||||
print(response.text)
|
print(response.text)
|
||||||
|
|
||||||
|
|
||||||
@ -96,9 +108,9 @@ def extract_message_content(message):
|
|||||||
|
|
||||||
|
|
||||||
def extract_source_uuid(message):
|
def extract_source_uuid(message):
|
||||||
message_json = json.loads(message)
|
message_json = message
|
||||||
#inside_message = message_json.get('envelope', {}).get('sourceUuid', {})
|
inside_message = message_json.get('sourceUuid', {})
|
||||||
return ""
|
return inside_message
|
||||||
|
|
||||||
def update_string_count(string, mapping):
|
def update_string_count(string, mapping):
|
||||||
if string in mapping:
|
if string in mapping:
|
||||||
@ -127,15 +139,14 @@ def update_string_count(string, mapping):
|
|||||||
USER_MESSAGE_COUNT = {}
|
USER_MESSAGE_COUNT = {}
|
||||||
|
|
||||||
|
|
||||||
async def count_messages(message_content, queue):
|
async def count_messages(message_content, counter):
|
||||||
if message_content:
|
if message_content:
|
||||||
uuid = extract_source_uuid(message_content)
|
uuid = extract_source_uuid(message_content)
|
||||||
#USER_MESSAGE_COUNT = update_string_count(uuid, USER_MESSAGE_COUNT)
|
await counter.update_string_map(uuid)
|
||||||
#await queue.put(USER_MESSAGE_COUNT)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
async def scheduled_task(queue):
|
async def scheduled_task(counter):
|
||||||
while True:
|
while True:
|
||||||
now = datetime.now()
|
now = datetime.now()
|
||||||
target_time = datetime.combine(now.date(), time(21, 37))
|
target_time = datetime.combine(now.date(), time(21, 37))
|
||||||
@ -144,9 +155,8 @@ async def scheduled_task(queue):
|
|||||||
wait_time = (target_time - now).total_seconds()
|
wait_time = (target_time - now).total_seconds()
|
||||||
await asyncio.sleep(wait_time)
|
await asyncio.sleep(wait_time)
|
||||||
# Trigger your function here
|
# Trigger your function here
|
||||||
message_count = await queue.get()
|
send_message(counter.string_map, GROUP_ID_SEND)
|
||||||
send_message(message_count)
|
counter.string_map = {}
|
||||||
queue.task_done()
|
|
||||||
|
|
||||||
async def trigger_command(message_content, recipient):
|
async def trigger_command(message_content, recipient):
|
||||||
message_value = message_message(message_content)
|
message_value = message_message(message_content)
|
||||||
@ -161,9 +171,9 @@ async def trigger_command(message_content, recipient):
|
|||||||
except:
|
except:
|
||||||
send_message(f"trigger_command, unknown error {message_content}", recipient)
|
send_message(f"trigger_command, unknown error {message_content}", recipient)
|
||||||
|
|
||||||
async def send_to_group(message_content):
|
async def send_to_group(message_content, counter):
|
||||||
if message_group_id(message_content) == GROUP_ID:
|
if message_group_id(message_content) == GROUP_ID:
|
||||||
#await count_messages(message_content, queue)
|
await count_messages(message_content, queue)
|
||||||
await trigger_command(message_content, GROUP_ID_SEND)
|
await trigger_command(message_content, GROUP_ID_SEND)
|
||||||
|
|
||||||
async def remove_attachment(attachment_id):
|
async def remove_attachment(attachment_id):
|
||||||
@ -186,25 +196,25 @@ async def get_attachments():
|
|||||||
print(f"Request failed with status code: {response.status_code}")
|
print(f"Request failed with status code: {response.status_code}")
|
||||||
print(response)
|
print(response)
|
||||||
|
|
||||||
async def listen_to_server(queue):
|
async def listen_to_server(counter):
|
||||||
uri = f"ws://localhost:9922/v1/receive/{PHONE_NUMBER}?send_read_receipts=false"
|
uri = f"ws://localhost:9922/v1/receive/{PHONE_NUMBER}?send_read_receipts=false"
|
||||||
async with websockets.connect(uri) as websocket:
|
async with websockets.connect(uri) as websocket:
|
||||||
print(f"Connected to signal server")
|
print(f"Connected to signal server")
|
||||||
try:
|
try:
|
||||||
async for message in websocket:
|
async for message in websocket:
|
||||||
message_content = extract_message_content(message)
|
message_content = extract_message_content(message)
|
||||||
await send_to_group(message_content)
|
#await send_to_group(message_content)
|
||||||
if message_content.get('destinationNumber', {}) == PHONE_NUMBER:
|
if message_content.get('destinationNumber', {}) == PHONE_NUMBER:
|
||||||
#await count_messages(message_content, queue)
|
await count_messages(json.loads(message).get('envelope', {}), counter)
|
||||||
await trigger_command(message_content, PHONE_NUMBER)
|
await trigger_command(message_content, PHONE_NUMBER)
|
||||||
except websockets.ConnectionClosed as e:
|
except websockets.ConnectionClosed as e:
|
||||||
print(f"Connection closed: {e}")
|
print(f"Connection closed: {e}")
|
||||||
|
|
||||||
async def main():
|
async def main():
|
||||||
queue = asyncio.Queue()
|
counter = StringCounter()
|
||||||
task1 = asyncio.create_task(listen_to_server(queue))
|
task1 = asyncio.create_task(listen_to_server(counter))
|
||||||
# task2 = asyncio.create_task(scheduled_task(queue))
|
task2 = asyncio.create_task(scheduled_task(counter))
|
||||||
await asyncio.gather(task1)# task2)
|
await asyncio.gather(task1, task2)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
asyncio.run(main())
|
asyncio.run(main())
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user