class DiscordMessenger:
    def __init__(self, webhook_url):
        self.webhook = DiscordWebhook(url=webhook_url, username="******")
        self.website_url = 'https://futurarchives.com/password'

    def send_warning_message(self, message):
        embed = DiscordEmbed(title="Warning Message",
                             description=message,
                             color=242424)
        embed.set_timestamp()
        self.webhook.add_embed(embed)
        self.webhook.execute()
        self.remove_embeds_from_webhook()

    def send_store_open_message(self):
        embed = DiscordEmbed(title="Store Update",
                             description="Store is now open",
                             color=242424)
        embed.add_embed_field(name="Website Link", value=self.website_url)
        embed.set_timestamp()
        self.webhook.add_embed(embed)
        self.webhook.execute()
        self.remove_embeds_from_webhook()

    def send_store_closed_message(self):
        embed = DiscordEmbed(title="Store Update",
                             description="Store is closed",
                             color=242424)
        embed.add_embed_field(name="Website Link", value=self.website_url)
        embed.set_timestamp()
        self.webhook.add_embed(embed)
        self.webhook.execute()
        self.remove_embeds_from_webhook()

    def remove_embeds_from_webhook(self):
        for i, embed in enumerate(self.webhook.get_embeds()):
            self.webhook.remove_embed(i)
Esempio n. 2
0
class DiscordLogger:
    """
    Python message transporter for Discord
    """

    COLORS = {
        "default": 2040357,
        "error": 14362664,
        "warn": 16497928,
        "info": 2196944,
        "verbose": 6559689,
        "debug": 2196944,
        "success": 2210373,
    }
    EMOJIS = {
        "default": ":loudspeaker:",
        "error": ":x:",
        "warn": ":warning:",
        "info": ":bell:",
        "verbose": ":mega:",
        "debug": ":microscope:",
        "success": ":rocket:",
    }

    def __init__(self, webhook_url, **kwargs):
        if webhook_url is None:
            raise ValueError("The field webhook_url cannot be:", webhook_url)
        self.webhook_url = str(webhook_url)

        self.application_name = kwargs.get("application_name", "Application")
        if self.application_name is not None:
            self.application_name = str(self.application_name)

        self.service_name = kwargs.get("service_name", "Status Bot")
        if self.service_name is not None:
            self.service_name = str(self.service_name)

        self.service_icon_url = kwargs.get("service_icon_url")
        if self.service_icon_url is not None:
            self.service_icon_url = str(self.service_icon_url)

        self.service_environment = kwargs.get("service_environment")
        if self.service_environment is not None:
            self.service_environment = str(self.service_environment)

        self.host_name = gethostname()
        if kwargs.get("display_hostname") is False:
            self.host_name = None

        self.default_level = kwargs.get("default_level")
        if self.default_level not in self.COLORS.keys():
            self.default_level = "default"

        self.discord = DiscordWebhook(url=self.webhook_url,
                                      username=self.application_name)

    def __remove_embeds(self):
        existing_embeds = self.discord.get_embeds()
        for i in reversed(range(0, len(existing_embeds))):
            self.discord.remove_embed(i)

    def construct(
        self,
        title=None,
        description=None,
        level=None,
        error=None,
        metadata=None,
    ):
        self.__remove_embeds()

        _level = level
        if _level is None:
            _level = self.default_level
        if error is not None:
            _level = "error"

        _color = self.COLORS.get(_level)

        _title = ""
        if title is not None:
            _title = self.EMOJIS.get(_level) + " " + str(title)

        _description = ""
        if description is not None:
            _description = str(description)

        embed = DiscordEmbed(title=_title,
                             description=_description,
                             color=_color)
        embed.set_author(name=self.service_name,
                         icon_url=self.service_icon_url)

        if metadata is not None:
            _metadata = dump(metadata,
                             indent=4,
                             default_flow_style=False,
                             sort_keys=False)

            embed.add_embed_field(name="Metadata",
                                  value=Code(str(_metadata)),
                                  inline=False)

        if error is not None:
            embed.add_embed_field(name="Error",
                                  value=Code(str(error)),
                                  inline=False)

        if self.service_environment is not None:
            embed.add_embed_field(name="Environment",
                                  value=self.service_environment)
        if self.host_name is not None:
            embed.add_embed_field(name="Host", value=self.host_name)

        embed.set_timestamp()

        self.discord.add_embed(embed)

    def send(self):
        response = self.discord.execute()
        return response