Пример #1
0
    def dar_basado(self, basado):

        #Un basadobot.models.ParienteBasado, None o False.
        pariente = security2(basado)

        #En caso de que pariente no exista, es decir que ese comentario no ha recibido un "basado" antes
        #se crea dicho pariente.
        if pariente == None:
            #El username del autor del comentario/post al cual ha sido comentado,
            #es decir, la persona que está basada.
            reci = basado.parent().author

            #Un basadobot.models.User o None.
            recibidor = session.query(User).filter(
                User.username == str(reci)).first()

            #Si existe (!None), se puede sumar 1, en caso contrario no se puede hacer.
            if not recibidor:
                recibidor = User(username=str(reci),
                                 basados=0,
                                 frasesCunado=True)

            #Aqui crea el basadobot.models.ParienteBasado, ya que no estaba creado antes.
            pariente = ParienteBasado(parentId=basado.parent_id,
                                      submissionId=basado.link_id,
                                      isComment=basado.parent_id[1] == 1,
                                      autor=recibidor)

        #En caso de que sea Falso significa que el basado no es valido por algun motivo.
        elif pariente == False:
            return

        #Finalmente, en caso de que exista el usuario, lo unico que hace es buscar
        #la persona basada (basadobot.models.User), debido a que el pariente existia
        #tiene que existir el recibidor.
        else:
            recibidor = session.query(User).filter(
                User.id == pariente.autorId).first()

        #Un basadobot.models.User o None.
        commenter = session.query(User).filter(
            User.username == str(basado.author)).first()

        #En caso de que sea None, crea el que ha escrito "basado" (basadobot.models.User)
        if not commenter:
            commenter = User(username=str(basado.author), frasesCunado=True)

        #Si la funcion de seguridad no da ningun error, procede a añadir los datos en la database
        if security1(commenter, pariente):
            recibidor.basados += 1
            commenter.basadosHechos.append(pariente)
            session.add(commenter)
            session.add(pariente)
            session.add(recibidor)

            return recibidor
Пример #2
0
    def convertirEurosAPesetas(self):
        subreddit_inspection = self.reddit.subreddit("BasadoBot+Asi_va_Espana")
        commit = False
        for comment in subreddit_inspection.comments(limit=100):
            try:
                if session.query(OtherComment).filter(
                        OtherComment.commentId == comment.id).first():
                    break

                palabraEncontrada = ""
                for palabra in ["€", "euro"]:
                    if palabra in comment.body.lower() and str(
                            comment.author).lower() != "basadobot":
                        palabraEncontrada = palabra
                        break
                else:
                    continue

                if "peseta" not in comment.body.lower():
                    continue

                euros = float(
                    "".join(comment.body.lower().split(palabraEncontrada)
                            [0].strip().split(" ")[-1].split(".")).replace(
                                ",", ".").split("-")[-1])
                commit = True

                cents = ""
                pesetas = euros * 166.3860
                perraGorda = pesetas * 10
                euros = f"{int(euros):,}" if int(euros) == float(
                    euros) else f"{round(euros, 2):,.2f}"
                pesetas = f"{int(pesetas):,}" if int(pesetas) == float(
                    pesetas) else f"{round(pesetas, 2):,.2f}"
                euros = euros.replace(",", "@").replace(".",
                                                        ",").replace("@", ".")
                pesetas = pesetas.replace(",",
                                          "@").replace(".",
                                                       ",").replace("@", ".")
                perraGordaTrunc = int(perraGorda)
                residuo = round((perraGorda - perraGordaTrunc) * 10)
                perraGordaTrunc = f"{perraGordaTrunc:,}".replace(",", ".")
                if residuo >= 5:
                    cents += " con 1 perra chica"
                    residuo -= 5
                if residuo == 1:
                    cents += f" y {residuo} centimo"
                    residuo -= 1
                if residuo != 0:
                    cents += f" y {residuo} centimos"

                comment.reply(
                    f"¿{euros}€? En mi epoca eso eran {pesetas} pesetas. Es decir, {perraGordaTrunc} perras gordas{cents}."
                    + f"\n\n---\n\n^({mensajeduda})")
                session.add(OtherComment(commentId=comment.id))
            except ValueError:
                pass

        if commit:
            self.commit_changes("pesetas")
