KuroCore/kurocore/vk/upload.py

65 lines
1.9 KiB
Python
Raw Normal View History

2024-01-02 00:25:23 +03:00
import json
from aiohttp import FormData
2024-03-24 04:05:54 +03:00
from kurocore.logger import LoggingClientSession
from kurocore.main.message import load_attachments
from kurocore.vk.vk import VK, VkApiMethod
2024-01-02 00:25:23 +03:00
class JsonParser:
@staticmethod
def dumps(data):
return json.dumps(data, ensure_ascii=False, separators=(",", ":"))
@staticmethod
def loads(string):
return json.loads(string)
class VkUpload(object):
__slots__ = ('vk',)
def __init__(self, vk):
if not isinstance(vk, (VK, VkApiMethod)):
raise TypeError('The arg should be VK or VkApiMethod instance')
if isinstance(vk, VkApiMethod):
self.vk = vk
else:
self.vk = vk.get_api()
async def photo_messages(self, photo, pid=0):
upload_info = await self.vk.photos.getMessagesUploadServer(peer_id=pid)
data = FormData()
data.add_field(
'photo', photo,
content_type='multipart/form-data',
filename='a.png',
)
async with LoggingClientSession() as session, session.post(upload_info['upload_url'], data=data) as response:
response = await response.text()
response = json.loads(response)
photos = await self.vk.photos.saveMessagesPhoto(**response)
photos = [{'type': 'photo', 'photo': photo} for photo in photos]
return load_attachments(photos)
async def doc_message(self, doc, pid):
upload_info = await self.vk.docs.getMessagesUploadServer(peer_id=pid)
data = FormData()
data.add_field(
'file', doc,
content_type='multipart/form-data',
filename=f'a.png',
)
async with LoggingClientSession() as session, session.post(upload_info['upload_url'], data=data) as response:
response = await response.text()
response = json.loads(response)
return load_attachments([await self.vk.docs.save(**response)])