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)))
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))
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))
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)))
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))
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)))
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))
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)))
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))
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()