2020-11-26 01:59:50 +01:00
from datetime import datetime
2020-10-27 14:37:00 +01:00
from telethon import TelegramClient , events
2020-10-27 14:53:44 +01:00
from telethon . sessions import StringSession
2020-10-31 14:20:46 +01:00
2020-11-17 14:16:44 +01:00
from app . notifier import send_mail
from constants import API_HASH , API_ID , BOT_TOKEN , EXAMPLE , SESSION
2020-11-26 01:59:50 +01:00
from database . crud import *
2020-10-27 01:05:56 +01:00
2020-10-27 14:53:44 +01:00
bot = TelegramClient ( StringSession ( SESSION ) , API_ID , API_HASH ) . start (
bot_token = BOT_TOKEN
)
2020-10-27 01:05:56 +01:00
2020-10-27 14:37:00 +01:00
@bot.on ( events . NewMessage ( pattern = " /start " ) )
2020-11-26 01:59:50 +01:00
async def conversation ( event ) :
entity = event . sender_id
async with bot . conversation ( entity = entity ) as conv :
await conv . send_message (
" Hola, muy buenas. Gracias por ponerte en contacto con UGR Tracing Bot. Para poder continuar con el proceso por favor responda a este mensaje con un identificador único (DNI o correo institucional). Muchas gracias. "
)
unique_id = await conv . get_response ( )
user = search_database ( id = unique_id . text . lower ( ) )
send_mail ( recipient = user . correo_institucional )
await event . respond (
" El usuario se ha identificado con éxito. Se ha mandado una clave alfanumérica a su correo institucional. Por favor envíe la clave para continuar con el proceso. "
)
verification_code = await conv . get_response ( )
valid_code = verify_code (
id = user . numero_de_documento , code = verification_code . text
)
if not valid_code :
await event . respond ( " La clave que indica no es correcta " )
conv . cancel ( )
await event . respond (
f """ Hola { user . nombre } . Por favor seleccione su tipo de vivienda:
1. Familiar
2. Piso compartido
3. Piso individual
4. Residencia de estudiantes o Colegio Mayor
5. Otra
"""
)
accomodation_type = await conv . get_response ( )
save_attribute (
id = user . numero_de_documento ,
attribute = " tipo_alojamiento " ,
data = accomodation_type . text ,
)
await event . respond (
""" Por favor seleccione su tipo de caso COVID-19:
1. Confirmado
2. Contacto estrecho
3. Sospechoso
"""
)
case_type = await conv . get_response ( )
save_attribute (
id = user . numero_de_documento ,
attribute = " tipo_caso " ,
data = case_type . text ,
)
await event . respond ( " ¿Tiene síntomas compatibles con el COVID-19? " )
symptoms = await conv . get_response ( )
parsed_symptoms = parse_boolean_string ( value = symptoms . text . lower ( ) )
save_attribute (
id = user . numero_de_documento ,
attribute = " sintomas " ,
data = parsed_symptoms ,
)
await event . respond ( " Indique la fecha de inicio del aislamiento. " )
quarantine_start = await conv . get_response ( )
save_attribute (
id = user . numero_de_documento ,
attribute = " comienzo_aislamiento " ,
data = datetime . strptime ( quarantine_start . text , " %d / % m/ % Y " ) ,
)
await event . respond ( " Indique la fecha de fin del aislamiento. " )
quarantine_end = await conv . get_response ( )
save_attribute (
id = user . numero_de_documento ,
attribute = " fin_aislamiento " ,
data = datetime . strptime ( quarantine_end . text , " %d / % m/ % Y " ) ,
)
await event . respond (
f """ Por favor confirme que los siguientes datos son correctos:
1. Nombre : { user . nombre }
2. Apellidos : { user . primer_apellido } { user . segundo_apellido }
3. Documento identificativo : { user . numero_de_documento }
4. Tipo de domicilio : { user . tipo_alojamiento }
5. Tipo de caso COVID - 19 : { user . tipo_caso }
6. Síntomas COVID - 19 : { boolean_to_string ( user . sintomas ) }
7. Periodo de aislamiento : { user . comienzo_aislamiento } - { user . fin_aislamiento }
"""
)
confirmation = await conv . get_response ( )
parsed_confirmation = parse_boolean_string ( confirmation . text . lower ( ) )
if not parsed_confirmation :
await event . respond ( " Un saludo " )
conv . cancel ( )
await event . respond (
" Su caso ha sido comunicado correctamente. Muchas gracias por utilizar UGR Tracing Bot. Le demasos una pronta recuperación "
)
2020-10-31 14:20:46 +01:00
2020-10-27 01:05:56 +01:00
if __name__ == " __main__ " :
2020-11-17 14:16:44 +01:00
create_database ( data = EXAMPLE )
2020-11-16 12:03:39 +01:00
bot . run_until_disconnected ( )