Exemple #1
0
    def _add_reaction(cls, message: Message, user_executor: UserParamExecutor,
                      emoji_executor: EmojiParamExecutor):

        # Check max emoji limit
        reaction_count = DbAutoReaction.count_total_target_reactions(
            message.guild.id,
            user_executor.get_user().id, message.author.id)
        if reaction_count >= cls._MAX_REACTION_PER_TARGET:
            cls._reply(
                message,
                "Le tuin **{}** a déjà {} réactions sur lui, laissons-le respirer un peu."
                .format(
                    Sanitizer.user_name(user_executor.get_user().display_name),
                    reaction_count))
            return

        # Can add only one type of emoji per target, cause bot can't add the same several times.
        if DbAutoReaction.reaction_exists(message.guild.id, message.channel.id,
                                          user_executor.get_user().id,
                                          emoji_executor.get_emoji()):
            cls._reply(
                message,
                "Cet emoji est déjà mis sur **%s** dans ce salon, il faudrait en choisir un autre."
                % (Sanitizer.user_name(user_executor.get_user().display_name)))
            return

        if cls._execute_db_bool_request(
                lambda: DbAutoReaction.add_auto_reaction(
                    message.guild.id, message.channel.id, message.author.id,
                    user_executor.get_user().id, emoji_executor.get_emoji(),
                    cls._SHOTS), message):
            cls._reply(
                message, "Réaction %s ajoutée à **%s** !" %
                (emoji_executor.get_emoji(),
                 Sanitizer.user_name(user_executor.get_user().display_name)))
Exemple #2
0
    def _list_reactions(cls, message: Message,
                        user_executor: UserParamExecutor):
        total_reactions = DbAutoReaction.get_auto_reactions(
            message.guild.id,
            user_executor.get_user().id)

        channel_reaction_part = ""
        if total_reactions:
            channel_reaction_count = DbAutoReaction.count_channel_target_reactions(
                message.guild.id, message.channel.id,
                user_executor.get_user().id)
            channel_reaction_part = f" ({channel_reaction_count} dans ce salon)"

        reactions_string = []
        for reaction in total_reactions:
            user: User = message.guild.get_member(reaction.author_id)
            user_name = Sanitizer.user_name_special_quotes(user.display_name)
            user_part = f"`{user_name}`" if user else ""
            reactions_string.append(f"{reaction.emoji} {user_part}")

        reactions_part = " : %s" % " ".join(
            reactions_string) if total_reactions else ""

        cls._reply(
            message, "**%s** a %s réaction(s)%s%s" %
            (Sanitizer.user_name(user_executor.get_user().display_name),
             len(total_reactions), channel_reaction_part, reactions_part))
Exemple #3
0
    def _add_reply(cls, message: Message, user_executor: UserParamExecutor,
                   text_executor: TextParamExecutor):
        reply_count = DbAutoReply.count_auto_replys(
            message.guild.id,
            user_executor.get_user().id, message.author.id)

        if reply_count >= cls._MAX_PER_USER:
            cls._reply(
                message,
                "Oups, il y a déjà {} message(s) enregistré(s) pour **{}**, il va falloir attendre ton tour !"
                .format(
                    reply_count,
                    Sanitizer.user_name(
                        user_executor.get_user().display_name)))
            return

        content = ParsingUtils.format_links(
            ParsingUtils.to_single_line(text_executor.get_text()))

        if cls._execute_db_bool_request(
                lambda: DbAutoReply.add_auto_reply(
                    message.guild.id, message.channel.id, message.author.id,
                    user_executor.get_user().id, content), message):
            cls._reply(
                message, "Message enregistré pour **%s** !" %
                Sanitizer.user_name(user_executor.get_user().display_name))
Exemple #4
0
 def _add_spoiler(cls, message: Message, user_executor: UserParamExecutor):
     if DbAutoSpoiler.add_auto_spoiler(message.guild.id,
                                       message.channel.id,
                                       message.author.id,
                                       user_executor.get_user().id
                                       ):
         cls._reply(message,
                    "Spoiler ajouté au prochain message de **{}** !".format(
                        Sanitizer.user_name(user_executor.get_user().display_name)))
     else:
         cls._reply(message,
                    "Un spoiler est déjà mis sur **{}**.".format(
                        Sanitizer.user_name(user_executor.get_user().display_name)))
