Example #1
0
def replace(user_id, name=None, admin=False, frce=False):
    if frce:
        user = get_real_user(user_id)
    else:
        user = get_user(user_id)

    if user is None or user.house is model.Houses.NONE.value and (
            user.level is None
            or user.profession is model.Professions.NONE.value):
        text_house = "🖤"
    elif user.house is model.Houses.NONE.value:
        text_house = "🙈"
    elif user.house is model.Houses.GRYFFINDOR.value:
        text_house = "🦁"
    elif user.house is model.Houses.HUFFLEPUFF.value:
        text_house = "🦡"
    elif user.house is model.Houses.RAVENCLAW.value:
        text_house = "🦅"
    elif user.house is model.Houses.SLYTHERIN.value:
        text_house = "🐍"
    elif user.house is model.Houses.BOTS.value:
        text_house = "💻"

    if user is None or user.profession is model.Professions.NONE.value:
        text_prof = "_Desconocida_"
    elif user.profession is model.Professions.AUROR.value:
        text_prof = "⚔"
    elif user.profession is model.Professions.MAGIZOOLOGIST.value:
        text_prof = "🐾"
    elif user.profession is model.Professions.PROFESSOR.value:
        text_prof = "📚"
    elif user.profession is model.Professions.BOT.value:
        text_prof = "🤖"

    if user and user.alias is not None:
        text_alias = escape_markdown("@{}".format(user.alias))
    elif name is not None:
        text_alias = f"[{escape_markdown(name)}](tg://user?id={user_id})"
    else:
        text_alias = "_Desconocido_"

    text_level = ("*{}*".format(user.level) if user and user.level else "*??*")

    text_validationstatus = "✅"
    if user and user.banned:
        text_validationstatus = "⛔️"

    if user and user.flag is not None:
        text_flag = f"{user.flag} "
    else:
        text_flag = ""

    replace_pogo = "{0} - *L*{1}  {2}  {3}  {4}  {5}".format(
        text_alias, text_level, text_prof, text_house, text_validationstatus,
        text_flag)

    if admin:
        replace_pogo = replace_pogo + " `{0}`".format(user_id)

    return replace_pogo
Example #2
0
def add_ghost_cmd(bot, update, args=None):
    (chat_id, chat_type, user_id, text, message) = support.extract_update_info(update)
    support.delete_message(chat_id, message.message_id, bot)

    if not is_staff(user_id):
        return

    if len(args) == 0:
        return

    user = get_user(user_id)

    if user is not None:
        set_ghost(args[0], True)
        add_flag(args[0], "👻")

    else:
        bot.sendMessage(
        chat_id=chat_id,
        text="❌ Ese usuario no existe.",
        parse_mode=telegram.ParseMode.MARKDOWN)
        return

    bot.sendMessage(
        chat_id=chat_id,
        text="👌 El usuario ahora es un fantasma 👻",
        parse_mode=telegram.ParseMode.MARKDOWN)
Example #3
0
def btn_parser(bot, update):
    query = update.callback_query
    data = query.data
    user = update.effective_user
    username = query.from_user.username
    user_id = query.from_user.id
    texto = query.message.text
    chat_id = query.message.chat.id
    message_id = query.message.message_id
    message = query.message

    if are_banned(user_id, chat_id):
        return

    user = get_user(user_id)
    if user is None:
        return

    game = data[2:].split("_")[0]
    game_data = data[2:].split("_")[1:]
    game_data = "_".join(game_data)
    if game == "gra":
        grageas.grag_btn(bot, update, game_data)
    if game == "whosaid":
        whosaid.whosaid_btn(bot, update, game_data)
    if game == "rps":
        rps.rps_btn(bot, update, game_data)
Example #4
0
def list_btn(bot, update):
    query = update.callback_query
    data = query.data
    user = update.effective_user
    username = query.from_user.username
    user_id = query.from_user.id
    text = query.message.text
    chat_id = query.message.chat.id
    message_id = query.message.message_id

    if are_banned(user_id, chat_id):
        return

    user = get_user(user_id)

    if user is None:
        return

    if user.profession is Professions.PROFESSOR.value:
        text_prof = "📚"
    elif user.profession is Professions.MAGIZOOLOGIST.value:
        text_prof = "🐾"
    elif user.profession is Professions.AUROR.value:
        text_prof = "⚔️"
    elif user.profession is Professions.NONE.value:
        text_prof = "🍮"

    if user.house is Houses.GRYFFINDOR.value:
        text_team = "🦁"
    elif user.house is Houses.HUFFLEPUFF.value:
        text_team = "🦡"
    elif user.house is Houses.RAVENCLAW.value:
        text_team = "🦅"
    elif user.house is Houses.SLYTHERIN.value:
        text_team = "🐍"
    elif user.house is Houses.NONE.value:
        text_team = "🙈"

    string = r'\n(.|🦁|🦡|🦅|🐍|🙈) - (\d\d|\d) - (.|📚|🐾|⚔️|🍮) - @{}'.format(
        username)
    text = re.sub(string, "", text)

    if data == "list_join":
        text = text + "\n{0} - {1} - {2} - @{3}".format(
            text_team, user.level, text_prof, username)

    button_list = [[
        InlineKeyboardButton(text="🙋‍♀️ Me apunto!",
                             callback_data='list_join'),
        InlineKeyboardButton(text="🙅‍♀️ Paso...", callback_data='list_left')
    ]]
    bot.edit_message_text(text=text,
                          chat_id=chat_id,
                          message_id=message_id,
                          reply_markup=InlineKeyboardMarkup(button_list),
                          disable_web_page_preview=True)
def whosaid_btn(bot, update, game_data):
    query = update.callback_query
    data = query.data
    user = update.effective_user
    username = query.from_user.username
    user_id = query.from_user.id
    texto = query.message.text
    chat_id = query.message.chat.id
    message_id = query.message.message_id
    message = query.message

    user = get_user(user_id)
    if user is None:
        return

    if username is None:
        bot.answer_callback_query(query.id,
                                  "Necesitas una @ para poder usar el bot.",
                                  show_alert=True)
        return

    if texto.find(username) != -1:
        return

    ent = message.parse_entities(["mention"])
    if len(ent) > 0:
        bot.answer_callback_query(query.id,
                                  "Alguien ha respondido ya.",
                                  show_alert=True)
        return

    listaPalabras = game_data.split("_")

    if listaPalabras[0] == "success":
        update_user_points(user_id, 3)
        update_group_points(chat_id, 3)
        bot.edit_message_text(text=texto + "\n\n@" + username +
                              " ha acertado!",
                              chat_id=chat_id,
                              message_id=message_id)
        return

    update_user_points(user_id, -1)
    bot.answer_callback_query(query.id, "Has fallado.", show_alert=True)
