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