telegram 群组监控 / 群组功能
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

126 lines
4.4 KiB

8 months ago
  1. import json
  2. import traceback
  3. from flask import Flask, request
  4. from loguru import logger
  5. from tg_module.initial_group import run, _replay, _detail
  6. app = Flask(__name__)
  7. """
  8. pip install 'flask[async]': flask
  9. uwsgi -d --ini uwsgi.ini
  10. uwsgi --stop
  11. uwsgi --reload
  12. """
  13. @app.route("/join")
  14. async def index():
  15. """
  16. telegram_link: telegram链接 public群组
  17. :return:
  18. {"code": 200, "content": obj}
  19. {"code": 500, "content": error}/ {"code": 200, "content": ""}
  20. """
  21. state_203 = "You have successfully requested to join this chat or channel"
  22. try:
  23. telegram_link = request.args.get('telegram_link')
  24. if telegram_link and "https://t.me/" in telegram_link:
  25. i = telegram_link.strip()
  26. split_list = i.split("/")
  27. is_private = False
  28. if len(split_list) > 4 and split_list[-2] == "joinchat": # 切换为私密群添加方式
  29. is_private = True
  30. channel = split_list[-1]
  31. logger.info(f"获得当前群链接:{i}, 获得当前channel:{channel}")
  32. res = await run(telegram_link, channel, is_private=is_private)
  33. if isinstance(res, dict):
  34. ret = {"code": 200, "content": res}
  35. elif state_203 in res:
  36. ret = {"code": 203, "content": state_203}
  37. else:
  38. ret = {"code": 500, "content": res}
  39. else:
  40. ret = {"code": 500, "content": "telegram_link error"}
  41. except Exception as e:
  42. traceback.print_exc()
  43. logger.error(f"server error: {e}")
  44. ret = {"code": 500, "content": str(e)}
  45. logger.info(ret)
  46. return json.dumps(ret, ensure_ascii=False)
  47. @app.route("/replay", methods=["POST"])
  48. async def replay():
  49. """
  50. :return:
  51. """
  52. try:
  53. data = request.get_data()
  54. json_data = json.loads(data)
  55. telegram_link = json_data.get("telegram_link")
  56. messages = json_data.get("messages")
  57. # messages = {
  58. # "message": "",
  59. # "media_type": "", # photos/videos/plain/docs
  60. # "media_link": ""
  61. # }
  62. # telegram_link = "https://t.me/xeqm3333"
  63. if telegram_link and "https://t.me/" in telegram_link:
  64. i = telegram_link.strip()
  65. split_list = i.split("/")
  66. if len(split_list) > 4 and split_list[-2] == "joinchat": # TODO: 私密群暂时不支持
  67. ret = {"code": 500, "content": "私密群暂时不支持"}
  68. else:
  69. channel = split_list[-1]
  70. logger.info(f"获得当前群链接:{i}, 获得当前channel:{channel}")
  71. status = await _replay(telegram_link, channel, messages)
  72. if status["send_message_status"] == "发送成功":
  73. ret = {"code": 200, "content": status}
  74. else:
  75. ret = {"code": 400, "content": status}
  76. else:
  77. ret = {"code": 500, "content": "telegram_link error"}
  78. except Exception as e:
  79. traceback.print_exc()
  80. logger.error(f"server error: {e}")
  81. ret = {"code": 500, "content": str(e)}
  82. logger.info(ret)
  83. return json.dumps(ret, ensure_ascii=False)
  84. @app.route("/detail")
  85. async def get_detail():
  86. """
  87. :return:
  88. """
  89. try:
  90. telegram_link = request.args.get('telegram_link')
  91. if telegram_link and "https://t.me/" in telegram_link:
  92. i = telegram_link.strip()
  93. split_list = i.split("/")
  94. if len(split_list) > 4 and split_list[-2] == "joinchat": # TODO: 私密群暂时不支持
  95. ret = {"code": 500, "content": "私密群暂时不支持"}
  96. else:
  97. channel = split_list[-1]
  98. logger.info(f"获得当前群链接:{i}, 获得当前channel:{channel}")
  99. group_detail = await _detail(channel, file="tg_module/profile")
  100. ret = {"code": 200, "content": group_detail}
  101. else:
  102. ret = {"code": 500, "content": "telegram_link error"}
  103. except Exception as e:
  104. traceback.print_exc()
  105. logger.error(f"server error: {e}")
  106. ret = {"code": 500, "content": str(e)}
  107. logger.info(ret)
  108. return json.dumps(ret, ensure_ascii=False)
  109. if __name__ == '__main__':
  110. app.run(host='0.0.0.0', port=8080)