Example #6
0
def rm_staff_cmd(bot, update, args=None):
    (chat_id, chat_type, user_id, text,
     message) = support.extract_update_info(update)
    support.delete_message(chat_id, message.message_id, bot)

    if not is_staff(user_id):
        return

    if len(args) == 0:
        return

    if get_user(user_id) is not None:
        set_staff(args[0], False)
    else:
        bot.sendMessage(chat_id=chat_id,
                        text="❌ Ese usuario no existe.",
                        parse_mode=telegram.ParseMode.MARKDOWN)
        return

    bot.sendMessage(chat_id=chat_id,
                    text="👌 El usuario ya no forma parte del Staff",
                    parse_mode=telegram.ParseMode.MARKDOWN)
Example #7
0
def games_cmd(bot, update):
    (chat_id, chat_type, user_id, text, message) = support.extract_update_info(update)

    if are_banned(user_id, chat_id):
        return

    group_message_counter(chat_id)

    cfg = config.get_config()
    if chat_id != int(cfg["telegram"]["spain_id"]):
        return
    user = get_user(user_id)
    if user is None:
        return

    if last_run(chat_id, 'games'):
        return

    if (group_message_counter(chat_id, read_only=True) is randrange(40, 70)) or (group_message_counter(chat_id, read_only=True) >= 70):
        group_message_counter(chat_id, reset=True)
        game_list = [grag_cmd, whosaid_cmd]
        choice(game_list)(bot, update)
Example #8
0
def duel_cmd(bot, update):
    chat_id, chat_type, user_id, text, message = support.extract_update_info(update)
    support.delete_message(chat_id, message.message_id, bot)
    user_username = message.from_user.username

    if are_banned(user_id, chat_id):
        return
    user = get_user(user_id)
    if user is None:
        bot.sendMessage(
            chat_id=chat_id,
            text="❌ Debes registrarte para usar este comando.",
            parse_mode=telegram.ParseMode.MARKDOWN
        )
        return
    try:
        if user_username is None:
            bot.sendMessage(
                chat_id=chat_id,
                text="❌ Es necesario que configures un alias en Telegram antes de continuar usando el bot.",
                parse_mode=telegram.ParseMode.MARKDOWN
            )
            return
    except:
        bot.sendMessage(
            chat_id=chat_id,
            text="❌ Es necesario que configures un alias en Telegram antes de continuar usando el bot.",
            parse_mode=telegram.ParseMode.MARKDOWN
        )
        return

    text = f"@{message.from_user.username} Vs ???\n\n¿Quién aceptará el duelo?"
    markup = [[InlineKeyboardButton(text="Aceptar el duelo", callback_data=f"g*duel_accept_{user_id}")]]

    bot.sendMessage(
	    chat_id=chat_id, 
	    text=text, 
	    disable_notification=True, 
	    reply_markup=InlineKeyboardMarkup(markup))
