yuripeyamashita commited on
Commit
fa6e3b2
·
verified ·
1 Parent(s): d3c6fe3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +78 -58
app.py CHANGED
@@ -1,81 +1,85 @@
1
- import os, json, requests
 
 
 
2
  from flask import Flask, request
 
3
 
4
  app = Flask(__name__)
5
 
 
 
 
 
 
 
6
  @app.route('/', methods=['GET'])
7
  def index():
8
  return {}, 200
9
 
10
- LINE_REPLY_URL = "https://api.line.me/v2/bot/message/reply"
11
- LINE_CHANNEL_ACCESS_TOKEN = os.environ.get("LINE_CHANNEL_ACCESS_TOKEN")
12
-
13
- LINE_REPLY_HEADERS = {
14
- "Content-Type": "application/json; charset=UTF-8",
15
- "Authorization": "Bearer " + LINE_CHANNEL_ACCESS_TOKEN
16
- }
17
 
18
  @app.route("/api/", methods=["POST"])
19
  def api():
20
  try:
21
  payload = get_payload_dict(request.get_json())
22
- print(payload)
23
- username = get_username(payload)
24
- text = payload.get("msg_text")
25
- print(username)
26
- send_text(payload.get("token"), f"{username}:{text}")
27
- # {"msgid":{
28
- # "payer": "userid"
29
- # "debtor":{
30
- # "userid": -10,
31
- # "userid": -20
32
- # }
33
- # }
34
-
35
- # }
36
- except:
37
- pass
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
  return "", 200
39
 
40
 
41
- def get_payload_dict(raw_payload):
42
- print(raw_payload)
43
  events = raw_payload.get("events", [{}])[0]
44
- # token = raw_payload.get("events", [{}])[0].get("replyToken")
45
- # group_id = raw_payload.get("events", [{}])[0].get("source", {}).get("groupId")
46
- # user_id = raw_payload.get("events", [{}])[0].get("source", {}).get("userId")
47
- # msg_type = raw_payload.get("events", [{}])[0].get("message", {}).get("type")
48
- # msg_id = raw_payload.get("events", [{}])[0].get("message", {}).get("id")
49
- # msg_text = raw_payload.get("events", [{}])[0].get("message", {}).get("text")
50
- # quoted_msg_id = raw_payload.get("events", [{}])[0].get("message", {}).get("quotedMessageId")
51
- # unsend_msg_id = raw_payload.get("events", [{}])[0].get("unsend", {}).get("messageId")
52
- # postback_data = raw_payload.get("events", [{}])[0].get("postback", {}).get("data")
53
  return {"token": events.get("replyToken"),
54
- "group_id": events.get("source", {}).get("groupId"),
55
- "user_id": events.get("source", {}).get("userId"),
56
- "msg_type": events.get("message", {}).get("type"),
57
- "msg_id": events.get("message", {}).get("id"),
58
- "msg_text": events.get("message", {}).get("text"),
59
- "quoted_msg_id": events.get("message", {}).get("quotedMessageId"),
60
- "unsend_msg_id": events.get("unsend", {}).get("messageId")
61
- }
62
-
63
-
64
- def send_text(token, text):
65
- res = requests.post(LINE_REPLY_URL, headers=LINE_REPLY_HEADERS, json={
 
 
66
  "replyToken": token,
67
- "messages": [
68
- {
69
- "type": "text",
70
- "text": text
71
- }
72
- ]
73
  })
74
 
75
- def get_username(payload):
76
- group_id = payload.get("group_id")
77
- user_id = payload.get("user_id")
78
- url = f"https://api.line.me/v2/bot/group/{group_id}/member/{user_id}"
79
  try:
80
  res_json = requests.get(url, headers={"Authorization": "Bearer " + LINE_CHANNEL_ACCESS_TOKEN}).json()
81
  return res_json.get("displayName")
@@ -83,5 +87,21 @@ def get_username(payload):
83
  return "Unknow"
84
 
85
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
  if __name__ == "__main__":
87
- app.run(host="0.0.0.0", port=7860)
 
1
+ import os
2
+ import re
3
+ import json
4
+ import requests
5
  from flask import Flask, request
6
+ from simpleeval import simple_eval
7
 
8
  app = Flask(__name__)
