auto_follower_webhook.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #!/usr/bin/env python3
  2. # This is an example of a snac webhook that automatically follows all new followers.
  3. # To use it, set the variables snac_basedir and snac_user to something reasonable,
  4. # configure the user webhook to be http://localhost:12345, and run this program.
  5. # copyright (C) 2025 grunfink et al. / MIT license
  6. from http.server import BaseHTTPRequestHandler, HTTPServer
  7. import time
  8. import json
  9. import os
  10. host_name = "localhost"
  11. server_port = 12345
  12. snac_basedir = "/var/snac/example_instance"
  13. snac_user = "example_user"
  14. class SnacAutoResponderServer(BaseHTTPRequestHandler):
  15. def do_POST(self):
  16. self.send_response(200)
  17. self.end_headers()
  18. content_type = self.headers["content-type"]
  19. content_length = int(self.headers["content-length"])
  20. payload = self.rfile.read(content_length).decode("utf-8")
  21. if content_type == "application/json":
  22. try:
  23. noti = json.loads(payload)
  24. type = noti["type"]
  25. if type == "Follow":
  26. actor = noti["actor"]
  27. cmd = "snac follow %s %s %s" % (snac_basedir, snac_user, actor)
  28. os.system(cmd)
  29. except:
  30. print("Error parsing notification")
  31. if __name__ == "__main__":
  32. webServer = HTTPServer((host_name, server_port), SnacAutoResponderServer)
  33. print("Webhook started http://%s:%s" % (host_name, server_port))
  34. try:
  35. webServer.serve_forever()
  36. except KeyboardInterrupt:
  37. pass
  38. webServer.server_close()
  39. print("Webhook stopped.")