Example #9
0
def joined_chat(bot, update, job_queue):
    chat_id, chat_type, user_id, text, message = support.extract_update_info(
        update)
    new_chat_member = message.new_chat_members[
        0] if message.new_chat_members else None

    config = get_config()
    bot_alias = config['telegram']['bot_alias']

    if new_chat_member.username == bot_alias:
        if are_banned(user_id, chat_id):
            bot.leaveChat(chat_id=chat_id)
            return

        chat_title = message.chat.title
        chat_id = message.chat.id
        group = group_sql.get_real_group(chat_id)
        if group is None:
            group_sql.set_group(chat_id, message.chat.title)

        message_text = ("Si necesitais ayuda podéis lanzar chispas rojas c"
                        "on vuestra varita o utilizando el comando `/help`"
                        " para conocer todas las funciones. Aseguraos de v"
                        "er la ayuda para prefectos de los grupos, donde s"
                        "e explica en detalle todos los pasos que se deben"
                        " seguir.".format(escape_markdown(chat_title)))

        admin = get_admin(chat_id)
        if admin is not None and admin.admin_bot is True:
            set_admin_settings(chat_id, "admin_bot")
            message_text = message_text + "\n\n*Fawkes emprendió el vuelo.*"

        bot.sendMessage(chat_id=chat_id,
                        text=message_text,
                        parse_mode=telegram.ParseMode.MARKDOWN)

    elif new_chat_member.username != bot_alias:
        chat_id = message.chat.id
        user_id = update.effective_message.new_chat_members[0].id

        group = get_join_settings(chat_id)
        if group is not None:
            if group.delete_header:
                support.delete_message(chat_id, message.message_id, bot)

            if are_banned(user_id, user_id):
                bot.kickChatMember(chat_id, user_id)
                return

            user = get_user(user_id)
            if user is None and group.requirment is not ValidationRequiered.NO_VALIDATION.value:
                bot.kickChatMember(chat_id=chat_id,
                                   user_id=user_id,
                                   until_date=time.time() + 31)
                if group.val_alert is False:
                    output = "👌 Mago sin registrarse expulsado!"
                    bot.sendMessage(chat_id=chat_id,
                                    text=output,
                                    parse_mode=telegram.ParseMode.MARKDOWN)
                good_luck(bot, chat_id, message,
                          "El usuario no está registrado")
                return

            elif group.requirment is ValidationRequiered.VALIDATION.value and user.level is None:
                bot.kickChatMember(chat_id=chat_id,
                                   user_id=user_id,
                                   until_date=time.time() + 31)
                if group.val_alert is False:
                    output = "👌 Mago infiltrado expulsado!"
                    bot.sendMessage(chat_id=chat_id,
                                    text=output,
                                    parse_mode=telegram.ParseMode.MARKDOWN)
                good_luck(bot, chat_id, message,
                          "El usuario no está registrado")
                try:
                    bot.sendMessage(
                        chat_id=user_id,
                        text="❌ Debes validarte para entrar en este grupo",
                        parse_mode=telegram.ParseMode.MARKDOWN)
                except Exception:
                    pass
                return

            elif group.requirment is ValidationRequiered.PROFESSOR.value and user.profession is not Professions.PROFESSOR.value:
                bot.kickChatMember(chat_id=chat_id,
                                   user_id=user_id,
                                   until_date=time.time() + 31)
                if group.val_alert is False:
                    output = "👌 Mago infiltrado expulsado!"
                    bot.sendMessage(chat_id=chat_id,
                                    text=output,
                                    parse_mode=telegram.ParseMode.MARKDOWN)
                good_luck(bot, chat_id, message,
                          "El usuario no está registrado")
                try:
                    bot.sendMessage(
                        chat_id=user_id,
                        text="❌ Debes validarte para entrar en este grupo",
                        parse_mode=telegram.ParseMode.MARKDOWN)
                except Exception:
                    pass
                return

            elif group.requirment is ValidationRequiered.MAGIZOOLOGIST.value and user.profession is not Professions.MAGIZOOLOGIST.value:
                bot.kickChatMember(chat_id=chat_id,
                                   user_id=user_id,
                                   until_date=time.time() + 31)
                if group.val_alert is False:
                    output = "👌 Mago infiltrado expulsado!"
                    bot.sendMessage(chat_id=chat_id,
                                    text=output,
                                    parse_mode=telegram.ParseMode.MARKDOWN)
                good_luck(bot, chat_id, message,
                          "El usuario no está registrado")
                try:
                    bot.sendMessage(
                        chat_id=user_id,
                        text="❌ Debes validarte para entrar en este grupo",
                        parse_mode=telegram.ParseMode.MARKDOWN)
                except Exception:
                    pass
                return

            elif group.requirment is ValidationRequiered.AUROR.value and user.profession is not Professions.AUROR.value:
                bot.kickChatMember(chat_id=chat_id,
                                   user_id=user_id,
                                   until_date=time.time() + 31)
                if group.val_alert is False:
                    output = "👌 Mago infiltrado expulsado!"
                    bot.sendMessage(chat_id=chat_id,
                                    text=output,
                                    parse_mode=telegram.ParseMode.MARKDOWN)
                good_luck(bot, chat_id, message,
                          "El usuario no está registrado")
                try:
                    bot.sendMessage(
                        chat_id=user_id,
                        text="❌ Debes validarte para entrar en este grupo",
                        parse_mode=telegram.ParseMode.MARKDOWN)
                except Exception:
                    pass
                return

            elif group.requirment is ValidationRequiered.GRYFFINDOR.value and user.house is not Houses.GRYFFINDOR.value:
                bot.kickChatMember(chat_id=chat_id,
                                   user_id=user_id,
                                   until_date=time.time() + 31)
                if group.val_alert is False:
                    output = "👌 Mago infiltrado expulsado!"
                    bot.sendMessage(chat_id=chat_id,
                                    text=output,
                                    parse_mode=telegram.ParseMode.MARKDOWN)
                good_luck(bot, chat_id, message,
                          "El usuario no está registrado")
                try:
                    bot.sendMessage(
                        chat_id=user_id,
                        text="❌ Debes validarte para entrar en este grupo",
                        parse_mode=telegram.ParseMode.MARKDOWN)
                except Exception:
                    pass
                return

            elif group.requirment is ValidationRequiered.HUFFLEPUFF.value and user.house is not Houses.HUFFLEPUFF.value:
                bot.kickChatMember(chat_id=chat_id,
                                   user_id=user_id,
                                   until_date=time.time() + 31)
                if group.val_alert is False:
                    output = "👌 Mago infiltrado expulsado!"
                    bot.sendMessage(chat_id=chat_id,
                                    text=output,
                                    parse_mode=telegram.ParseMode.MARKDOWN)
                good_luck(bot, chat_id, message,
                          "El usuario no está registrado")
                try:
                    bot.sendMessage(
                        chat_id=user_id,
                        text="❌ Debes validarte para entrar en este grupo",
                        parse_mode=telegram.ParseMode.MARKDOWN)
                except Exception:
                    pass
                return

            elif group.requirment is ValidationRequiered.RAVENCLAW.value and user.house is not Houses.RAVENCLAW.value:
                bot.kickChatMember(chat_id=chat_id,
                                   user_id=user_id,
                                   until_date=time.time() + 31)
                if group.val_alert is False:
                    output = "👌 Mago infiltrado expulsado!"
                    bot.sendMessage(chat_id=chat_id,
                                    text=output,
                                    parse_mode=telegram.ParseMode.MARKDOWN)
                good_luck(bot, chat_id, message,
                          "El usuario no está registrado")
                try:
                    bot.sendMessage(
                        chat_id=user_id,
                        text="❌ Debes validarte para entrar en este grupo",
                        parse_mode=telegram.ParseMode.MARKDOWN)
                except Exception:
                    pass
                return

            elif group.requirment is ValidationRequiered.SLYTHERIN.value and user.house is not Houses.SLYTHERIN.value:
                bot.kickChatMember(chat_id=chat_id,
                                   user_id=user_id,
                                   until_date=time.time() + 31)
                if group.val_alert is False:
                    output = "👌 Mago infiltrado expulsado!"
                    bot.sendMessage(chat_id=chat_id,
                                    text=output,
                                    parse_mode=telegram.ParseMode.MARKDOWN)
                good_luck(bot, chat_id, message,
                          "El usuario no está registrado")
                try:
                    bot.sendMessage(
                        chat_id=user_id,
                        text="❌ Debes validarte para entrar en este grupo",
                        parse_mode=telegram.ParseMode.MARKDOWN)
                except Exception:
                    pass
                return

            if group.max_members is not None and group.max_members > 0 and bot.get_chat_members_count(
                    chat_id) >= group.max_members:
                if group.val_alert is False:
                    output = "❌ El número máximo de integrantes en el grupo ha sido alcanzado"
                    sent = bot.sendMessage(
                        chat_id=chat_id,
                        text=output,
                        parse_mode=telegram.ParseMode.MARKDOWN)
                    delete_object = support.DeleteContext(
                        chat_id, sent.message_id)
                    job_queue.run_once(support.callback_delete,
                                       10,
                                       context=delete_object)
                time.sleep(2)
                bot.kickChatMember(chat_id=chat_id,
                                   user_id=user_id,
                                   until_date=time.time() + 31)
                return

            if (not exists_user_group(user_id, chat_id)):
                set_user_group(user_id, chat_id)
            else:
                join_group(user_id, chat_id)

            if has_rules(chat_id):
                bot.restrict_chat_member(chat_id,
                                         user_id,
                                         until_date=0,
                                         can_send_messages=False,
                                         can_send_media_messages=False,
                                         can_send_other_messages=False,
                                         can_add_web_page_previews=False)

            if get_welc_pref(chat_id):
                sent = send_welcome(bot, update)
                if sent is not None and group.delete_cooldown is not None and group.delete_cooldown > 0:
                    delete_object = support.DeleteContext(
                        chat_id, sent.message_id)
                    job_queue.run_once(support.callback_delete,
                                       group.delete_cooldown,
                                       context=delete_object)
            '''
            if group.val_alert and (user is None or user.level is None):
                sent = bot.sendMessage(
                    chat_id=chat_id,
                    text="",
                    parse_mode=telegram.ParseMode.MARKDOWN
                )
                if sent is not None:
                    delete_object = support.DeleteContext(chat_id, sent.message_id)
                    job_queue.run_once(
                        support.callback_delete, 
                        group.delete_cooldown or 60,
                        context=delete_object
                    )
            '''
            ladmin = get_particular_admin(chat_id)
            if ladmin is not None and ladmin.welcome:
                admin = get_admin_from_linked(chat_id)
                if admin is not None and admin.welcome and admin.admin_bot:
                    config = get_config()
                    adm_bot = Bot(token=config["telegram"]["admin_token"])
                    replace_pogo = support.replace(
                        user_id, message.from_user.first_name, admin=True)
                    message_text = (
                        "ℹ️ {}\n👤 {} ha entrado en el grupo").format(
                            message.chat.title, replace_pogo)
                    adm_bot.sendMessage(chat_id=admin.id,
                                        text=message_text,
                                        parse_mode=telegram.ParseMode.MARKDOWN)
                elif admin is not None and admin.welcome:
                    replace_pogo = support.replace(
                        user_id, message.from_user.first_name, admin=True)
                    message_text = (
                        "ℹ️ {}\n👤 {} ha entrado en el grupo").format(
                            message.chat.title, replace_pogo)
                    bot.sendMessage(chat_id=admin.id,
                                    text=message_text,
                                    parse_mode=telegram.ParseMode.MARKDOWN)
