46 lines
1.8 KiB
Python
46 lines
1.8 KiB
Python
from signalbot import SignalBot
|
|
import aiohttp
|
|
|
|
from core.util import logs
|
|
|
|
log = logs.get_logger("signalbot")
|
|
|
|
|
|
class NewSignalBot(SignalBot):
|
|
def __init__(self, config):
|
|
super().__init__(config)
|
|
self.bot_uuid = None # Initialize with None
|
|
|
|
async def get_own_uuid(self) -> str:
|
|
"""Fetch bot's UUID by checking contacts, groups, or profile."""
|
|
async with aiohttp.ClientSession() as session:
|
|
uri_contacts = f"http://{self._signal.signal_service}/v1/contacts/{self._signal.phone_number}"
|
|
try:
|
|
resp = await session.get(uri_contacts)
|
|
if resp.status == 200:
|
|
contacts_data = await resp.json()
|
|
if isinstance(contacts_data, list):
|
|
for contact in contacts_data:
|
|
if contact.get("number") == self._phone_number:
|
|
return contact.get("uuid")
|
|
except Exception as e:
|
|
log.error(f"Failed to get UUID from contacts: {e}")
|
|
|
|
async def initialize_bot(self):
|
|
"""Fetch bot's UUID and store it in self.bot_uuid."""
|
|
try:
|
|
self.bot_uuid = await self.get_own_uuid()
|
|
if self.bot_uuid:
|
|
log.info(f"Own UUID: {self.bot_uuid}")
|
|
else:
|
|
log.warning("Unable to fetch bot UUID.")
|
|
except Exception as e:
|
|
log.error(f"Failed to initialize bot UUID: {e}")
|
|
|
|
def start(self):
|
|
"""Start bot without blocking event loop."""
|
|
self._event_loop.create_task(self.initialize_bot()) # Fetch UUID first
|
|
self._event_loop.create_task(self._detect_groups()) # Sync groups
|
|
self._event_loop.create_task(self._produce_consume_messages()) # Process messages
|
|
|
|
self.scheduler.start() # Start async job scheduler |