78 lines
2.0 KiB
Python
Raw Normal View History

2025-08-17 15:20:32 +05:00
from abc import ABC, abstractmethod
from enum import Enum
from discord import Message, Attachment
2025-08-17 15:20:32 +05:00
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
2025-08-17 15:20:32 +05:00
@abstractmethod
def set_content(self, value: str):
2025-08-17 15:20:32 +05:00
pass
@abstractmethod
def set_author_name(self, value: str):
2025-08-17 15:20:32 +05:00
pass
@abstractmethod
def set_image_urls(self, value: list[str]):
2025-08-17 15:20:32 +05:00
pass
class DiscordMessageBuilder(IMessageBuilder):
def __init__(self, message: IClientMessage):
self.message = message
2025-08-17 15:20:32 +05:00
def set_author_name(self, value: str):
self.message.author_name = value
2025-08-17 15:20:32 +05:00
return self
def set_content(self, value: str):
self.message.content = value
2025-08-17 15:20:32 +05:00
return self
def set_image_urls(self, value: list[str]):
self.message.image_urls = value
2025-08-17 15:20:32 +05:00
return self
class IMessageAdapter(ABC):
@abstractmethod
def create_message(self, message: object) -> IClientMessage:
pass
2025-08-17 15:20:32 +05:00
@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]
2025-08-17 15:20:32 +05:00
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
2025-08-17 15:20:32 +05:00
if __name__ == "__main__":
pass