Example #10
0
def process_group_message(bot, update, job_queue):
    chat_id, chat_type, user_id, text, message = support.extract_update_info(
        update)
    msg = update.effective_message

    if are_banned(user_id, chat_id):
        return

    group = group_sql.get_group(chat_id)
    if group is None:
        group_sql.set_group(chat_id, message.chat.title)
    if not exists_user_group(user_id, chat_id):
        set_user_group(user_id, chat_id)

    message_counter(user_id, chat_id)
    if get_group_settings(chat_id).games == True and (chat_type == 'supergroup'
                                                      or chat_type == 'group'):
        games_cmd(bot, update)

    if text is None or msg.photo is None:
        if msg and msg.document:
            nanny.process_gif(bot, update, job_queue)
            return
        elif msg and msg.contact:
            nanny.process_contact(bot, update, job_queue)
            return
        elif msg and msg.game:
            nanny.process_game(bot, update, job_queue)
            return
        elif msg and msg.location or msg.venue:
            nanny.process_ubi(bot, update, job_queue)
            return
        elif msg and msg.photo:
            nanny.process_pic(bot, update, job_queue)
            return
        elif msg and msg.sticker:
            nanny.process_sticker(bot, update, job_queue)
            return
        elif msg and msg.voice or msg.audio:
            nanny.process_voice(bot, update, job_queue)
            return
        elif msg and msg.video or msg.video_note:
            nanny.process_video(bot, update, job_queue)
            return

    if msg and msg.entities and nanny.process_url(bot, update, job_queue):
        return

    if nanny.nanny_text(bot, user_id, chat_id, message, job_queue):
        return

    if text is not None and re.search("@admin(?!\w)", text) is not None:
        replace_pogo = support.replace(user_id,
                                       message.from_user.first_name,
                                       admin=True)

        chat_text = support.message_url(message, message.message_id,
                                        message.chat.title)

        message_text = (
            "ℹ️ {}\n👤 {} ha enviado una alerta a los administradores\n\nMensaje: {}"
        ).format(chat_text, replace_pogo, text)
        for admin in bot.get_chat_administrators(chat_id):
            user = get_user(admin.user.id)
            if user is not None and user.alerts:
                bot.sendMessage(chat_id=admin.user.id,
                                text=message_text,
                                parse_mode=telegram.ParseMode.MARKDOWN,
                                disable_web_page_preview=True)
        ladmin = get_particular_admin(chat_id)
        if ladmin is not None and ladmin.admin:
            admin = get_admin_from_linked(chat_id)
            if admin is not None and admin.admin and admin.admin_bot:
                config = get_config()
                adm_bot = Bot(token=config["telegram"]["admin_token"])
                replace_pogo = support.replace(user_id,
                                               message.from_user.first_name,
                                               admin=True)
                message_text = ("ℹ️ {}\n👤 {} {}").format(
                    chat_text, replace_pogo, text)
                adm_bot.sendMessage(chat_id=admin.id,
                                    text=message_text,
                                    parse_mode=telegram.ParseMode.MARKDOWN,
                                    disable_web_page_preview=True)
            elif admin is not None and admin.admin:
                replace_pogo = support.replace(user_id,
                                               message.from_user.first_name,
                                               admin=True)
                message_text = ("ℹ️ {}\n👤 {} {}").format(
                    chat_text, replace_pogo, text)
                bot.sendMessage(chat_id=admin.id,
                                text=message_text,
                                parse_mode=telegram.ParseMode.MARKDOWN,
                                disable_web_page_preview=True)
