78 lines
2.0 KiB
Python
78 lines
2.0 KiB
Python
from abc import ABC, abstractmethod
|
|
from enum import Enum
|
|
from discord import Message, Attachment
|
|
|
|
|
|
class IClientMessage(ABC):
|
|
@abstractmethod
|
|
def __init__(self):
|
|
pass
|
|
|
|
|
|
class ClientMessage(IClientMessage):
|
|
def __init__(self):
|
|
self.author_name: str = ''
|
|
self.content: str = ''
|
|
self.image_urls: list = []
|
|
|
|
|
|
class IMessageBuilder(ABC):
|
|
@abstractmethod
|
|
def __init__(self):
|
|
pass
|
|
|
|
@abstractmethod
|
|
def set_content(self, value: str):
|
|
pass
|
|
|
|
@abstractmethod
|
|
def set_author_name(self, value: str):
|
|
pass
|
|
|
|
@abstractmethod
|
|
def set_image_urls(self, value: list[str]):
|
|
pass
|
|
|
|
|
|
class DiscordMessageBuilder(IMessageBuilder):
|
|
def __init__(self, message: IClientMessage):
|
|
self.message = message
|
|
|
|
def set_author_name(self, value: str):
|
|
self.message.author_name = value
|
|
return self
|
|
|
|
def set_content(self, value: str):
|
|
self.message.content = value
|
|
return self
|
|
|
|
def set_image_urls(self, value: list[str]):
|
|
self.message.image_urls = value
|
|
return self
|
|
|
|
|
|
class IMessageAdapter(ABC):
|
|
@abstractmethod
|
|
def create_message(self, message: object) -> IClientMessage:
|
|
pass
|
|
|
|
@staticmethod
|
|
def validate_image_urls(urls_list: list[Attachment]) -> list[str]:
|
|
supported_image_formats = ('image/jpeg', 'image/png', 'image/webp', 'image/gif')
|
|
return [i_attachment.url for i_attachment in urls_list if i_attachment.content_type in supported_image_formats]
|
|
|
|
|
|
class DiscordMessageAdapter(IMessageAdapter):
|
|
def create_message(self, message: Message) -> IClientMessage:
|
|
client_message = ClientMessage()
|
|
message_builder = DiscordMessageBuilder(client_message)
|
|
urls_list = self.validate_image_urls(message.attachments)
|
|
message_builder.set_content(message.content)\
|
|
.set_author_name(message.author.name)\
|
|
.set_image_urls(urls_list)
|
|
return client_message
|
|
|
|
|
|
if __name__ == "__main__":
|
|
pass
|