Exemple #5
0
    def _show_reply(cls, message: Message, user_executor: UserParamExecutor):
        sentence = DbAutoReply.get_auto_reply_content(
            message.guild.id, message.author.id,
            user_executor.get_user().id)

        if not sentence:
            cls._reply(
                message, "Aucun message enregistré pour **{}** !".format(
                    Sanitizer.user_name(
                        user_executor.get_user().display_name)))
        else:
            cls._reply(
                message, "Message enregistré pour **{}** : {}".format(
                    Sanitizer.user_name(user_executor.get_user().display_name),
                    sentence))
Exemple #6
0
    def _display_spoiler_info(cls, message: Message, user_executor: UserParamExecutor,
                              info_executor: FixedValueParamExecutor):
        author_id = DbAutoSpoiler.get_auto_spoiler_author(message.guild.id, user_executor.get_user().id)

        if author_id is None:
            cls._reply(message,
                       "Aucun spoiler sur **{}** !".format(Sanitizer.user_name(user_executor.get_user().display_name)))
        else:
            user: User = message.guild.get_member(author_id)

            if not user:
                cls._reply(message, "Oups ! Il semble qu'il y ait eu un soucis pour retrouver le tuin !")
            else:
                cls._reply(message,
                           "**{}** a mis un spoiler sur **{}** !".format(Sanitizer.user_name(user.display_name),
                                                                         Sanitizer.user_name(
                                                                             user_executor.get_user().display_name)))
Exemple #7
0
 def _remove_reply(cls, message: Message, user_executor: UserParamExecutor,
                   stop_executor: FixedValueParamExecutor):
     if cls._execute_db_bool_request(
             lambda: DbAutoReply.remove_auto_reply(
                 message.guild.id, message.author.id,
                 user_executor.get_user().id), message):
         cls._reply(
             message, "Message pour **%s** effacé !" %
             Sanitizer.user_name(user_executor.get_user().display_name))
Exemple #8
0
 def _remove_spoiler(cls, message: Message, user_executor: UserParamExecutor,
                     stop_executor: FixedValueParamExecutor):
     if cls._execute_db_bool_request(lambda:
                                     DbAutoSpoiler.remove_auto_spoiler(message.guild.id,
                                                                       message.author.id,
                                                                       user_executor.get_user().id
                                                                       ),
                                     message):
         cls._reply(message,
                    "Spoiler retiré de **{}** !".format(Sanitizer.user_name(user_executor.get_user().display_name)))
Exemple #9
0
 def _remove_reaction(cls, message: Message,
                      user_executor: UserParamExecutor,
                      stop_executor: FixedValueParamExecutor):
     if cls._execute_db_bool_request(
             lambda: DbAutoReaction.remove_auto_reaction(
                 message.guild.id, message.author.id,
                 user_executor.get_user().id), message):
         cls._reply(
             message, "Réaction retirée de **%s** !" %
             Sanitizer.user_name(user_executor.get_user().display_name))
Exemple #10
0
    async def _execute_hook_async(message: Message, author_id: int):
        user_message = ParsingUtils.format_links(message.content.replace("|", r"\|"))
        description = ("Le tuin **{username}** a une déclaration à faire ! :partying_face:\n\n"
                       ":point_right: \u00A0\u00A0\u00A0\u00A0"
                       "||\u00A0\u00A0{user_message}||"
                       ).format(username=Sanitizer.user_name(message.author.display_name),
                                user_message=user_message
                                )

        embed = AppMessages.get_hook_embed(
            title=":popcorn:\u00A0\u00A0\u00A0\u00A0Avis à la population !\u00A0\u00A0\u00A0\u00A0:popcorn:",
            description=description
        )

        author = message.guild.get_member(author_id)
        if author:
            embed.set_footer(text="Spoiler trollé par le tuin {}".format(author.display_name))

        # If an image is uploaded with message, adds it to embed.
        if message.attachments and message.attachments[0].width:
            embed.set_image(url=message.attachments[0].proxy_url)

        await message.channel.send(embed=embed)
        await message.delete()