def sighting_btn(bot, update):
    query = update.callback_query
    data = query.data
    user = update.effective_user
    username = query.from_user.username
    user_id = query.from_user.id
    text = query.message.text
    chat_id = query.message.chat.id
    message_id = query.message.message_id
    dataThings = data.split("_")
    lat = dataThings[2]
    lon = dataThings[3]

    if are_banned(user_id, chat_id):
        return

    user = get_user(user_id)

    if user is None:
        bot.answer_callback_query(
            query.id,
            "❌ Debes registrarte para usar esta función.",
            show_alert=True)
        return

    if re.match(r"^sighting_ubi_", data):
        bot.send_location(
            chat_id=user_id,
            latitude=lat,
            longitude=lon,
            reply_markup=InlineKeyboardMarkup([[
                InlineKeyboardButton(
                    text="📍 Google Maps",
                    url='https://maps.google.com/maps?q={0},{1}'.format(
                        lat, lon))
            ]]))
        return

    string = r'\n🕚 (\d\d:\d\d) - @{} \| (🙋‍♀️ ¡Está!|🙅‍♀️ No está...)'.format(
        username)
    text = re.sub(string, "", text)

    group = get_group(chat_id)
    group_tz = group.timezone
    tz = pytz.timezone(group_tz)

    localTime = datetime.now().replace(tzinfo=pytz.utc)
    groupDateTime = localTime.astimezone(tz)
    groupTime = groupDateTime.time()

    if re.match(r"^sighting_yes_", data):
        text = text + f"\n🕚 {groupTime.hour:02}:{groupTime.minute:02} - @{username} | 🙋‍♀️ ¡Está!"

    if re.match(r"^sighting_no_", data):
        text = text + f"\n🕚 {groupTime.hour:02}:{groupTime.minute:02} - @{username} | 🙅‍♀️ No está..."

    button_list = [
        [
            InlineKeyboardButton(text="📍 Ubicación",
                                 callback_data='sighting_ubi_{0}_{1}'.format(
                                     lat, lon))
        ],
        [
            InlineKeyboardButton(text="🙋‍♀️ ¡Está!",
                                 callback_data='sighting_yes_{0}_{1}'.format(
                                     lat, lon)),
            InlineKeyboardButton(text="🙅‍♀️ No está...",
                                 callback_data='sighting_no_{0}_{1}'.format(
                                     lat, lon))
        ]
    ]

    bot.edit_message_text(text=text,
                          chat_id=chat_id,
                          message_id=message_id,
                          reply_markup=InlineKeyboardMarkup(button_list),
                          disable_web_page_preview=True)
Example #12
0
def rps_btn(bot, update, game_data):
    query = update.callback_query
    data = query.data
    user = update.effective_user
    username = query.from_user.username
    vs_id = query.from_user.id
    texto = query.message.text
    chat_id = query.message.chat.id
    message_id = query.message.message_id
    message = query.message

    vs_user = get_user(vs_id)
    if vs_user is None:
        return

    if username is None:
        bot.answer_callback_query(query.id, "Necesitas una @ para poder usar este bot.", show_alert=True)
        return

    listaPalabras = game_data.split("_")
    
    user_choice = listaPalabras[2]
    user_id = listaPalabras[3]
    other_user = get_user(user_id)
    vs_choice = listaPalabras[1]

    ent = message.parse_entities(["mention"])
    if listaPalabras[0] == "ai":
        if texto.find(username) != -1:
            return
        if len(ent) > 1:
            bot.answer_callback_query(query.id, "Alguien ha respondido ya.", show_alert=True)
            return
    elif listaPalabras[0] == "us":
        if texto.find(username) == -1:
            return
        if len(ent) > 2:
            bot.answer_callback_query(query.id, "Alguien ha respondido ya.", show_alert=True)
            return
        if list(ent.values())[0].lower() == "@" + username.lower():
            bot.answer_callback_query(query.id, "Espera a que tu contrincante elija.", show_alert=True)
            return

    if vs_choice == "r": #rock
        if user_choice == "p":
            update_user_points(user_id, 1)
            update_user_points(vs_id, -1)
            bot.edit_message_text(
                text=texto + "\n\n¡El papel de @" + other_user.alias + " ha ganado a la piedra de @" + username + "!",
                chat_id=chat_id,
                message_id=message_id) #PEKO PEKO PEKO PEKO
            bot.answer_callback_query(query.id, "¡Has perdido!", show_alert=True) #MIKO MIKO MIKO MIKO
        elif user_choice == "s":
            update_user_points(vs_id, 1)
            update_user_points(user_id, -1)
            bot.edit_message_text(
                text=texto + "\n\n¡La piedra de @" + username + " ha ganado a las tijeras de @" + other_user.alias + "!",
                chat_id=chat_id,
                message_id=message_id) #PEKO PEKO PEKO PEKO
            bot.answer_callback_query(query.id, "¡Has ganado!", show_alert=True) #MIKO MIKO MIKO MIKO
        elif user_choice == "r":
            bot.edit_message_text(
                text=texto + "\n\n¡@" + username + " y @" + other_user.alias + " han elegido piedra! ¡Empate!",
                chat_id=chat_id,
                message_id=message_id) #PEKO PEKO PEKO PEKO
            bot.answer_callback_query(query.id, "¡Has empatado!", show_alert=True) #MIKO MIKO MIKO MIKO

    elif vs_choice == "p": #paper
        if user_choice == "p":
            bot.edit_message_text(
                text=texto + "\n\n¡@" + username + " y @" + other_user.alias + " han elegido papel! ¡Empate!",
                chat_id=chat_id,
                message_id=message_id) #PEKO PEKO PEKO PEKO
            bot.answer_callback_query(query.id, "¡Has empatado!", show_alert=True) #MIKO MIKO MIKO MIKO
        elif user_choice == "s":
            update_user_points(user_id, 1)
            update_user_points(vs_id, -1)
            bot.edit_message_text(
                text=texto + "\n\n¡Las tijeras de @" + other_user.alias + " han ganado al papel de @" + username + "!",
                chat_id=chat_id,
                message_id=message_id) #PEKO PEKO PEKO PEKO
            bot.answer_callback_query(query.id, "¡Has perdido!", show_alert=True) #MIKO MIKO MIKO MIKO
        elif user_choice == "r":
            update_user_points(vs_id, 1)
            update_user_points(user_id, -1)
            bot.edit_message_text(
                text=texto + "\n\n¡El papel de @" + username + " ha ganado a la piedra de @" + other_user.alias + "!",
                chat_id=chat_id,
                message_id=message_id) #PEKO PEKO PEKO PEKO
            bot.answer_callback_query(query.id, "¡Has ganado!", show_alert=True) #MIKO MIKO MIKO MIKO

    elif vs_choice == "s": #scissors
        if user_choice == "p":
            update_user_points(vs_id, 1)
            update_user_points(user_id, -1)
            bot.edit_message_text(
                text=texto + "\n\n¡Las tijeras de @" + username + " han ganado al papel de @" + other_user.alias + "!",
                chat_id=chat_id,
                message_id=message_id) #PEKO PEKO PEKO PEKO
            bot.answer_callback_query(query.id, "¡Has ganado!", show_alert=True) #MIKO MIKO MIKO MIKO
        elif user_choice == "s":
            bot.edit_message_text(
                text=texto + "\n\n¡@" + username + " y @" + other_user.alias + " han elegido piedra! ¡Empate!",
                chat_id=chat_id,
                message_id=message_id) #PEKO PEKO PEKO PEKO
            bot.answer_callback_query(query.id, "¡Has empatado!", show_alert=True) #MIKO MIKO MIKO MIKO
        elif user_choice == "r":
            update_user_points(user_id, 1)
            update_user_points(vs_id, -1)
            bot.edit_message_text(
                text=texto + "\n\n¡La piedra de @" + other_user.alias + " ha ganado a las tijeras de @" + username + "!",
                chat_id=chat_id,
                message_id=message_id) #PEKO PEKO PEKO PEKO
            bot.answer_callback_query(query.id, "¡Has perdido!", show_alert=True) #MIKO MIKO MIKO MIKO
    return
