Slack desde la línea de comandos
Cómo copiar los mensajes de slack e interaccionar desde la línea de comandos
Desde hace algún tiempo algunas entidades utilizan slack para diversas tareas. A mí me parece una especie de servidor de irc gráfico, capado, comercial y poco útil, pero como en tantas otras situaciones donde una tecnología parece más fea, difícil de usar y antigua, surgen aplicaciones vendehumo que con las mismas o parecidas funcionalidades –normalmente más capadas que las originales–, conectadas con otras tantas aplicaciones vendehumo –por lo cual parece que son capaces de interconectarse con cualquiera– tienen un logo y una estética –lo que algunxs asociarán también al UX– atractiva y además puedes poner emoticonos y subir emoticonos… En resumen, un caramelo en la puerta de un colegio de esos que mi madre y mi padre me decían que no aceptara.
Sea como fuere llegamos a Slack y una de las cosas que tiene es el constante aviso de que tienes un límite de mensajes que puedes ver en el plan gratuito y que te actualices si quieres ver los demás.
Lejos de querer hacerme abonado de Slack he buscado una forma de guardarme los mensajes, una copia de lo que envío. Esto no es fácil en la mayoría de las soluciones vendehumo y tampoco en esta. Si eres administrador de la misma puedes hacer una copia pero resulta que no lo soy de varias en las que participo por lo que preguntamos aquí y allá y buscamos un poco.
Hay unos cuantos proyectos, que listo a continuación.
- slacker, librería de Python
- slack-history-export, librería de nodejs
- slackchannel2pdf, librería de Python.
- slack-cli, librería de Python.
Slack: retrieve all messages
Encuentro en stackoverflow esta solución y adelanto que es la que uso. Se trata de un script en Python que usa slacker
para bajarse los mensajes que llamaremos igualmente slack-history.py
. Los guarda en json
.
This Python script exports everything to JSON by a simple run: https://gist.github.com/Chandler/fb7a070f52883849de35
Crea directorios y tienes la opción de excluir mensajes directos o canales.
Para correrlo:
|
|
- De la primera forma te bajas todo.
- En la segunda no te bajas los canales.
- En la tercera no te bajas los mensajes directos.
- Y en la cuarta ni los mensajes directos ni los canales privados.
- En la quinta te bajas solo el canal especificado.
Además, enlaza directamente la URL donde pedir el legacy token que siempre es un engorro encontrar.
slacker
Como hemos dicho, una librería de Python para trabajar con la API de Slack.
La forma más fácil de instalarlo es a través de pip
:
|
|
Ejemplos de uso que no he usado:
|
|
slack-history-export
Este paquete de node.js promete descargar histórico de la conversación con unx usuarix o un canal pero no lo he conseguido por más que he puesto el nombre, el nombre entre comilla, el id de slack…
Si alguien ha experimentado/usado este comando y me dice algo se lo agradezco.
Para instalarlo:
|
|
La opción -g
es por si quieres hacerlo de uso global, si no no es necesaria.
Luego, una vez que obtengas el token, dicen de usarse así:
|
|
La opción -u
responde a usuario, -g
a canal.
slackchannel2pdf
¿Perdona? Me pareció un tanto extraño al principio pero, claro, un json no es lo más fácil de leer por una persona humana así que probemos esto de slackchannel2pdf:
Instalamos desde pip
:
|
|
Pues sí, mola muuuucho. Lo único que no soporta mensajes directos :-/
Puedes poner un pdf por canal o ponerlos todos en la misma consulta:
|
|
También puedes seleccionar fechas con --oldest
o --latest
:
|
|
Entre otras opciones, si echas de menos el json
también lo puedes pedir con la opción --write-raw-data
.
Sus opciones de impresión son lo más:
-d DESTINATION, --destination DESTINATION
Specify a destination path to store the PDF file.
(TBD) (default: .)
--page-orientation {portrait,landscape}
Orientation of PDF pages (default: portrait)
--page-format {a3,a4,a5,letter,legal}
Format of PDF pages (default: a4)
--timezone TIMEZONE Manually set the timezone to be used e.g.
'Europe/Berlin' Use a timezone name as defined here: h
ttps://en.wikipedia.org/wiki/List_of_tz_database_time_
zones (default: None)
--locale LOCALE Manually set the locale to be used with a IETF
language tag, e.g. ' de-DE' for Germany. See this page
for a list of valid tags:
https://en.wikipedia.org/wiki/IETF_language_tag
(default: None)
slack-cli
Y como extra slack-cli, otra librería de Python. Tiene buena pinta para el día a día ya que permite usarlo como un comando en la API de bash, es decir, no solo puedes enviar mensajes o archivos a un canal o una persona sino que puedes enviar salidas de comandos o de archivos.
También se pueden descargar mensajes (dump) pero no parece que pueda hacerse de todos a la vez sino de uno en uno.