9
 
10
+ GROUP_ID = os.environ.get("GROUP_ID")
11
+ LINE_CHANNEL_ACCESS_TOKEN = os.environ.get("LINE_CHANNEL_ACCESS_TOKEN")
12
+
13
+ message_list = {}
14
+
15
+
16
  @app.route('/', methods=['GET'])
17
  def index():
18
  return {}, 200
19
 
 
 
 
 
 
 
 
20
 
21
  @app.route("/api/", methods=["POST"])
22
  def api():
23
  try:
24
  payload = get_payload_dict(request.get_json())
25
+
26
+ if payload.get("group_id") != GROUP_ID:
27
+ raise ValueError("Invalid Group")
28
+
29
+ if "$" not in payload.get("msg_text"):
30
+ raise ValueError("Keyword not Found")
31
+
32
+ if payload.get("unsend_msg_id"):
33
+ message_list.pop(payload.get("unsend_msg_id"), None)
34
+
35
+ if get_amount(payload.get("msg_text")) == None:
36
+ raise ValueError("Amount is None")
37
+
38
+ if payload.get("quoted_msg_id"):
39
+ message_list[payload.get("msg_id")] = {"user_id": payload.get("user_id"),
40
+ "amount": get_amount(payload.get("msg_text")),
41
+ "quoted_msg_id": payload.get("quoted_msg_id")}
42
+ else:
43
+ message_list[payload.get("msg_id")] = {"user_id": payload.get("user_id"),
44
+ "amount": get_amount(payload.get("msg_text"))}
45
+
46
+ print(message_list)
47
+ print()
48
+
49
+ # username = get_username(payload)
50
+ # text = payload.get("msg_text")
51
+ # print(username)
52
+ # send_text(payload.get("token"), f"{username}:{text}")
53
+ except Exception as e:
54
+ print(f"An error occurred: {e}")
55
  return "", 200
56
 
57
 
58
+ def get_payload_dict(raw_payload) -> dict:
59
+ # print(raw_payload)
60
  events = raw_payload.get("events", [{}])[0]
 
 
 
 
 
 
 
 
 
61
  return {"token": events.get("replyToken"),
62
+ "group_id": events.get("source", {}).get("groupId"),
63
+ "user_id": events.get("source", {}).get("userId"),
64
+ "msg_type": events.get("message", {}).get("type"),
65
+ "msg_id": events.get("message", {}).get("id"),
66
+ "msg_text": events.get("message", {}).get("text"),
67
+ "quoted_msg_id": events.get("message", {}).get("quotedMessageId"),
68
+ "unsend_msg_id": events.get("unsend", {}).get("messageId")}
69
+
70
+
71
+ def send_text(token: str, text: str):
72
+ requests.post("https://api.line.me/v2/bot/message/reply", headers={
73
+ "Content-Type": "application/json; charset=UTF-8",
74
+ "Authorization": "Bearer " + LINE_CHANNEL_ACCESS_TOKEN
75
+ }, json={
76
  "replyToken": token,
77
+ "messages": [{"type": "text", "text": text}]
 
 
 
 
 
78
  })
79
 
80
+
81
+ def get_username(user_id: str):
82
+ url = f"https://api.line.me/v2/bot/group/{GROUP_ID}/member/{user_id}"
 
83
  try:
84
  res_json = requests.get(url, headers={"Authorization": "Bearer " + LINE_CHANNEL_ACCESS_TOKEN}).json()
85
  return res_json.get("displayName")
 
87
  return "Unknow"
88
 
89
 
90
+ def get_username() -> list:
91
+ url = f"https://api.line.me/v2/bot/group/{GROUP_ID}/members/ids"
92
+ try:
93
+ res_json = requests.get(url, headers={"Authorization": "Bearer " + LINE_CHANNEL_ACCESS_TOKEN}).json()
94
+ return res_json.get("memberIds")
95
+ except:
96
+ return []
97
+
98
+
99
+ def get_amount(text: str) -> float | None:
100
+ try:
101
+ return round(float(simple_eval(text.split("$")[1])), 2)
102
+ except:
103
+ return None
104
+
105
+
106
  if __name__ == "__main__":
107
+ app.run(host="0.0.0.0", port=7860)