from telegram import Update from telegram.ext import ( ApplicationBuilder, ContextTypes, MessageHandler, CommandHandler, filters ) from datetime import datetime import json #from BD_manager import inserir_acompanhamento, buscar_ultimo_chat, atualizar_acompanhamento, inserir_evento, listar_agenda from BD_manager_Mysql import inserir_acompanhamento, buscar_ultimo_chat, atualizar_acompanhamento, inserir_evento, listar_agenda, atualizar_agenda TOKEN = "8402367863:AAGoEBHvoK7YRdTLXCBqaZ-PVQlFp_1V3zI" #TOKEN = st.secrets["api"]["token"] #Funções de fluxo def MostrarPeriodos(chat_id, name, status): # if(status == "10" or status == "null"): inserir_acompanhamento(chat_id, "2", name) else: atualizar_acompanhamento(chat_id, "status", "2") resposta = f"Qual periodo você gostaria de agendar ?\n1-Manhã\n2-Tarde\n3-Noite" return resposta def MostrarHorarios(texto_recebido, chat_id): print("Entrou na função de consultar os horarios") z = "" try: if(texto_recebido == "1"): horarios = listar_agenda("periodo","manhã") resposta = horarios for horario in horarios: z = z + str(horario['id'])+" - "+horario['data'].strftime("%d/%m/%Y")+" as "+str(horario['horario'])+"\n" resposta = f"Qual horario você gostaria de agendar ?\n"+z+"\n0 - Voltar" atualizar_acompanhamento(chat_id, "status", "3") return resposta elif(texto_recebido == "2"): horarios = listar_agenda("periodo","tarde") resposta = horarios for horario in horarios: z = z + str(horario['id'])+" - "+horario['data'].strftime("%d/%m/%Y")+" as "+str(horario['horario'])+"\n" resposta = f"Qual horario você gostaria de agendar ?\n"+z+"\n0 - Voltar" atualizar_acompanhamento(chat_id, "status", "3") return resposta elif(texto_recebido == "3"): horarios = listar_agenda("periodo","noite") resposta = horarios for horario in horarios: z = z + str(horario['id'])+" - "+horario['data'].strftime("%d/%m/%Y")+" as "+str(horario['horario'])+"\n" resposta = f"Qual horario você gostaria de agendar ?\n"+z+"\n0 - Voltar" atualizar_acompanhamento(chat_id, "status", "3") return resposta else: resposta = "Opção inválida, por favor digite um periodo válido\n1 - manhã\n2 - tarde\n3 - noite" return resposta except ValueError: resposta = f"Você não digitou uma opção válida" return resposta ############### # Comando /start async def start(update: Update, context: ContextTypes.DEFAULT_TYPE): await update.message.reply_text( "Olá! Eu sou um bot de agendamento da Malu.\nComo vai ?" ) # Recebe mensagens de texto async def receber_mensagem(update: Update, context: ContextTypes.DEFAULT_TYPE): texto_recebido = update.message.text chat_id = update.effective_chat.id name = update.effective_chat.full_name print(f"{chat_id=}, {name=}") print(f"{texto_recebido=}") try: status = buscar_ultimo_chat(chat_id)['status'] except: status = "null" print("Status: ", status) #Começo do atendimento (Fluxo iniciado) '''if(texto_recebido.lower() == "oi" or texto_recebido.lower() == "sim"): resposta = f"Olá! você gostaria de agendar um horário?\n Digite\n1-SIM\n2-NÃO" inserir_acompanhamento(chat_id, "1", name)''' if(texto_recebido == "2" and status == "10") : resposta = "Sem problemas, qualquer coisa estou aqui" print("ChatID: ", chat_id) print("Status: ", status) print("Status type: ", type(status)) #Mostrar periodos Manhã, tarde e Noite elif(texto_recebido == "1" and status == "10" or texto_recebido == "1" and status == "null") : print("Mostrar os periodos manhã, tarde e noite") resposta = MostrarPeriodos(chat_id, name, status) '''atualizar_acompanhamento(chat_id, "status", "2") resposta = f"Qual periodo você gostaria de agendar ?\n1-Manhã\n2-Tarde\n3-Noite"''' ##mostrar horarios elif(status == "2") : print("mostrar os horarios disponiveis") resposta = MostrarHorarios(texto_recebido, chat_id) #Seleção dos horarios disponiveis elif(texto_recebido != "0" and status == "3") : try: #converter data id = texto_recebido data_horario_agenda = listar_agenda("id",id) print("Data Agenda: ",data_horario_agenda) print("Data agenda data: ",data_horario_agenda[0]['data']) #sqlite #data_convertida = datetime.strptime(data_horario_agenda[0]['data'], "%d/%m/%Y").strftime("%Y-%m-%d") #mysql data_convertida = data_horario_agenda[0]['data'].strftime("%Y-%m-%d") datetime.strptime(data_convertida, "%Y-%m-%d") atualizar_acompanhamento(chat_id, "data_event", data_convertida) atualizar_acompanhamento(chat_id, "time_event", data_horario_agenda[0]['horario']) atualizar_acompanhamento(chat_id, "status", "4") #atualizar a disponibilidade da agenda para não aparecer depois da data ser agendada atualizar_agenda(int(texto_recebido), "disponibilidade", "'nao'") resposta = f"Você gostaria de adicionar algum comentários ?\n1 - Sim\n2 -Não" except ValueError: resposta = f"A data que você digitou não está no formato correto.\nDigite a data no seguinte formato dd/mm/yyyy" except IndexError: resposta = "Nenhum evento encontrado para esse ID, por favor, selecione uma das datas que lhe enviei." #Adicionar comentário caso a resposta seja sim para adicionar elif(texto_recebido == "1" and status == "4"): atualizar_acompanhamento(chat_id, "status", "5") resposta = "Por favor, escreva o seu comentário" #Capturando a mensagem para ser inserida no banco elif(status == "5"): atualizar_acompanhamento(chat_id, "status", "10") data_agendada = buscar_ultimo_chat(chat_id)["data_event"] #data_agendada = datetime.strptime(data_agendada, "%Y-%m-%d") data_agendada_formatada = data_agendada.strftime("%d/%m/%Y") horario_agendado = buscar_ultimo_chat(chat_id)["time_event"] inserir_evento(buscar_ultimo_chat(chat_id)["data_event"],buscar_ultimo_chat(chat_id)["time_event"],"00:30:00","Padão Titulo",texto_recebido,chat_id,name,"Telegram") resposta = f"Então agendamos para {data_agendada_formatada} as {horario_agendado} !\nObrigado !" #Caso a resposta de inserir uma mensagem seja "Não" elif(texto_recebido == "2" and status == "4"): atualizar_acompanhamento(chat_id, "status", "10") data_agendada = buscar_ultimo_chat(chat_id)["data_event"] #data_agendada = datetime.strptime(data_agendada, "%Y-%m-%d") data_agendada_formatada = data_agendada.strftime("%d/%m/%Y") horario_agendado = buscar_ultimo_chat(chat_id)["time_event"] inserir_evento(buscar_ultimo_chat(chat_id)["data_event"],buscar_ultimo_chat(chat_id)["time_event"],"00:30:00","Padão Titulo",texto_recebido,chat_id,name,"Telegram") resposta = f"Então agendamos para {data_agendada_formatada} as {horario_agendado} !\nObrigado !" #voltar para priodo elif(texto_recebido == "0" and status == "3"): atualizar_acompanhamento(chat_id, "status", "2") resposta = MostrarPeriodos(chat_id, name, status) #Tratamento de mensagem inválida ao bot elif(texto_recebido.lower() == "quem é você?" or texto_recebido.lower() == "quem e você?"): resposta = f"Eu sou um Bot de agendamento!" #await update.message.reply_text(resposta) #resposta = f"Você escreveu: {texto_recebido}" elif(texto_recebido.lower() == "2" and status == "null" or texto_recebido.lower() == "2" and status == "10"): #elif(texto_recebido.lower() == "2" and buscar_ultimo_chat(chat_id)['status'] == "1"): resposta = f"Então tudo bem !\nSe precisar é só me chamar." else: resposta = f"Olá, você gostaria de agendar um horario ?\n1 - Sim\n2 - Não" await update.message.reply_text(resposta) def main(): app = ApplicationBuilder().token(TOKEN).build() # Comandos app.add_handler(CommandHandler("start", start)) # Mensagens de texto app.add_handler( MessageHandler(filters.TEXT & ~filters.COMMAND, receber_mensagem) ) print("Bot em execução...") app.run_polling() if __name__ == "__main__": main()