Example #13
0
def btn(bot, update):
    query = update.callback_query
    data = query.data
    user = update.effective_user
    username = query.from_user.username
    user_id = query.from_user.id
    texto = query.message.text
    chat_id = query.message.chat.id
    message_id = query.message.message_id
    message = query.message

    if are_banned(user_id, chat_id):
        return

    user = get_user(user_id)
    if user is None:
        return

    if re.match(r"^g\*gra_", data):
        if texto.find(username) != -1:
            bot.answer_callback_query(query.id, "Ya has cogido una, deja algo al resto del grupo.", show_alert=True)
            return

        listaPalabras = data.split("_")
        
        escogido = listaPalabras[1]
        sel1 = listaPalabras[2]
        sel2 = listaPalabras[3]
        sel3 = listaPalabras[4]
        sel4 = listaPalabras[5]
        sel5 = listaPalabras[6]
        
        #user_lang = get_lang(chat_id)
        user_lang = "es_ES"
        flavors = grageas_json[user_lang]["sabores"]
        flavor = randint(0, len(flavors)-1)
        
        texto = texto + "\n @" + username + " ha escogido la gragea " + escogido + " y sabía a... ¡" + flavors[flavor] + "!"
        
        b1 = "g*gra_" + sel1 + "_" + sel1 + "_" + sel2 + "_" + sel3 + "_" + sel4 + "_" + sel5 
        b2 = "g*gra_" + sel2 + "_" + sel1 + "_" + sel2 + "_" + sel3 + "_" + sel4 + "_" + sel5 
        b3 = "g*gra_" + sel3 + "_" + sel1 + "_" + sel2 + "_" + sel3 + "_" + sel4 + "_" + sel5 
        b4 = "g*gra_" + sel4 + "_" + sel1 + "_" + sel2 + "_" + sel3 + "_" + sel4 + "_" + sel5 
        b5 = "g*gra_" + sel5 + "_" + sel1 + "_" + sel2 + "_" + sel3 + "_" + sel4 + "_" + sel5 

        markup = []
        
        if texto.find(sel1)== -1:
            markup.append([InlineKeyboardButton(text=sel1, callback_data=b1)])
        if texto.find(sel2)== -1:
            markup.append([InlineKeyboardButton(text=sel2, callback_data=b2)])
        if texto.find(sel3)== -1:
            markup.append([InlineKeyboardButton(text=sel3, callback_data=b3)])
        if texto.find(sel4)== -1:
            markup.append([InlineKeyboardButton(text=sel4, callback_data=b4)])
        if texto.find(sel5)== -1:
            markup.append([InlineKeyboardButton(text=sel5, callback_data=b5)])

        update_user_points(user_id, 1)

        bot.edit_message_text(
        text=texto,
        chat_id=chat_id,
        message_id=message_id,
        reply_markup=InlineKeyboardMarkup(markup))
    elif re.match(r"g\*whosaid_", data):
        if texto.find(username) != -1:
            return

        ent = message.parse_entities(["mention"])
        if len(ent) > 0:
            bot.answer_callback_query(query.id, "Alguien ha respondido ya.", show_alert=True)
            return

        listaPalabras = data.split("_")

        if listaPalabras[1] == "success":
            update_user_points(user_id, 3)
            update_group_points(chat_id, 3)
            bot.edit_message_text(
                text=texto + "\n\n@" + username + " ha acertado!",
                chat_id=chat_id,
                message_id=message_id)
            return

        update_user_points(user_id, -1)
        bot.answer_callback_query(query.id, "Has fallado.", show_alert=True)
    elif re.match(r"g\*duel_", data):
        '''
        if texto.find(username) != -1:
            return
        '''

        listaPalabras = data.split("_")

        if listaPalabras[1] == "accept":
            if listaPalabras[2] == user_id:
                bot.answer_callback_query(query.id, "Busca a alguien con quien pelear.", show_alert=True)
                return

            ent = message.parse_entities(["mention"])
            for mention in ent:
                userCreated = message.parse_entity(mention)

                replace = f"Hechizos {userCreated}: 0\nHechizos @{username}: 0\n\n ¡Empieza el duelo!"

                re1 = re.sub(r"(¿Quién aceptará el duelo\?)", replace, texto)
                re2 = re.sub(r"(\?\?\?)", f"@{username}", re1)

                buttons = [
                    [InlineKeyboardButton(text="Atacar", callback_data=f"g*duel_attack_0_0_{listaPalabras[2]}_{user_id}")],
                    [InlineKeyboardButton(text="Defender", callback_data=f"g*duel_defend_0_0_{listaPalabras[2]}_{user_id}")],
                    [InlineKeyboardButton(text="Pensar", callback_data=f"g*duel_think_0_0_{listaPalabras[2]}_{user_id}")]]

                bot.edit_message_text(
                    text=re2,
                    chat_id=chat_id,
                    message_id=message_id,
                    reply_markup=InlineKeyboardMarkup(buttons))
                return
        elif listaPalabras[1] == "attack":
            createdUser = listaPalabras[4]
            otherUser = listaPalabras[5]
            user1magic = listaPalabras[2]
            user2magic = listaPalabras[3]
            
            ent = message.parse_entities(["mention"])
            duelUsers = {}
            count = 0
            for mention in ent:
                user = message.parse_entity(mention)
                if count == 0:
                    duelUsers[createdUser] = user
                    count += 1
                elif count == 1:
                    duelUsers[otherUser] = user
                    count += 1
            
            if user_id == int(createdUser) and int(user1magic) == 0:
                bot.answer_callback_query(query.id, "Antes de atacar debes pensar.", show_alert=True)
                return
            elif user_id == int(otherUser) and int(user2magic) == 0:
                bot.answer_callback_query(query.id, "Antes de atacar debes pensar.", show_alert=True)
                return

            replace = f"Hechizos {userCreated}: 0\nHechizos @{username}: 0\n\n ¡Empieza el duelo!"

            re1 = re.sub(r"(¿Quién aceptará el duelo\?)", replace, texto)
            re2 = re.sub(r"(\?\?\?)", f"@{username}", re1)

            buttons = [
                [InlineKeyboardButton(text="Atacar", callback_data=f"g*duel_attack_0_0_{listaPalabras[2]}_{user_id}")],
                [InlineKeyboardButton(text="Defender", callback_data=f"g*duel_defend_0_0_{listaPalabras[2]}_{user_id}")],
                [InlineKeyboardButton(text="Pensar", callback_data=f"g*duel_think_0_0_{listaPalabras[2]}_{user_id}")]]

            bot.edit_message_text(
                text=re2,
                chat_id=chat_id,
                message_id=message_id,
                reply_markup=InlineKeyboardMarkup(buttons))
            return

        update_user_points(user_id, -1)
        update_group_points(chat_id, -1)
        bot.answer_callback_query(query.id, "Has fallado.", show_alert=True)
