Source code for webwhatsapi.objects.chat

from .whatsapp_object import WhatsappObjectWithId, driver_needed
from ..helper import safe_str
import time


[docs]def factory_chat(js_obj, driver=None): """Factory function for creating appropriate object given selenium JS object""" if js_obj["kind"] not in ["chat", "group", "broadcast"]: raise AssertionError("Expected chat, group or broadcast object, got {0}".format(js_obj["kind"])) if js_obj["isGroup"]: return GroupChat(js_obj, driver) if js_obj["kind"] == "broadcast": return BroadcastChat(js_obj, driver) return UserChat(js_obj, driver)
[docs]class Chat(WhatsappObjectWithId): def __init__(self, js_obj, driver=None): super(Chat, self).__init__(js_obj, driver) @driver_needed def send_media(self, image_path, caption=None): return self.driver.send_media(image_path, self.id, caption) @driver_needed def send_message_with_thumb(self, image_path, url, title, description, text): return self.driver.send_message_with_thumbnail(image_path, self.id, url, title, description, text) @driver_needed def send_message(self, message): return self.driver.chat_send_message(self.id, message) @driver_needed def send_seen(self): return self.driver.chat_send_seen(self.id)
[docs] def get_messages(self, include_me=False, include_notifications=False): return list(self.driver.get_all_messages_in_chat(self, include_me, include_notifications))
[docs] def get_unread_messages(self, include_me=False, include_notifications=False): """ I fetch unread messages. :param include_me: if user's messages are to be included :type include_me: bool :param include_notifications: if events happening on chat are to be included :type include_notifications: bool :return: list of unread messages :rtype: list """ return list(self.driver.get_unread_messages_in_chat( self.id, include_me, include_notifications ))
# get_unread_messages()
[docs] def load_earlier_messages(self): self.driver.chat_load_earlier_messages(self.id)
[docs] def load_all_earlier_messages(self): self.driver.chat_load_all_earlier_messages(self.id)
[docs] def load_earlier_messages_till(self, last): """ Triggers loading of messages till a specific point in time :param last: Datetime object for the last message to be loaded :type last: datetime :return: Nothing :rtype: None """ timestamp = time.mktime(last.timetuple()) self.driver.wapi_functions.loadEarlierMessagesTillDate(self.id, timestamp)
[docs]class UserChat(Chat): def __init__(self, js_obj, driver=None): super(UserChat, self).__init__(js_obj, driver) def __repr__(self): safe_name = safe_str(self.name) return "<User chat - {name}: {id}>".format( name=safe_name, id=self.id)
[docs]class BroadcastChat(Chat): def __init__(self, js_obj, driver=None): super(BroadcastChat, self).__init__(js_obj, driver) def __repr__(self): safe_name = safe_str(self.name) return "<Broadcast chat - {name}: {id}>".format( name=safe_name, id=self.id)
[docs]class GroupChat(Chat): def __init__(self, js_obj, driver=None): super(GroupChat, self).__init__(js_obj, driver) @driver_needed def get_participants_ids(self): return self.driver.wapi_functions.getGroupParticipantIDs(self.id) @driver_needed def get_participants(self): return list(self.driver.group_get_participants(self.id)) @driver_needed def get_admins(self): return list(self.driver.group_get_admins(self.id)) def __repr__(self): safe_name = safe_str(self.name) return "<Group chat - {name}: {id}, {participants} participants>".format( name=safe_name, id=self.id, participants=len(self.get_participants_ids()))