Files
autoficher/requirements.txt
omar 5ba5710db2 feat: daemon con bot de Telegram, killswitch y servicio systemd
Pasa de un cron ciego a un servicio en segundo plano. El killswitch lo exige:
para poder cancelar un fichaje pendiente desde el movil tiene que haber un
proceso escuchando durante la espera.

- daemon: bucle propio que duerme exactamente hasta el siguiente evento, con
  precision de decimas. No usa JobQueue de PTB porque APScheduler 3.6 importa
  pkg_resources, que ya no existe en Python 3.13; ademas asi no se añade una
  dependencia. Recupera fichajes perdidos si el equipo estuvo apagado.
- bot: /hoy /saldo /plan /fichar /desfichar /off /on /pausa /reanudar /log.
  Los comandos se registran con setMyCommands para que salgan en el menu del
  chat. Solo atiende al chat_id configurado.
- killswitch: aviso 12 min antes con teclado inline (cancelar / +15 min /
  fichar ya).
- Google Calendar queda solo para ausencias personales; festivos y vacaciones
  salen del calendario de Timenet.
- deploy/autoficher.service: unidad de usuario endurecida (ProtectSystem
  strict, escritura solo en el propio directorio), Restart=always.
- requirements: python-telegram-bot >= 22. La 20.5 tiene un bug de __slots__
  en Updater que rompe el polling en Python 3.13.
- .gitignore: data/, *.db, .env, __pycache__ en cualquier nivel.

tools/test_daemon.py cubre con reloj simulado y sin red: plan, aviso previo,
fichaje a su hora, killswitch, retraso de 15 min, pausa, recuperacion tras
apagon, fallo de red y dia no laborable. 19 comprobaciones.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-24 18:51:46 +02:00

71 lines
1.3 KiB
Plaintext

anyio==3.7.1
APScheduler==3.6.3
attrs==20.3.0
cached-property==1.5.2
cachetools==4.2.2
certifi==2020.6.20
cffi
chardet==4.0.0
charset-normalizer==3.4.3
cryptography==41.0.5
decorator==4.4.2
dnspython==2.0.0
docker==4.1.0
docker-compose==1.25.0
dockerpty==0.4.1
docopt==0.6.2
exceptiongroup==1.1.2
ffmpeg-python==0.2.0
future==0.18.3
google-api-core==2.12.0
google-api-python-client==2.102.0
google-auth==2.23.2
google-auth-httplib2==0.1.1
google-auth-oauthlib==1.1.0
googleapis-common-protos==1.60.0
h11==0.14.0
httpcore==0.17.3
httplib2==0.22.0
httpx==0.24.1
idna==2.10
imageio==2.31.1
imageio-ffmpeg==0.4.8
importlib-metadata==1.6.0
jsonschema==3.2.0
more-itertools==4.2.0
moviepy==1.0.3
numpy
oauthlib==3.2.2
paho-mqtt==1.6.1
pandas==2.3.3
Pillow
proglog==0.1.10
prompt-toolkit==3.0.39
protobuf==4.24.4
pyasn1==0.5.0
pyasn1-modules==0.3.0
pycparser==2.21
pyparsing==3.1.1
pyrsistent==0.15.5
python-crontab==3.0.0
python-dateutil==2.8.2
python-telegram-bot>=22.0 # <22 rompe en Python 3.13 (__slots__ en Updater)
pytz
PyYAML
requests==2.32.3
requests-oauthlib==1.3.1
rsa==4.9
six==1.16.0
sniffio==1.3.0
speedtest-cli==2.1.3
texttable==1.6.3
tornado==6.1
tqdm==4.65.0
tzdata==2025.2
tzlocal==5.0.1
uritemplate==4.1.1
urllib3==1.26.5
wcwidth==0.2.8
websocket-client==0.57.0
zipp==1.0.0