def apply_offset(entity: TypeMessageEntity, inner_offset: int ) -> Optional[TypeMessageEntity]: entity = Entity.copy(entity) entity.offset += inner_offset if entity.offset < 0: entity.offset = 0 elif entity.offset > len(self.text): return None elif entity.offset + entity.length > len(self.text): entity.length = len(self.text) - entity.offset return entity
def compare_entity(a: TypeMessageEntity, b: TypeMessageEntity, ignore_position: bool = False) -> bool: if type(a) != type(b): return False a_dict = a.to_dict() b_dict = b.to_dict() if ignore_position: for d in (a_dict, b_dict): for key in ('offset', 'length'): try: del d[key] except KeyError: pass return a_dict == b_dict
def copy(entity: TypeMessageEntity) -> Optional[TypeMessageEntity]: if not entity: return None kwargs = { "offset": entity.offset, "length": entity.length, } if isinstance(entity, Pre): kwargs["language"] = entity.language elif isinstance(entity, TextURL): kwargs["url"] = entity.url elif isinstance(entity, (MentionName, InputMentionName)): kwargs["user_id"] = entity.user_id return entity.__class__(**kwargs)
def copy_entity(entity: TypeMessageEntity) -> TypeMessageEntity: entity_dict = entity.to_dict() del entity_dict['_'] return type(entity)(**entity_dict)