Пример #3
0
    def goodOrBadBot(self, comment):
        if not session.query(OtherComment).filter(
                OtherComment.commentId == comment.id).first():
            if "bad bot" in comment.body.lower(
            ) or "bot malo" in comment.body.lower():
                message = "¿Algún problema? ¡Puedes dar feedback en r/BasadoBot!"

            elif "good bot" in comment.body.lower(
            ) or "buen bot" in comment.body.lower():
                if str(comment.author).lower() == "bot_goodbot_bot":
                    message = respuestaBotCaliente()

                else:
                    message = respuestaFeliz()

            elif "u/basadobot" in comment.body.lower():
                return self.mencion(comment)

            else:
                return

            message += f"\n\n---\n\n^({mensajeduda})"
            session.add(OtherComment(commentId=comment.id))
            comment.reply(message)
            self.commit_changes("bot")
Пример #4
0
    def mencion(self, comment):
        if not session.query(OtherComment).filter(
                OtherComment.commentId == comment.id).first():
            if "?" in comment.body:
                message = preguntaCunada()

            else:
                message = messageCunado()

            message += f"\n\n---\n\n^({mensajeduda})"
            session.add(OtherComment(commentId=comment.id))
            comment.reply(message)
            self.commit_changes("mencion")
Пример #5
0
    def frase_de_cunado(self):
        subreddit_inspection = self.reddit.subreddit("Asi_va_Espana")

        for comment in subreddit_inspection.comments(limit=200):
            if str(
                    comment.author
            ) == "BasadoBot" and comment.score >= 13 and not session.query(
                    OtherComment).filter(
                        OtherComment.commentId == comment.id).first():
                session.add(OtherComment(commentId=comment.id))
                comment.reply(respuesta_basadobot_a_basadobot() +
                              f"\n\n---\n\n^({mensajeduda})")
                return True

            if "premios españísima" not in comment.submission.title.lower(
            ) and abs(comment.score) >= 13 and not session.query(
                    OtherComment).filter(
                        OtherComment.commentId == comment.id).first():
                usuario = session.query(User).filter(
                    User.username == str(comment.author)).first()
                if not usuario:
                    usuario = User(username=str(comment.author),
                                   basados=0,
                                   frasesCunado=True)
                    session.add(usuario)

                if not usuario.frasesCunado:
                    continue

                session.add(OtherComment(commentId=comment.id))
                comment.reply(
                    generador_frase(str(comment.author)) +
                    f"\n\n---\n\n^({mensajeduda})")
                return True

        return False
Пример #6
0
    def mirar_otros_comandos(self) -> list:
        comentarios = []

        #Subreddit del donde buscara los mensajes.
        subreddit_inspection = self.reddit.subreddit("Asi_va_Espana+BasadoBot")

        #Mira los ultimos 100 comentarios y en caso que inicie con "/" y no esté en la
        #database se añadirá a posibles respuestas.
        for comment in subreddit_inspection.comments(limit=100):
            if str(
                    comment.author
            ) != "BasadoBot" and "/" in comment.body and not session.query(
                    OtherComment).filter(
                        OtherComment.commentId == comment.id).first():
                session.add(OtherComment(commentId=comment.id))
                comentarios.append(comment)

        return comentarios
Пример #7
0
def security2(basado):
    try:
        parent = session.query(ParienteBasado).filter(
            ParienteBasado.parentId == basado.parent_id).first()
        try:
            reci = basado.parent().is_robot_indexable

        except AttributeError as e:
            reci = basado.parent().author != "None" and basado.parent(
            ).body != "[removed]"

        name = basado.parent().author

        if not reci or str(name) == str(basado.author):
            return False

        return parent

    except IntegrityError:
        session.rollback()
        return False
