izuemon commited on
Commit
8565a6f
·
verified ·
1 Parent(s): b7ed8bb

Create ngwords.py

Browse files
Files changed (1) hide show
  1. ngwords.py +104 -0
ngwords.py ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import time
3
+ import json
4
+ import requests
5
+
6
+ # ===== 設定 =====
7
+ BASE_URL = "https://desk-api.channel.io/desk/channels/200605"
8
+ SOURCE_GROUP_ID = "536194"
9
+ DEST_GROUP_ID = "536281"
10
+
11
+ GET_MESSAGES_URL = f"{BASE_URL}/groups/{SOURCE_GROUP_ID}/messages"
12
+ POST_MESSAGE_URL = f"{BASE_URL}/groups/{DEST_GROUP_ID}/messages"
13
+ DELETE_MESSAGE_URL = f"{BASE_URL}/groups/{SOURCE_GROUP_ID}/messages"
14
+
15
+ HEADERS = {
16
+ "x-account": os.getenv("channeliotokenbot2"),
17
+ "Content-Type": "application/json"
18
+ }
19
+
20
+ PARAMS = {
21
+ "sortOrder": "desc",
22
+ "limit": 34,
23
+ "logFolded": "false"
24
+ }
25
+
26
+ NG_WORDS_FILE = "ngwords.txt"
27
+
28
+
29
+ # ===== NGワード読み込み =====
30
+ def load_ng_words():
31
+ with open(NG_WORDS_FILE, encoding="utf-8") as f:
32
+ return [line.strip() for line in f if line.strip()]
33
+
34
+
35
+ # ===== メッセージ取得 =====
36
+ def fetch_messages():
37
+ r = requests.get(GET_MESSAGES_URL, headers=HEADERS, params=PARAMS)
38
+ r.raise_for_status()
39
+ return r.json().get("messages", [])
40
+
41
+
42
+ # ===== メッセージ転送 =====
43
+ def forward_message(msg, index):
44
+ blocks = msg.get("blocks")
45
+ files = msg.get("blocks") if blocks else None
46
+
47
+ info_block = {
48
+ "type": "text",
49
+ "value": f"送信者:{msg.get('personId')}、送信エポックミリ秒:{msg.get('createdAt')}"
50
+ }
51
+
52
+ if blocks:
53
+ new_blocks = [info_block] + blocks
54
+ else:
55
+ new_blocks = [info_block]
56
+
57
+ body = {
58
+ "requestId": f"desk-web-{int(time.time() * 1000)}",
59
+ "blocks": new_blocks,
60
+ "buttons": None,
61
+ "form": None,
62
+ "webPage": None,
63
+ "files": files,
64
+ "customPayload": None
65
+ }
66
+
67
+ r = requests.post(POST_MESSAGE_URL, headers=HEADERS, json=body)
68
+ r.raise_for_status()
69
+
70
+
71
+ # ===== メッセージ削除 =====
72
+ def delete_message(message_id):
73
+ url = f"{DELETE_MESSAGE_URL}/{message_id}"
74
+ r = requests.delete(url, headers=HEADERS)
75
+ r.raise_for_status()
76
+
77
+
78
+ # ===== メインループ =====
79
+ def main():
80
+ ng_words = load_ng_words()
81
+ print("監視開始…")
82
+
83
+ while True:
84
+ try:
85
+ messages = fetch_messages()
86
+
87
+ for i, msg in enumerate(messages):
88
+ plain_text = msg.get("plainText", "")
89
+ message_id = msg.get("id")
90
+
91
+ if any(ng in plain_text for ng in ng_words):
92
+ print(f"NG検出(index={i}, id={message_id})")
93
+
94
+ forward_message(msg, i)
95
+ delete_message(message_id)
96
+
97
+ except Exception as e:
98
+ print("エラー:", e)
99
+
100
+ time.sleep(10)
101
+
102
+
103
+ if __name__ == "__main__":
104
+ main()