def on_set_paciente(message): bot.send_chat_action(message.chat.id, 'typing') parts = re.match(r"^(registrar paciente|rp) ([0-9]*)$", message.text, flags=re.IGNORECASE) #Si es un Medico if GestorConsultas.validar_medico(message.from_user.id): return bot.reply_to( message, f"\U0001FA7A *Dr(a). {message.from_user.first_name}*, no puede implementar este comando, solo lo pueden usarlo pacientes.", parse_mode="Markdown") documento = int(parts[2]) #si existe paciente paciente = GestorPacientes.get_paciente(documento) if paciente: return bot.reply_to(message, f"Paciente ya registrado.", parse_mode="Markdown") #si usuario ya registrado usuario = GestorConsultas.existencia_usuario(message.from_user.id) if usuario: return bot.reply_to( message, f"Este usuario ya está registrado con el documento *{usuario.documento}*", parse_mode="Markdown") #Usuario no existente se procede al registro GestorPacientes.set_paciente( message.from_user.id, documento, message.chat.first_name + " " + message.chat.last_name, 1) return bot.reply_to(message, f"Paciente registrado.")
def send_text(message): m = message.text.lower() for word in words: if word in m: bot.reply_to(message, 'Не матерись!!!') bot.delete_message(message.chat.id, message.message_id)
def on_set_cancion(message): bot.send_chat_action(message.chat.id, 'typing') parts = re.match(r"^(agregar cancion|ag) ([a-zA-Z]{3,20}) ([0-9]{1,2})", message.text, re.IGNORECASE) print(parts.groups()) nombreCancion = (parts[2]) idtipoMusica = int(parts[3]) response = '' if idtipoMusica > 0: nombreUsuario = usuarios.register_usuario(message.from_user.id, message.from_user.first_name) print(nombreUsuario) canciones.register_cancion(nombreCancion, "5", message.from_user.id, idtipoMusica) response = '¡Cancion almacenada con éxito!:' else: listatipoMusica = tipoMusica.get_tipoMusica() if listatipoMusica: response = 'Debe seleccionar el ID del tipo de música \n Los tipos de música son: \n' for tipomusica in listatipoMusica: response += str( tipomusica.id) + ' ' + tipomusica.nombreTipoMusica + '\n' else: response = 'No existe Tipo de música, debe crearla con {agtm}' bot.reply_to(message, f"\U0001F4B0" + response)
def on_fallback(message): bot.send_chat_action(message.chat.id, 'typing') sleep(1) response = GestorConversacion.get_fallback_message( message.text, message.from_user.first_name, config.COMPANIA_SIGNOS) bot.reply_to(message, response, parse_mode="Markdown")
def on_get_signos(message): bot.send_chat_action(message.chat.id, 'typing') parts = re.match( r"^(consultar signos|cs) ([0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])) ([0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]))$", message.text, flags=re.IGNORECASE) fecha_inicial = parts[2] fecha_final = parts[5] id_usuario = int(message.from_user.id) nombre_user = message.chat.first_name if check_user(message, id_usuario): signos = GestorConsultas.get_signos(message.from_user.id, fecha_inicial, fecha_final) # En caso de que el usuario este registrado pero no tenga registros de signos vitales se le mostrara un mensaje if not signos: return bot.reply_to( message, "No existe registro de signos para el usuario " + nombre_user + "\n\n", parse_mode="Markdown") #si pasa todas las validaciones text = "``` Listado de los signos del usuario: " + nombre_user + "\n" text += f" Desde {fecha_inicial} hasta {fecha_final} \n" text += f"|ID|Sistolica|Diastolica|F.Cardiaca|Peso|Observación| \n" for sv in signos: text += f"| {sv.id}| {sv.pas} | {sv.pad} | {sv.fc} | {sv.peso} |{sv.observacion}| \n" text += "```" return bot.reply_to(message, text, parse_mode="Markdown")
def on_remove_cancion(message): bot.send_chat_action(message.chat.id, 'typing') parts = re.match(r"^(agregar cancion|rc) ([a-zA-Z]{3,20}) ([0-9]{1,2})", message.text, re.IGNORECASE) print(parts.groups()) nombreCancion = (parts[2]) idtipoMusica = int(parts[3]) response = '' if idtipoMusica > 0: rowdelete = canciones.remover_cancion(nombreCancion, message.from_user.id, idtipoMusica) if rowdelete > 0: response = '¡Cancion removida con éxito!:' else: response = '¡No fue posible eliminar la cacion, favor verifica los datos!:' else: listatipoMusica = tipoMusica.get_tipoMusica() if listatipoMusica: response = 'Debe indicar el ID del tipo de música \n Los tipos de música son: \n' for tipomusica in listatipoMusica: response += str( tipomusica.id) + ' ' + tipomusica.nombreTipoMusica + '\n' else: response = 'No existe Tipo de música, debe crearla con {agtm}' bot.reply_to(message, f"\U0001F4B0" + response)
def on_get_balance(message): bot.send_chat_action(message.chat.id, 'typing') balance = logic.get_balance (message.from_user.id) text = "\U0000274C Aún no tienes una cuenta asociada, ejecuta /start para arreglarlo." if balance != None: text = f"Tu saldo actual es ${balance}" bot.reply_to(message, text)
def on_fallback(message): bot.send_chat_action(message.chat.id, 'typing') sleep(1) bot.reply_to( message, "\U0001F63F Ups, no entendí lo que me dijiste.")
def on_list_earnings(message): bot.send_chat_action(message.chat.id, 'typing') parts = re.match(r"^(listar ganancias|lg) en ([0-9]{1,2}) de ([0-9]{4})$", message.text, re.IGNORECASE) #print(parts.groups()) month = int(parts[2]) year = int(parts[3]) # Esta forma de validar es un ensayo, para sacar la validación aparte mensaje_error = logic.validate_date(month,year) if mensaje_error != None: bot.reply_to(message, mensaje_error) return earnings = logic.list_earnings (message.from_user.id, month, year) text = "" total = 0 if not earnings: text = f"\U0001F633 No tienes ganancias registradas en {month}/{year}" else: text = " Listado de ganancias:\n\n" for e in earnings: total += e.amount text += f"| {e.id} | ${e.amount} | ({e.when.strftime('%d/%m/%Y - %H:%M')}) |\n" text += f"\nTOTAL = ${total}" text += " " bot.reply_to(message, text, parse_mode="Markdown")
def check(message): b = message.from_user.id if t + 15 < time.time(): bot.reply_to(g, 'Время вышло') bot.send_message(message, 'Можете попробовать снова') elif a == b: send_covid1(message) else: #bot.reply_to(message, 'Я отвечаю на команду{}.'.format(c)) checkAgain(message)
def on_fallback(message): bot.send_chat_action(message.chat.id, 'typing') sleep(1) response = logic.get_fallback_message(message.text) bot.reply_to(message, response) bot.send_message(message.chat.id, logic.get_help_message(), parse_mode="Markdown")
def on_earn_money(message): bot.send_chat_action(message.chat.id, 'typing') parts = re.match(r"^(gane|gané|g) ([+-]?([0-9]*[.])?[0-9]+)$",message.text,re.IGNORECASE) # print (parts.groups()) amount = float(parts[2]) control = logic.earn_money (message.from_user.id, amount) bot.reply_to( message, f"\U0001F4B0 ¡Dinero ganado!: {amount}" if control == True else "\U0001F4A9 Tuve problemas registrando la transacción, ejecuta /start y vuelve a intentarlo")
def on_spend_money(message): bot.send_chat_action(message.chat.id, 'typing') parts = re.match( r"^(gaste|gasté|gg) ([+-]?([0-9]*[.])?[0-9]+)$", message.text) amount = float(parts[2]) control = logic.spend_money (message.from_user.id, amount) bot.reply_to(message, f"\U0001F4B8 ¡Dinero gastado!: {amount}" if control == True else "\U0001F4A9 Tuve problemas registrando la transacción, ejecuta /start y vuelve a intentarlo")
def es(message): bot.send_chat_action(message.chat.id, 'typing') listacanciones = canciones.get_canciones() response = '' if listacanciones: for cancion in listacanciones: response += str(cancion.id) + ' ' + cancion.nombreCancion + '\n' else: response = 'No tienes canciones almacenadas por el momento' bot.reply_to(message, f"\U0001F3BC ¡Tus canciones son: \n" + response)
def on_producto(message): bot.send_chat_action(message.chat.id, 'typing') sleep(1) parts = re.match( r"^multiplicar ([+-]?([0-9]*[.])?[0-9]+) y ([+-]?([0-9]*[.])?[0-9]+)$", message.text) # print (parts.groups()) oper1 = float(parts[1]) oper2 = float(parts[3]) result = oper1 * oper2 bot.reply_to(message, f"\U0001F522 Resultado: {result}")
def me_debe_handler(message): try: names, monto = split_message_multiple(message.text) for name in names: if not existe_usuario(name): agregar_usuario(name) agregar_deuda(name, '@' + message.from_user.username, monto) bot.reply_to(message, u"👌") except Exception as e: print e bot.reply_to(message, "Mensaje incorrecto")
def on_list_accounts(message): bot.send_chat_action(message.chat.id, 'typing') text = "" if logic.check_admin(message.from_user.id): accounts = logic.list_accounts() text = "``` Listado de cuentas:\n\n" for account in accounts: text += f"| {account.id} | ${account.balance} |\n" text += "```" else: text = f"\U0000274C Esta funcionalidad sólo está disponible para administradores" bot.reply_to(message, text, parse_mode="Markdown")
def on_set_tipo(message): bot.send_chat_action(message.chat.id, 'typing') parts = re.match(r"^(agregar tipo musica|agtm) ([a-zA-Z]{3,20})", message.text, re.IGNORECASE) print(parts.groups()) nombre = (parts[2]) nombreTipoMusica = tipoMusica.register_tipoMusica(nombre) bot.reply_to( message, f"\U0001F399 Tipo de música almacenada con éxito!: " if nombreTipoMusica == True else "\U0001F507Tuve problemas registrando el tipo de música, ejecuta agregar tipo musica ó agtm a intentarlo" )
def process_semester_step(message): chat_id = message.chat.id semester = message.text if semester not in semester_list.keys(): bot.reply_to(message, 'אופסס, סמסטר לא תקין') start_process(message) return course = course_dict[chat_id] course.semester = semester_list[semester] request_params = { 'courseId': course.courseId, 'year': course.year, 'semester': course.semester } if config.flag: config.flag = False r = requests.get(url=API_LINK, params=request_params) data = r.json() else: return # if no links found if not data['success']: markup = types.InlineKeyboardMarkup() markup.add( types.InlineKeyboardButton( "📤 להוספת לינק למערכת", url="https://bit.ly/openu-bot-add-link")) markup.add( types.InlineKeyboardButton("🔍 לחיפוש חדש", callback_data="cb_start")) bot.send_message(chat_id, "לא קיים לינק לקבוצה", reply_markup=markup) return for link in data['data']: print_link(bot, chat_id, link, course) markup = types.InlineKeyboardMarkup() markup.add( types.InlineKeyboardButton("🔍 לחיפוש לינק חדש", callback_data="cb_start")) markup.add( types.InlineKeyboardButton("🤖 לעמוד הפייסבוק", url="https://bit.ly/openu-bot-facebook")) bot.send_message(chat_id, divider, reply_markup=markup) # end process_course_id_step #
def on_find_cancion(message): bot.send_chat_action(message.chat.id, 'typing') parts = re.match(r"^(buscar cancion|bc) ([a-zA-Z]{3,20})", message.text, re.IGNORECASE) nombreCancion = (parts[2]) cancion = canciones.find_canciones(nombreCancion) if cancion: mensaje = "¡Su canción encontrada es: ID: " + str( cancion.id ) + " NOMBRE: " + cancion.nombreCancion + " DURACION:" + cancion.duracionCancion else: mensaje = "Tuve problemas buscando la canción, ejecuta /start y vuelve a intentarlo" bot.reply_to(message, f"\U0001F941" + mensaje)
def on_get_resgistro_paciente(message): bot.send_chat_action(message.chat.id, 'typing') #Se particiona el mensaje recibido parts = re.match( r"^(listar registros pacientes|lrp) ([0-9]+) ([0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])) ([0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]))$", message.text, flags=re.IGNORECASE) #Se obtienen las variables documento = parts[2] fecha_inicial = parts[3] fecha_final = parts[6] #validar si tiene permiso para este comando if not GestorConsultas.validar_medico(message.from_user.id): return bot.reply_to( message, f"\U0001F6AB Este comando solo puede ser utilizado por un * Médico *", parse_mode="Markdown") #obtener id del paciente paciente = GestorPacientes.get_paciente(documento) #Si no existe ningun paciente con ese ese documento if not paciente: return bot.reply_to( message, f"No existe ningun paciente con el número de documento *{documento}*", parse_mode="Markdown") #obtener las mediciones del paciente mediciones = GestorConsultas.get_signos(paciente.id_user_tel, fecha_inicial, fecha_final) #Si no existe ninguna medicion para la fecha if not mediciones: return bot.reply_to( message, f"Desde el día *{fecha_inicial}* hasta el día *{fecha_final}* No existen registros de mediciones para el paciente con cc *{documento}*", parse_mode="Markdown") #si pasa las validadciones de imprime los listados text = f"``` Listado de las mediciones del Paciente: \n {documento} {paciente.nombreCompleto} \n" text += f" Desde {fecha_inicial} hasta {fecha_final} \n\n" text += f"|ID|Sistolica|Diastolica|F.Cardiaca|Peso|Fecha Toma| \n" for m in mediciones: fecha_corta = str(m.fecha_toma)[2:10] + str(m.fecha_toma)[10:16] text += f"|{m.id} | {m.pas} | {m.pad} | {m.fc} |{m.peso}| {fecha_corta} |\n" text += "```" bot.reply_to(message, text, parse_mode="Markdown")
def on_list_vehiculos(message): bot.send_chat_action(message.chat.id, 'typing') text = "" vehiculos = logic.list_vehiculos() text = "``` Listado de vehiculos:\n\n" for vehiculo in vehiculos: text += f"| Tipo: {vehiculo.tipo_vehiculo} | Placa: {vehiculo.placa} | ID: {vehiculo.id_vehiculo}|\n" text += "```" bot.reply_to(message, text, parse_mode="Markdown")
def on_remove_record(message): bot.send_chat_action(message.chat.id, 'typing') parts = re.match( r"^(remover|r) (ganancia|g|gasto|gg) ([0-9]+)$", message.text) record_type = parts[2] index = int(parts[3]) if record_type not in ["ganancia", "g", "gasto", "gg"]: bot.reply_to(message, f"Error, tipo de registro inválido: {record_type}") return if index < 0: bot.reply_to(message, f"Error, índice inválido: {index}") return response = False if record_type == "ganancia" or record_type == "g": response = logic.remove_earning (message.from_user.id, index) elif record_type == "gasto" or record_type == "gg": response = logic.remove_spending (message.from_user.id, index) if response: bot.reply_to(message, f"Registro removido: {record_type}, {index}") else: bot.reply_to(message, f"No se pudo remover el registro: {index}")
def on_in_vehiculo(message): bot.send_chat_action(message.chat.id, 'typing') parts = re.match(r"(^)registrar ingreso|ingreso|ring placa ([a-zA-Z0-9_ ]*) en la zona ([a-zA-Z0-9_ ]*)($)", message.text, re.IGNORECASE) #Ejemplo: ring placa UES070 en la zona ZN02 try: placaVehiculo = parts.group(2) zonaVehiculo = parts.group(3) obtenerPlaca = logic.get_placa (placaVehiculo) if not obtenerPlaca: bot.reply_to(message, f"🚨 El vehículo con placa {placaVehiculo} no se encuentra registrado") else: disponibilidad = logic.get_disponibilidad_zona(zonaVehiculo) estado = float(0); if disponibilidad == True: control = logic.ingresar_vehiculo(message.from_user.id, placaVehiculo, zonaVehiculo) logic.update_dispo_zona(zonaVehiculo, estado) bot.reply_to( message, f"🚗 Vehículo Ingrezado a la Zona: {zonaVehiculo}" if control == True else "🙈 Tuve problemas ingresando el Vehiculo, ejecuta /start y vuelve a intentarlo") else: bot.reply_to(message, f"⚠️ Zona: {zonaVehiculo} no se encuentra disponible") except: bot.reply_to(message, f"💩 Tuve problemas ingresando el Vehiculo, valida la zona y placa, ejecuta /start y vuelve a intentarlo")
def on_cociente(message): bot.send_chat_action(message.chat.id, 'typing') sleep(1) parts = re.match( r"^dividir ([+-]?([0-9]*[.])?[0-9]+) y ([+-]?([0-9]*[.])?[0-9]+)$", message.text) print(parts.groups()) oper1 = float(parts[1]) oper2 = float(parts[3]) if oper2 != 0: result = oper1 / oper2 bot.reply_to(message, f"\U0001F522 Resultado: {result}") else: bot.reply_to(message, f"\U0001F522 No se puede dividir entre 0:")
def step_2_eliminar_signos(message, index): signo = db.session.query(Medicion).get(index) print(signo.id) #Confirmacion positiva de eliminar if message.text == "1": db.session.delete(signo) db.session.commit() bot.send_message(message.chat.id,"*Registro eliminado con éxito.*",parse_mode="Markdown") elif message.text == "2": bot.reply_to(message, f"Proceso cancelado por el usuario.") else: bot.reply_to(message, f"Comando no reconocido, inicie el proceso nuevamente.")
def list_tipomusica(message): bot.send_chat_action(message.chat.id, 'typing') parts = re.match(r"^(listar tipo musica por cancion |ltmc) ([0-9]{1,2})", message.text, re.IGNORECASE) idTipoMusica = (parts[2]) listacanciones = canciones.lista_canciones(idTipoMusica) response = '' if listacanciones: for cancion in listacanciones: response += str(cancion.id) + ' ' + cancion.nombreCancion + '\n' else: response = 'No tienes canciones almacenadas por el momento' bot.reply_to( message, f"\U0001F3B9 ¡Tus canciones de la lista " + idTipoMusica + " son: \n" + response)
def en_cambiar_estado_paquete_fecha(message): parts = re.match( r"^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2})$", message.text, re.IGNORECASE) resp = logic.update_evento_fecha(message.chat.id, parts) if resp == RESPUESTA_OK: bot.send_message( message.chat.id, f"\U00002705 Se ha cambiado el estado del paquete con éxito.", parse_mode="Markdown") else: bot.reply_to(message, resp, parse_mode="Markdown") bot.send_message( message.chat.id, text= "¿Cuál es la fecha y la hora en la que se cambió de estado el paquete?(yyyy-MM-dd HH:mm)", reply_markup=telebot.types.ForceReply(selective=False))
def on_list_earnings(message): bot.send_chat_action(message.chat.id, 'typing') parts = re.match( r"^(ubicar vehiculo|placa) en ([0-9]{1,2}) de ([0-9]{4})$", message.text) zona = logic.get_zona (message.from_user.id) text="" if not zona: text = f"\U0001F633 El vehiculo no está parqueado en ninguna zona" else: text = "``` La zona en que se encuentra ubicado el vehiculo es:\n\n" zona bot.reply_to(message, text, parse_mode="Markdown")
def on_delete_signos(message): #se particiona el mensaje parts = re.match(r"^(eliminar signos|es) ([0-9]+)$", message.text, flags=re.IGNORECASE) #se guarda el id del usuario y id de la medicion id_usuario = int(message.from_user.id) id_medicion = int(parts[2]) #Se llama la funcion que consulta en la base de datos las mediciones. signo_borrar = GestorConsultas.consulta_signos(id_usuario, id_medicion) if check_user(message, id_usuario): #si no tiene signos if not signo_borrar: return bot.reply_to( message, f"\U0001F928 *{message.from_user.first_name}*, " f"No has regitrado signos con el id: {id_medicion}\n\n" "Verifica e intenta nuevamente, puedes usar el comando:\n\n" "*consultar signos|cs {Fecha inicial (dd-mm-aaaa)} {Fecha Final (dd-mm-aaaa)}* - para consultar sus signos registrados", parse_mode="Markdown") #si el signo ya tiene una observacion observacion = GestorConsultas.get_signo_observacion(id_medicion) if observacion: return bot.reply_to( message, f"\U0001F6AB No puedes eliminar esta medición porque tiene una observación: *\U0000203C {observacion.observacion} \U0000203C*", parse_mode="Markdown") #Mostar Signo a Eliminar y solicitar confimacion de eliminacion bot.send_message( message.chat.id, GestorConversacion.get_signo_eliminar( message.chat.first_name + " " + message.chat.last_name, signo_borrar.id, signo_borrar.pas, signo_borrar.pad, signo_borrar.fc, signo_borrar.peso, signo_borrar.fecha_toma, signo_borrar.fecha_registro), parse_mode="Markdown") #Recibir confirmacion de elminiacion y ejecutar la acción bot.register_next_step_handler(message, GestorMediciones.step_2_eliminar_signos, signo_borrar.id)