This commit is contained in:
2024-03-24 04:05:54 +03:00
parent 26f511535a
commit c5e0c91828
24 changed files with 132 additions and 322 deletions
+55 -43
View File
@@ -2,9 +2,9 @@ import json
from enum import Enum
from typing import Union, Type, Tuple
from kurocore.utils.vk.keyboard import VkKeyboard
from kurocore.utils.vk.vk import VKApiException
from kurocore.utils.vk_utils import generate_random_id
from kurocore.database import Database
from kurocore.vk import VkKeyboard, VKApiException, VK
from kurocore.vk.utils import generate_random_id
class MessageArgs(dict):
@@ -137,41 +137,6 @@ class Document(VkObject):
Attachment = Type[Photo], Type[Document], Type[Sticker]
def load_attachments(raw: list[dict]) -> list[Attachment]:
attachments = []
for attachment in raw:
match attachment['type']:
case 'photo':
attachments.append(Photo(attachment))
case 'doc':
attachments.append(Document(attachment))
case 'sticker':
attachments.append(Sticker(attachment))
case _:
attachments.append(VkObject(attachment))
return attachments
def dump_attachments(raw_attachments: list[Attachment]) -> str:
return ','.join(map(repr, raw_attachments))
class EventActions:
SHOW_SNACKBAR = 'show_snackbar'
OPEN_LINK = 'open_link'
OPEN_APP = 'open_app'
class MessageID:
def __init__(self, body):
if type(body) is dict:
self.message_id = body.get('message_id', 0)
self.cmid = body.get('cmid', 0)
else:
self.message_id = body
self.cmid = body
class Message(VkObject):
__slots__ = (
'vk', 'api', 'raw', 'id', 'conversation_message_id', 'cmid',
@@ -181,10 +146,9 @@ class Message(VkObject):
'meta'
)
def __init__(self, vk, api, raw):
def __init__(self, api, raw):
super().__init__(raw)
self.vk = vk
self.api = api
if type(raw) is Message:
@@ -218,8 +182,7 @@ class Message(VkObject):
self.event_id: str = self.raw.get('event_id', '')
self.forwarded_messages: list = self.raw.get('fwd_messages', [])
self.reply_message = Message(self.vk, self.api, self.raw['reply_message']) \
if 'reply_message' in self.raw else None
self.reply_message = Message(self.api, self.raw['reply_message']) if 'reply_message' in self.raw else None
self.meta: dict = {}
@@ -325,7 +288,56 @@ class Message(VkObject):
'conversation_message_ids': [cmid]
}
res = await self.api.messages.getByConversationMessageId(**data)
return Message(self.vk, self.api, res['items'][0])
return Message(self.api, res['items'][0])
def __repr__(self):
return str(self.raw)
class MessageContext:
__slots__ = ('api', 'msg', 'db', 'args', 'meta')
def __init__(self, api, msg, db):
self.api: VK = api
self.msg: Message = msg
self.db: Database = db
self.args = None
self.meta = {}
def __repr__(self):
return f'<MessageContext{self.msg}({self.args})>'
def load_attachments(raw: list[dict]) -> list[Attachment]:
attachments = []
for attachment in raw:
match attachment['type']:
case 'photo':
attachments.append(Photo(attachment))
case 'doc':
attachments.append(Document(attachment))
case 'sticker':
attachments.append(Sticker(attachment))
case _:
attachments.append(VkObject(attachment))
return attachments
def dump_attachments(raw_attachments: list[Attachment]) -> str:
return ','.join(map(repr, raw_attachments))
class EventActions:
SHOW_SNACKBAR = 'show_snackbar'
OPEN_LINK = 'open_link'
OPEN_APP = 'open_app'
class MessageID:
def __init__(self, body):
if type(body) is dict:
self.message_id = body.get('message_id', 0)
self.cmid = body.get('cmid', 0)
else:
self.message_id = body
self.cmid = body