Example #14
0
def fort_btn(bot, update, job_queue):
    query = update.callback_query
    data = query.data
    user = update.effective_user
    username = query.from_user.username
    user_id = query.from_user.id
    text = query.message.text
    chat_id = query.message.chat.id
    message_id = query.message.message_id
    message = query.message
    markdown_text = query.message.text_markdown_urled

    if are_banned(user_id, chat_id):
        return

    user = get_user(user_id)
    if user is None:
        bot.answer_callback_query(
            query.id,
            "❌ Debes registrarte para usar esta función.",
            show_alert=True)
        return

    queryData = data.split("_")

    if len(queryData) == 5:
        if queryData[3] == str(user_id) or support.is_admin(
                chat_id, user_id, bot):
            if queryData[1] == "addubi":
                group = get_group(chat_id)
                group_tz = group.timezone
                tz = pytz.timezone(group_tz)

                try:
                    userTime = datetime.strptime(queryData[4], '%d/%H:%M')
                    userDatetime = datetime.now().replace(
                        day=userTime.day,
                        hour=userTime.hour,
                        minute=userTime.minute,
                        second=0)
                    dateText = f"el *{userDatetime.day}/{userDatetime.month}* a las *{userDatetime.hour:02}:{userDatetime.minute:02}*"
                except:
                    userTime = datetime.strptime(queryData[4], '%H:%M')
                    userDatetime = datetime.now().replace(
                        hour=userTime.hour, minute=userTime.minute, second=0)
                    dateText = f"a las *{userDatetime.hour:02}:{userDatetime.minute:02}*"

                userAsLocal = tz.localize(userDatetime)
                userAsLocal = userAsLocal.astimezone(pytz.utc)

                if datetime.now(pytz.utc) > userAsLocal:
                    userAsLocal = userAsLocal + timedelta(days=1)
                    userDatetime = userDatetime + timedelta(days=1)
                    dateText = f"el *{userDatetime.day}/{userDatetime.month}* a las *{userDatetime.hour:02}:{userDatetime.minute:02}*"

                userAsLocal30 = userAsLocal - timedelta(minutes=30)
                #userAsLocal30 = userAsLocal30.time()
                #userAsLocalTime = userAsLocal.time()

                userAsLocal = userAsLocal.replace(tzinfo=None)

                poi = get_poi(queryData[2])
                lat = poi.latitude
                lon = poi.longitude

                button_list = [[
                    (InlineKeyboardButton("🙋‍♀️ Voy",
                                          callback_data=f'fort_yes_{poi.id}')),
                    (InlineKeyboardButton(
                        "🕒 Tardo", callback_data=f'fort_late_{poi.id}')),
                    (InlineKeyboardButton("❌ No voy",
                                          callback_data=f'fort_no_{poi.id}'))
                ],
                               [(InlineKeyboardButton(
                                   "✅ Estoy",
                                   callback_data=f'fort_here_{poi.id}')),
                                (InlineKeyboardButton(
                                    "📍 Ubicación",
                                    callback_data=f'fort_ubi_{poi.id}')),
                                (InlineKeyboardButton(
                                    "⚠️ Aviso",
                                    callback_data=f'fort_alert_{poi.id}'))]]

                text = "Fortaleza en [{0}](https://maps.google.com/maps?q={1},{2}) {3}\n\nLista:".format(
                    poi.name, lat, lon, dateText)

                fort_msg = bot.sendMessage(
                    chat_id=chat_id,
                    text=text,
                    parse_mode=telegram.ParseMode.MARKDOWN,
                    disable_web_page_preview=True,
                    reply_markup=InlineKeyboardMarkup(button_list))

                chat_url = support.message_url(message, fort_msg.message_id,
                                               "desafío")

                f_object = support.AlertFortressContext(
                    chat_id,
                    f"¡Mago de *{message.chat.title}*, en 30 minutos tendrá lugar un {chat_url} que pondrá a prueba tus habilidades como mago en [{poi.name}](https://maps.google.com/maps?q={lat},{lon})!",
                    fort_msg.message_id, poi.id)
                job_queue.run_once(support.callback_AlertFortress,
                                   userAsLocal,
                                   context=f_object)

                support.save_jobs(job_queue)

                bot.delete_message(chat_id=chat_id, message_id=message_id)
                return

        else:
            bot.answer_callback_query(
                callback_query_id=query.id,
                text=
                "Sólo un administrador o el usuario que ha creado el aviso puede pulsar ese botón.",
                show_alert=True)
            return
    if queryData[1] == "cancel":
        if queryData[2] == str(user_id) or support.is_admin(
                chat_id, user_id, bot):
            bot.delete_message(chat_id=chat_id, message_id=message_id)
            return
        else:
            bot.answer_callback_query(
                callback_query_id=query.id,
                text=
                "Sólo un administrador o el usuario que ha creado el aviso puede pulsar ese botón.",
                show_alert=True)
            return

    poi_id = queryData[2]
    poi = get_poi(poi_id)
    lat = poi.latitude
    lon = poi.longitude

    button_list = [
        [(InlineKeyboardButton("🙋‍♀️ Voy",
                               callback_data=f'fort_yes_{poi.id}')),
         (InlineKeyboardButton("🕒 Tardo",
                               callback_data=f'fort_late_{poi.id}')),
         (InlineKeyboardButton("❌ No voy",
                               callback_data=f'fort_no_{poi.id}'))],
        [(InlineKeyboardButton("✅ Estoy",
                               callback_data=f'fort_here_{poi.id}')),
         (InlineKeyboardButton("📍 Ubicación",
                               callback_data=f'fort_ubi_{poi.id}')),
         (InlineKeyboardButton("⚠️ Aviso",
                               callback_data=f'fort_alert_{poi.id}'))]
    ]

    string = r'\n(🙋‍♀️|✅|🕒|❌) 🧙(\d|\d\d|\?\?) (🍮|⚔|🐾|📚)(\d|\d\d|\?\?) @{}'.format(
        username)

    if queryData[1] == "ubi":
        bot.send_venue(
            chat_id=user_id,
            title=poi.name,
            address=" ",
            latitude=lat,
            longitude=lon,
            reply_markup=InlineKeyboardMarkup([[
                InlineKeyboardButton(
                    text="📍 Google Maps",
                    url='https://maps.google.com/maps?q={0},{1}'.format(
                        lat, lon))
            ]]))
        return
    elif queryData[1] == "alert":
        if last_run(
                str(user_id) + str(chat_id) + str(message_id), 'fort_alert'):
            bot.answer_callback_query(
                callback_query_id=query.id,
                text=
                "Ya has enviado un ⚠️ Aviso, espera un rato para enviar otro.",
                show_alert=True)
            return
        if re.search(string, markdown_text):
            ent = message.parse_entities(["mention"])
            chat_url = support.message_url(message, message_id, "fortaleza")
            for mention in ent:
                username = message.parse_entity(mention)
                string = r'\n(🙋‍♀️|✅|🕒|❌) 🧙(\d|\d\d|\?\?) (🍮|⚔|🐾|📚)(\d|\d\d|\?\?) {}'.format(
                    username)
                search = re.search(string, markdown_text)
                if search.group(1) == "❌":
                    continue
                user = get_user_by_name(username[1:])
                btn_user = get_user(user_id)
                bot.sendMessage(
                    chat_id=user.id,
                    text=
                    f"Alerta para la {chat_url} en [{poi.name}](https://maps.google.com/maps?q={lat},{lon}) enviada por @{btn_user.alias}",
                    parse_mode=telegram.ParseMode.MARKDOWN,
                    disable_web_page_preview=True)
            bot.answer_callback_query(
                callback_query_id=query.id,
                text=
                "⚠️ Aviso enviado a todos los magos apuntados en la lista.",
                show_alert=True)
        else:
            bot.answer_callback_query(
                query.id,
                "❌ Debes apuntarte para poder enviar una alerta.",
                show_alert=True)
        return

    markdown_text = re.sub(string, "", markdown_text)

    if user is None or user.profession is Professions.NONE.value:
        text_prof = "🍮"
    elif user.profession is Professions.AUROR.value:
        text_prof = "⚔"
    elif user.profession is Professions.MAGIZOOLOGIST.value:
        text_prof = "🐾"
    elif user.profession is Professions.PROFESSOR.value:
        text_prof = "📚"

    text_level = ("{}".format(user.level) if user and user.level else "??")
    text_profession_level = ("{}".format(user.profession_level)
                             if user and user.profession_level else "??")

    if queryData[1] == "yes":
        text = markdown_text + f"\n🙋‍♀️ 🧙{text_level} {text_prof}{text_profession_level} @{username}"
    elif queryData[1] == "here":
        text = markdown_text + f"\n✅ 🧙{text_level} {text_prof}{text_profession_level} @{username}"
    elif queryData[1] == "late":
        text = markdown_text + f"\n🕒 🧙{text_level} {text_prof}{text_profession_level} @{username}"
    elif queryData[1] == "no":
        text = markdown_text + f"\n❌ 🧙{text_level} {text_prof}{text_profession_level} @{username}"

    bot.edit_message_text(text=text,
                          chat_id=chat_id,
                          message_id=message_id,
                          parse_mode=telegram.ParseMode.MARKDOWN,
                          reply_markup=InlineKeyboardMarkup(button_list),
                          disable_web_page_preview=True)
