izuemon commited on
Commit
768c682
·
verified ·
1 Parent(s): 0034130

Create dmsender.py

Browse files
Files changed (1) hide show
  1. dmsender.py +112 -0
dmsender.py ADDED
@@ -0,0 +1,112 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import time
2
+ import requests
3
+ import os
4
+
5
+ BASE_URL = "https://desk-api.channel.io/desk/channels/200605"
6
+ TARGET_FORWARD_CHAT_ID = "463667"
7
+
8
+ HEADERS = {
9
+ "Content-Type": "application/json",
10
+ "x-account": "Bearer " + os.getenv("dmsendertoken")
11
+ }
12
+
13
+ SEND_BODY_TEMPLATE = {
14
+ "requestId": "desk-web-1768737053326fv6n",
15
+ "blocks": [
16
+ {
17
+ "type": "text",
18
+ "value": "送信しました"
19
+ }
20
+ ],
21
+ "buttons": None,
22
+ "form": None,
23
+ "webPage": None,
24
+ "files": None,
25
+ "customPayload": None
26
+ }
27
+
28
+ FORWARD_BODY_TEMPLATE = {
29
+ "requestId": "desk-web-1768736747518jhqp",
30
+ "blocks": None,
31
+ "buttons": None,
32
+ "form": None,
33
+ "webPage": None,
34
+ "files": None,
35
+ "customPayload": None
36
+ }
37
+
38
+
39
+ def get_direct_chats():
40
+ url = f"{BASE_URL}/direct-chats?limit=1200"
41
+ r = requests.get(url, headers=HEADERS)
42
+ r.raise_for_status()
43
+ return r.json()
44
+
45
+
46
+ def post_message(chat_id, body):
47
+ url = f"{BASE_URL}/direct-chats/{chat_id}/messages"
48
+ r = requests.post(url, headers=HEADERS, json=body)
49
+ r.raise_for_status()
50
+ return r.json()
51
+
52
+
53
+ def get_messages(chat_id):
54
+ url = (
55
+ f"{BASE_URL}/direct-chats/{chat_id}/messages"
56
+ "?sortOrder=desc&limit=36&logFolded=false"
57
+ )
58
+ r = requests.get(url, headers=HEADERS)
59
+ r.raise_for_status()
60
+ return r.json()
61
+
62
+
63
+ def find_latest_message(messages):
64
+ """
65
+ messages 配列の中から updatedAt が最大の message を返す
66
+ """
67
+ return max(messages, key=lambda m: m.get("updatedAt", 0))
68
+
69
+
70
+ def main_loop():
71
+ while True:
72
+ try:
73
+ data = get_direct_chats()
74
+ sessions = data.get("sessions", [])
75
+
76
+ for session in sessions:
77
+ unread = session.get("unread", 0)
78
+ if unread >= 1:
79
+ chat_id = session.get("chatId")
80
+ if not chat_id:
81
+ continue
82
+
83
+ # ① unread があるチャットに「送信しました」を送信
84
+ post_message(chat_id, SEND_BODY_TEMPLATE)
85
+
86
+ # ② そのチャットの messages を取得
87
+ msg_data = get_messages(chat_id)
88
+ messages = msg_data.get("messages", [])
89
+ if not messages:
90
+ continue
91
+
92
+ # ③ updatedAt が最大の message を取得
93
+ latest = find_latest_message(messages)
94
+ blocks = latest.get("blocks")
95
+ files = latest.get("files")
96
+
97
+ # ④ 固定チャットID(463667)へ転送
98
+ forward_body = FORWARD_BODY_TEMPLATE.copy()
99
+ forward_body["blocks"] = blocks
100
+ forward_body["files"] = files if files else None
101
+
102
+ post_message(TARGET_FORWARD_CHAT_ID, forward_body)
103
+
104
+ except Exception as e:
105
+ print("Error:", e)
106
+
107
+ # 5秒待機
108
+ time.sleep(5)
109
+
110
+
111
+ if __name__ == "__main__":
112
+ main_loop()