changsha_bot.py 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. """
  2. 独立执行,每个人执行一次,单日总量到达 300 即执行一次
  3. """
  4. import json
  5. import datetime
  6. import time
  7. import schedule
  8. import requests
  9. from common.db import RedisClient
  10. def bot(name):
  11. """
  12. 报警机器人
  13. """
  14. id_dict = {
  15. "余海涛": "ou_b87d153e200a04de3d82b1b9276e8f90",
  16. "范军": "ou_fce9cfef186e260e70554b47fee70a34",
  17. "罗情": "ou_88139cd84c2d105c2e1d699c14ec3375",
  18. "鲁涛": "ou_7986cccb78e6c981db8d0eef93443d05",
  19. "王雪珂": "ou_2233fb8e1302314bae166fcfa144151f",
  20. "邓锋": "ou_379d37645f929e1e6553a75aecda42a2"
  21. }
  22. url = "https://open.feishu.cn/open-apis/bot/v2/hook/df47bb77-ecaa-4628-b076-aae776415ae8"
  23. headers = {"Content-Type": "application/json"}
  24. payload = {
  25. "msg_type": "interactive",
  26. "card": {
  27. "elements": [
  28. {
  29. "tag": "div",
  30. "text": {
  31. "content": "抓取数量触发限量通知, <at id={}></at>, <at id={}></at>, <at id={}></at>\n".format(
  32. id_dict[name], id_dict["邓锋"], id_dict["王雪珂"]
  33. ),
  34. "tag": "lark_md",
  35. },
  36. },
  37. {
  38. "tag": "div",
  39. "text": {
  40. "content": "当天已经入库 300 条视频",
  41. "tag": "lark_md",
  42. },
  43. },
  44. ],
  45. "header": {"title": {"content": "【 通知 】", "tag": "plain_text"}},
  46. },
  47. }
  48. requests.post(url, headers=headers, data=json.dumps(payload))
  49. def monitor():
  50. """
  51. 监测 redis 中数据
  52. """
  53. counts_info = {
  54. "罗情": True,
  55. "余海涛": True,
  56. "范军": True,
  57. "鲁涛": True
  58. }
  59. keys = {"352": "余海涛", "353": "罗情", "53": "范军", "51": "鲁涛"}
  60. now = datetime.datetime.now().time()
  61. start_alert_time = datetime.time(10)
  62. end_alert_time = datetime.time(20, 30)
  63. while True:
  64. if start_alert_time <= now <= end_alert_time:
  65. try:
  66. R = RedisClient()
  67. if R.connect():
  68. for key in keys:
  69. count = R.select(key)
  70. if count:
  71. OO = int(count.decode("utf-8"))
  72. name = keys[key]
  73. if OO >= 300 and counts_info[name]:
  74. bot(name)
  75. counts_info[name] = False
  76. except Exception as e:
  77. pass
  78. # 查询一次之后等待 60 s
  79. time.sleep(60)
  80. if __name__ == '__main__':
  81. schedule.every().day.at("08:00").do(monitor)
  82. while True:
  83. schedule.run_pending()
  84. time.sleep(60)