def update_profile_avatar(self, profile: Profile, user_id): response = self.requests.get('getUserProfilePhotos', {'user_id': user_id}) photos = response.json()['result']['photos'] if len(photos) == 0: raise PWarning("Нет фотографий в профиле") pa = PhotoAttachment() pa.parse_tg_photo(photos[0][-1], self) profile.set_avatar(pa.private_download_url)
def upload_photo_and_urls(self, image: PhotoAttachment): """ Загрузка изображения на сервер VK Возвращает vk_url и public_download_url """ vk_photo = self.upload.photo_messages(image.get_bytes_io_content())[0] vk_url = f"{VK_URL}photo{vk_photo['owner_id']}_{vk_photo['id']}" vk_max_photo_url = sorted(vk_photo['sizes'], key=lambda x: x['height'])[-1]['url'] return vk_url, vk_max_photo_url
def upload_image_to_tg_server(self, url) -> PhotoAttachment: """ Загрузка изображения на сервера ТГ с костылями Без бутылки не разобраться. У телеги нет встроенных методов по тупой загрузке файлов, поэтому приходится Отправлять сообщение в пустую конфу, забирать оттуда file_id и уже потом формировать сообщение """ photo_uploading_chat = self.chat_model.get(pk=env.str("TG_PHOTO_UPLOADING_CHAT_PK")) pa = PhotoAttachment() pa.public_download_url = url rm = ResponseMessage({'attachments': [pa]}, peer_id=photo_uploading_chat.chat_id) response = self.send_response_message_item(rm.messages[0]) if response.status_code != 200: raise PWarning r_json = response.json() self.delete_message(photo_uploading_chat.chat_id, r_json['result']['message_id']) uploaded_image = r_json['result']['photo'] if response.status_code == 200 else response pa.file_id = uploaded_image[-1]['file_id'] return pa
def upload_photos(self, images, max_count=10, peer_id=None): """ Загрузка фотографий на сервер ТГ. images: список изображений в любом формате (ссылки, байты, файлы) При невозможности загрузки одной из картинки просто пропускает её """ if not isinstance(images, list): images = [images] attachments = [] for image in images: try: if peer_id: self.set_activity(peer_id, ActivitiesEnum.UPLOAD_PHOTO) pa = PhotoAttachment() pa.parse_response(image, ['jpg', 'jpeg', 'png']) attachments.append(pa) except Exception: continue if len(attachments) >= max_count: break return attachments
def setup_photo(self, photo_event): tg_photo = PhotoAttachment() tg_photo.parse_tg_photo(photo_event, self.bot) self.attachments.append(tg_photo)
def setup_photo(self, photo): vk_photo = PhotoAttachment() vk_photo.parse_vk_photo(photo) self.attachments.append(vk_photo)