Example #15
0
def grag_btn(bot, update, game_data):
    query = update.callback_query
    data = query.data
    user = update.effective_user
    username = query.from_user.username
    user_id = query.from_user.id
    texto = query.message.text
    chat_id = query.message.chat.id
    message_id = query.message.message_id
    message = query.message

    user = get_user(user_id)
    if user is None:
        return

    if username is None:
        bot.answer_callback_query(query.id,
                                  "Necesitas una @ para poder usar el bot.",
                                  show_alert=True)
        return

    if texto.find(username) != -1:
        bot.answer_callback_query(
            query.id,
            "Ya has cogido una, deja algo al resto del grupo.",
            show_alert=True)
        return

    listaPalabras = game_data.split("_")

    escogido = listaPalabras[0]
    sel1 = listaPalabras[1]
    sel2 = listaPalabras[2]
    sel3 = listaPalabras[3]
    sel4 = listaPalabras[4]
    sel5 = listaPalabras[5]

    #user_lang = get_lang(chat_id)
    user_lang = "es_ES"
    flavors = grageas_json[user_lang]["sabores"]
    flavor = randint(0, len(flavors) - 1)

    texto = texto + "\n @" + username + " ha escogido la gragea " + escogido + " y sabía a... ¡" + flavors[
        flavor] + "!"

    b1 = "g*gra_" + sel1 + "_" + sel1 + "_" + sel2 + "_" + sel3 + "_" + sel4 + "_" + sel5
    b2 = "g*gra_" + sel2 + "_" + sel1 + "_" + sel2 + "_" + sel3 + "_" + sel4 + "_" + sel5
    b3 = "g*gra_" + sel3 + "_" + sel1 + "_" + sel2 + "_" + sel3 + "_" + sel4 + "_" + sel5
    b4 = "g*gra_" + sel4 + "_" + sel1 + "_" + sel2 + "_" + sel3 + "_" + sel4 + "_" + sel5
    b5 = "g*gra_" + sel5 + "_" + sel1 + "_" + sel2 + "_" + sel3 + "_" + sel4 + "_" + sel5

    markup = []

    if texto.find(sel1) == -1:
        markup.append([InlineKeyboardButton(text=sel1, callback_data=b1)])
    if texto.find(sel2) == -1:
        markup.append([InlineKeyboardButton(text=sel2, callback_data=b2)])
    if texto.find(sel3) == -1:
        markup.append([InlineKeyboardButton(text=sel3, callback_data=b3)])
    if texto.find(sel4) == -1:
        markup.append([InlineKeyboardButton(text=sel4, callback_data=b4)])
    if texto.find(sel5) == -1:
        markup.append([InlineKeyboardButton(text=sel5, callback_data=b5)])

    update_user_points(user_id, 1)

    bot.edit_message_text(text=texto,
                          chat_id=chat_id,
                          message_id=message_id,
                          reply_markup=InlineKeyboardMarkup(markup))