import requests import base64 import hmac import json import os import time from datetime import datetime, timedelta, timezone from hashlib import sha256 from DataAPIRequester import DataAPIRequester DATA_API_PUBLIC_KEY = 'S0LECGV0' DATA_API_PRIVATE_KEY = os.getenv('LARK_BOT_DATA_API_PRIVATE_KEY') DATA_API_ENDPOINT = os.getenv('LARK_BOT_DATA_API_ENDPOINT') BOT_WEBHOOK = 'https://open.feishu.cn/open-apis/bot/v2/hook/eda54c2d-a672-4b6f-96b1-5e84ee02ef9c' SECRET = os.getenv('LARK_BOT_SECRET') Billing_Capable_User = 'Billing Capable User' Engaged_User = 'Engaged User' Existing_Paid_User_Daily_Cost_Over_10_Dollars = 'Existing Paid User Daily Cost Over 10 Dollars' USER_KIND = [Engaged_User, Billing_Capable_User, Existing_Paid_User_Daily_Cost_Over_10_Dollars] def send_lark_msg(_date, content, kind, area=None): timestamp = str(round(time.time())) key = f"{timestamp}\n{SECRET}".encode("utf-8") msg = "".encode("utf-8") hmac_code = hmac.new(key, msg, digestmod=sha256).digest() sign = base64.b64encode(hmac_code).decode("utf-8") title = f'[{datetime.now(timezone.utc).date() - timedelta(days=1)}] New {kind}' payload = { "timestamp": timestamp, "sign": sign, "msg_type": "interactive", "card": { "config": {"wide_screen_mode": True}, "header": { "title": {"tag": "plain_text", "content": title}, "template": "green", }, "elements": [{"tag": "markdown", "content": content}], }, } headers = {"Content-Type": "application/json"} response = requests.request("POST", BOT_WEBHOOK, headers=headers, data=json.dumps(payload)) return response def get_billing_capable_user(): requester = DataAPIRequester('/v1/get_billing_capable_user', endpoint=DATA_API_ENDPOINT, public_key=DATA_API_PUBLIC_KEY, private_key=DATA_API_PRIVATE_KEY) data = requester.get_data() return data def get_engaged_user(): requester = DataAPIRequester('/v1/get_engaged_user', endpoint=DATA_API_ENDPOINT, public_key=DATA_API_PUBLIC_KEY, private_key=DATA_API_PRIVATE_KEY) data = requester.get_data() return data def get_daily_cost_over_10(): requester = DataAPIRequester('/v1/get_daily_cost_over_10', endpoint=DATA_API_ENDPOINT, public_key=DATA_API_PUBLIC_KEY, private_key=DATA_API_PRIVATE_KEY) data = requester.get_data() return data def get_user_list(kind): if kind == Billing_Capable_User: return get_billing_capable_user() elif kind == Engaged_User: return get_engaged_user() elif kind == Existing_Paid_User_Daily_Cost_Over_10_Dollars: return get_daily_cost_over_10() else: return [] if __name__ == "__main__": _date = datetime.now().date() for k in USER_KIND: user_list = get_user_list(k) content = '' for user in user_list: content += f"\nemail: {user['email']}\ntenant id: {user['tenant_id']}\n\n" if content == '': content = f'No new {k.lower()}' res = send_lark_msg(_date, content, k) print(content)