diff --git a/reginaldCog/messenger_clients/messenger_client.py b/reginaldCog/messenger_clients/messenger_client.py index 685c898..4c49e85 100644 --- a/reginaldCog/messenger_clients/messenger_client.py +++ b/reginaldCog/messenger_clients/messenger_client.py @@ -1,6 +1,6 @@ from abc import ABC, abstractmethod from enum import Enum -from discord import Message +from discord import Message, Attachment class IClientMessage(ABC): @@ -18,68 +18,60 @@ class ClientMessage(IClientMessage): class IMessageBuilder(ABC): @abstractmethod - def __init__(self, raw_message: object): - self.raw_message = raw_message - self.message: IClientMessage = None - - def create_message(self) -> ClientMessage: - self.set_content() \ - .set_author_name() \ - .set_image_urls() - return self.message - - @abstractmethod - def set_content(self): + def __init__(self): pass @abstractmethod - def set_author_name(self): + def set_content(self, value: str): pass @abstractmethod - def set_image_urls(self): + def set_author_name(self, value: str): + pass + + @abstractmethod + def set_image_urls(self, value: list[str]): pass class DiscordMessageBuilder(IMessageBuilder): - def __init__(self, raw_message: Message): - self.raw_message = raw_message - self.message = ClientMessage() + def __init__(self, message: IClientMessage): + self.message = message - def create_message(self) -> ClientMessage: - return super().create_message() - - def set_author_name(self) -> 'DiscordMessageBuilder': - self.message.author_name = self.raw_message.author.name + def set_author_name(self, value: str): + self.message.author_name = value return self - def set_content(self) -> 'DiscordMessageBuilder': - self.message.content = self.raw_message.content + def set_content(self, value: str): + self.message.content = value return self - def set_image_urls(self) -> 'DiscordMessageBuilder': - self.message.image_urls = [ - i.url - for i in self.raw_message.attachments - if i.content_type in ('image/jpeg', 'image/png', 'image/webp', 'image/gif') - ] + def set_image_urls(self, value: list[str]): + self.message.image_urls = value return self -class MessengerTypes(Enum): - DISCORD = DiscordMessageBuilder +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__": - class TestAuthor: - name = 'John Doe' - - - class TestMessage: - content = 'Hello!' - author = TestAuthor() - attachments = [] - - - message = DiscordMessageBuilder(raw_message=TestMessage).create_message() - print(message.__dict__) + pass