def date(self) -> datetime: """ Message sent date. Note: For difference between python2 and python3, please check the following link: - https://docs.python.org/2.7/library/datetime.html#datetime.datetime - https://docs.python.org/3.7library/datetime.html#datetime.datetime for datetime.fromtimestamp. It’s common forthis to be restricted to years from 1970through 2038. `2145888000` is `2038-01-01 00:00:00 UTC` forsecond `2145888000` is `1970-01-26 04:04:48 UTC` formillisecond Examples: >>> msg.date() Returns: datetime: message sent date """ if self.payload.timestamp > 2145888000: time = datetime.fromtimestamp(self.payload.timestamp / 1000) else: time = datetime.fromtimestamp(self.payload.timestamp) return timestamp_to_date(self.payload.timestamp)
async def room_topic_listener( payload: EventRoomTopicPayload) -> None: log.info('receive <room-topic> event <%s>', payload) room: Room = self.Room.load(payload.room_id) await room.ready() changer = self.Contact.load(payload.changer_id) await changer.ready() date = timestamp_to_date(payload.timestamp) self.emit('room-topic', room, payload.new_topic, payload.old_topic, changer, date) await self.on_room_topic(room, payload.new_topic, payload.old_topic, changer, date) room.emit('topic', payload.new_topic, payload.old_topic, changer, date) # emit the room-topic to plugins await self._plugin_manager.emit_events( 'room-topic', room, payload.new_topic, payload.old_topic, changer, date)
async def room_leave_listener( payload: EventRoomLeavePayload) -> None: log.info('receive <room-leave> event <%s>', payload) room = self.Room.load(payload.room_id) # room info is dirty now await room.ready(force_sync=True) leavers = [ self.Contact.load(inviter_id) for inviter_id in payload.removed_ids ] for leaver in leavers: await leaver.ready() remover = self.Contact.load(payload.remover_id) await remover.ready() date = timestamp_to_date(payload.timestamp) self.emit('room-leave', room, leavers, remover, date) await self.on_room_leave(room, leavers, remover, date) room.emit('leave', leavers, remover, date) if self.puppet.self_id() in payload.removed_ids: pass # await self.puppet.room_payload(payload.room_id) # await self.puppet.room_member_payload_dirty( # payload.room_id) # emit the room-leave event to plugins await self._plugin_manager.emit_events( 'room-leave', room, leavers, remover, date)
async def room_join_listener( payload: EventRoomJoinPayload) -> None: log.info('receive <room-join> event <%s>', payload) room = self.Room.load(payload.room_id) await room.ready() invitees = [ self.Contact.load(invitee_id) for invitee_id in payload.invited_ids ] for invitee in invitees: await invitee.ready() inviter = self.Contact.load(payload.inviter_id) await inviter.ready() # timestamp is from hostie-server, but the value range is # 10^10 ~ 10^13 # refer to # :https://github.com/wechaty/python-wechaty/issues/1290 date = timestamp_to_date(payload.timestamp) self.emit('room-join', room, invitees, inviter, date) await self.on_room_join(room, invitees, inviter, date) room.emit('join', invitees, inviter, date) # emit the room-join event to plugins await self._plugin_manager.emit_events( 'room-join', room, invitees, inviter, date)
def date(self) -> datetime: """ Message sent date Python2.7: https://docs.python.org/2.7/library/datetime.html#datetime.datetime Python3+ :https://docs.python.org/3.7/library/datetime.html#datetime.datetime for datetime.fromtimestamp. It’s common for this to be restricted to years from 1970 through 2038. 2145888000 is 2038-01-01 00:00:00 UTC for second 2145888000 is 1970-01-26 04:04:48 UTC for millisecond :return: """ if self.payload.timestamp > 2145888000: time = datetime.fromtimestamp(self.payload.timestamp / 1000) else: time = datetime.fromtimestamp(self.payload.timestamp) return timestamp_to_date(self.payload.timestamp)
def test_timestamp_with_millisecond_precision() -> None: timestamp = timestamp_to_date(1600849574736) assert timestamp is not None
def test_timestamp_with_microsecond_precision() -> None: timestamp = timestamp_to_date(1600849792.367416) assert timestamp is not None