Пример #8
0
    def responder_otros_comandos(self, comandos) -> bool:
        toReturn = False
        for comando in comandos:
            ind = comando.body.index("/")
            if "info" == comando.body[1 + ind:5 + ind]:
                toReturn = True
                message = "\n\n".join([
                    "¡Hola! ¡Soy un bot llamado BasadoBot!",
                    "He sido creado por [u/TheRepSter](https://www.reddit.com/user/TheRepSter), por simple diversión.",
                    "Cuento \"basados\", es decir, cuando estás de acuerdo con una persona.",
                    "También llevo la cuenta de las píldoras que tiene cada usuario.",
                    "Los comandos son los siguientes:",
                    "- /info: muestra este mensaje.",
                    "- /usuariosmasbasados (o /usuariosmásbasados): muestra el top 10 de basados.",
                    "- /cantidaddebasado \{username\}: muestra los basados según el username",
                    "- /tirarpildora \{píldora\}: tira la píldora que mencione el usuario que pone el comando",
                    "- /frasecuñado \{valor\}: hace que BasadoBot comente o no en tus comentarios, según el valor (verdadero o falso)",
                    "A veces suelto alguna que otra frase un tanto de cuñado.",
                    "Si dices algo en euros, moneda inútil, lo diré en las clásicas pesetas.",
                    "Soy de código abierto, es decir, ¡puedes ver mi código e incluso aportar!",
                    "[Haz click aquí para ver el código.](https://github.com/TheRepSter/BasadoBot-Reddit)",
                    "---",
                    "^(¿Tienes alguna duda? ¡[Lee el post completo](https://www.reddit.com/r/Asi_va_Espana/comments/p4he0b/anuncio_basadobot_el_bot_de_los_basados/) o pregunta en [r/BasadoBot](https://www.reddit.com/r/BasadoBot/)!)"
                ])

            elif "usuariosmasbasados" == comando.body[1 + ind:19 + ind].lower(
            ) or "usuariosmásbasados" == comando.body[1 + ind:19 +
                                                      ind].lower():
                toReturn = True
                usuarios = session.query(User).order_by(
                    User.basados.desc()).limit(10).all()
                message = "El Top 10 de los usuarios más basados es actualmente:\n\n"
                message += "|Puesto|Username|Cantidad|\n--:|:--|:--|\n"
                for numb, i in enumerate(usuarios):
                    message += f"|{numb+1}|[u/{i.username}](https://reddit.com/user/{i.username})|{i.basados}\n"

                message += f"\n\n---\n\n^({mensajeduda})"

            elif "cantidaddebasado" == comando.body[1 + ind:17 + ind].lower():
                toReturn = True
                toBuscar = comando.body[ind:].split(" ")[1].strip("\n.,!?")
                if "u/" in toBuscar:
                    toBuscar = toBuscar.split("/")[1]

                usuario = session.query(User).filter(
                    User.username == toBuscar).first()
                if usuario:
                    message = f"El usuario {usuario.username} tiene {usuario.basados} basados."
                    message += f"\n\nTiene las siguientes píldoras: {', '.join(list(map(lambda x: x.name, usuario.pildoras)))}"

                else:
                    message = f"El usuario {toBuscar} no existe o no ha recibido ni hecho ningún basado."

                message += f"\n\n---\n\n^({mensajeduda})"

            elif "tirarpildora" == comando.body[1 + ind:13 + ind].lower():
                toReturn = True
                autor = session.query(User).filter(
                    User.username == str(comando.author)).first()
                try:
                    toBuscar = comando.body[ind:].split(" ")[1]

                except IndexError:
                    toBuscar = ""

                pills = session.query(Pildora).filter(
                    Pildora.name == toBuscar).all()
                if pills:
                    for pill in pills:
                        if pill.recibidor.id == autor.id:
                            autor.pildoras.remove(pill)
                            session.add(autor)
                            message = f"La píldora {toBuscar} ha sido eliminada."
                            break

                    else:
                        message = f"¡No tienes la píldora {toBuscar}!"

                else:
                    message = f"¡No tienes la píldora {toBuscar}!"

                message += f"\n\n---\n\n^({mensajeduda})"

            elif "frasecunado" == comando.body[1 + ind:12 + ind].lower(
            ) or "frasecuñado" == comando.body[1 + ind:12 + ind].lower():
                toReturn = True
                message = ""
                autor = session.query(User).filter(
                    User.username == str(comando.author)).first()
                if not autor:
                    autor = User(username=str(comando.author),
                                 basados=0,
                                 frasesCunado=True)

                try:
                    val = comando.body[ind:].split(" ")[1].lower().strip(
                        "\n.,!?")

                except IndexError:
                    val = ""

                if val in ["verdadero", "si", "true", "sí"]:
                    autor.frasesCunado = True
                    message = "A partir de ahora se enviaran frases cuñadas a tus comentarios."

                elif val in ["falso", "no", "false"]:
                    autor.frasesCunado = False
                    message = "A partir de ahora no se enviaran frases cuñadas a tus comentarios."

                else:
                    message = "Debes poner un valor correcto."
                    if autor.frasesCunado:
                        message += "\n\nActualmente se envían frases cuñadas a tus comentarios."

                    else:
                        message += "\n\nActualmente no se envían frases cuñadas a tus comentarios."

                message += f"\n\n---\n\n^({mensajeduda})"

            else:
                continue

            comando.reply(message)

        return toReturn
Пример #9
0
def security1(commenter, pariente):
    return not session.query(ParienteBasado, User).filter(
        BasadoHecho.user == commenter.id, BasadoHecho.pariente
        == pariente.id).first()