comcomUBA / dcubabot

MIT License
21 stars 27 forks source link

Agregar comandos con teléfonos y horarios #11

Open dgarroDC opened 5 years ago

dsocolobsky commented 5 years ago

Comando /exinfoteca

Si buscan en el buscador de Telegram van a encontrar una gran cantidad de mensajes con el mismo contenido "Donde esta la ex-infoteca?" Propongo crear el comando"/exinfoteca" que devuelva una breve descripción de donde se encuentra, o mejor, una foto (hay algunas si buscan en el grupo de Computación).

rozen03 commented 5 years ago

Comando /exinfoteca

Si buscan en el buscador de Telegram van a encontrar una gran cantidad de mensajes con el mismo contenido "Donde esta la ex-infoteca?" Propongo crear el comando"/exinfoteca" que devuelva una breve descripción de donde se encuentra, o mejor, una foto (hay algunas si buscan en el grupo de Computación).

No sería mas amplio y menos sucio un comando que sea /donde y que mas o menos intente buscar lo que se paresca al argumento?

dsocolobsky commented 5 years ago

Comando /exinfoteca Si buscan en el buscador de Telegram van a encontrar una gran cantidad de mensajes con el mismo contenido "Donde esta la ex-infoteca?" Propongo crear el comando"/exinfoteca" que devuelva una breve descripción de donde se encuentra, o mejor, una foto (hay algunas si buscan en el grupo de Computación).

No sería mas amplio y menos sucio un comando que sea /donde y que mas o menos intente buscar lo que se paresca al argumento?

Hay tantos lugares que la gente no suela encontrar? Si hay mas de dos o tres supongo que si, se podría hacer eso.

La idea del comando es mas que "Usuario1" pregunte "Che adonde esta la ex-infoteca?" y "Usuario2" que ya sabe del comando en vez de tener que explicarlo y/o buscar la foto simplemenet ponga "/donde exinfoteca" o el comando que sea y salga.

Oppen commented 4 years ago

/donde vacío puede retornar la lista de lugares que sabe encontrar. /donde <lugar> pregunta dónde queda. /donde <lugar> <ubicación> guarda en qué <ubicación> queda <lugar>. Cierra? Seguramente el último comando requiera o bien que lo haga un admin o bien que pase por una autorización de admin. No sé bien si se puede hacer lo último.

Oppen commented 4 years ago

El flujo sería así:

  1. Usuario U no sabe cómo preguntar por "infoteca".
  2. U llama a /donde.
  3. U mira la respuesta y ve que el bot conoce "infoteca".
  4. U sabe cómo preguntar por "infoteca". Llama /donde infoteca.
  5. El bot responde la ubicación de "infoteca".

Son varios pasos pero es exacto y creo que es bastante fácil.

Oppen commented 4 years ago

Ver si hay un nombre más general para incluir teléfonos y todo eso. Tal vez /lugares.

araml commented 4 years ago

Agrege un PR donde en vez de escribir un comando + lugar (que me parece muy error prone), muestra una lista de botones con los posibles lugares y al clickear un boton el bot manda el texto guardado con la locacion/telefono/lo que sea. (Para enviar el texto se usa la misma idea que para sugerir grupos etc sugerirdonde nombre lugar|texto).
@rozen03 @dsocolobsky @dgarroDC @Oppen diganme que opinan.

Oppen commented 4 years ago

A futuro si queremos ser bien fifi podemos hacer que pase un contacto, no? El PR se ve bien para mí.

rozen03 commented 4 years ago

Está testeado? La botonera de donde que hace? No me queda claro que se haya programado comportamiento para los botones de donde

Oppen commented 4 years ago

Verdad. Te habrás comido de commitear un archivo?

araml commented 4 years ago

No, la respuesta está aca https://github.com/rozen03/dcubabot/pull/30/commits/32a0870d4fe19df0454ff9bede0bf420717d4f96#diff-f7290e35defc8eea5aab55a6478f6748R328

y los botones los genera con https://github.com/rozen03/dcubabot/commit/32a0870d4fe19df0454ff9bede0bf420717d4f96#diff-f7290e35defc8eea5aab55a6478f6748R420

La botonera lo unico que hace es escupir el texto en el chat donde se clickeo el boton.

A futuro si queremos ser bien fifi podemos hacer que pase un contacto, no? El PR se ve bien para mí.

Un contacto de tg o decis el texto de un telefono/mail? Lo segundo es posible ahora, lo primero ni idea como se haría para fwdear un contacto.

rozen03 commented 4 years ago

Disculpá me comi esa linea, perfecto entonces, me gusta. Falta ver si se puede hacer q se borre si se mandan sucesivos mensajes

araml commented 4 years ago

Estuve viendo el tema de borrar mensajes, tendria que funcionar para cualquier canal? Si es asi hay que trackear todos los chats en donde usaron el comando /Donde, ya que si solo se guarda el ultimo msg id podes borrar el texto en otros canales, por ej alguien que se fijo por privado.

dgarroDC commented 4 years ago

Tendría que revisarlo mejor quizás, pero no se borran ya los mensajes? Veo que los mensajes enviados los agregás en context.sent_messages, así que ya debería manejarlo bien el https://github.com/rozen03/dcubabot/blob/master/deletablecommandhandler.py (que ya tiene en cuenta lo de los chats en donde se usa el comando).

araml commented 4 years ago

Quien llama a eso? Por lo menos en lo que probé yo si spameas click a los botones no se borran los mensajes anteriores.

dgarroDC commented 4 years ago

Ah tenés razón, estaba viendo el mensaje con la lista de botones en vez del mensaje que manda cuando los tocás. Así que ese handler no sé si nos va a servir, habrá que pensar otra cosa. 🤔

araml commented 4 years ago

Pero se puede reusar o hay que implementarlo de 0? Habría que trackear en la db todos los chats en los que se uso el comando y limpiar la db constantemente.

dgarroDC commented 4 years ago

A ver, lo que se me ocurre es que podríamos extraer esto a una función que este fuera del DeletableCommandHandler y la puedas llamar desde acá. La función tomaría 3 parámetros:

La función se encargaría de borrar los mensajes con el origen y chat especificado (por ejemplo, "respuestas al comando /estasvivo en el chat 1" o "respuestas al tocar un botón de /donde en el chat 2"), además de tener como responsabilidad guardar en la base los nuevos mensajes enviados para ese origen y chat para que sean borrados la próxima vez.

En el caso de DeletableCommandHandler mandarías el nombre del comando como origen (self.command[0]), update.effective_chat.id como chat_id y context.sent_messages como messages.

En el caso de acá mandarías algo como /donde button reply en origen (o alguna otra cosa que quieras usar para identificarlo), message.chat_id como chat_id y para messages una lista cuyo único elemento es el mensaje enviado.

Una sutileza es que origen se correspondería con el campo command de SentMessage, con lo cual sería más prolijo renombrar ese campo a origen también, te parece @rozen03? Si es muy complicado lo dejamos como command y ya fue, tampoco es para tanto, igual tampoco me convence tanto el nombre origen.

Con eso creo que estaría cubierto todo. También se me ocurren otras alternativas a no enviar un mensaje como respuesta a los botones, si es que te gusta más: