From 4ba540e1726d3654020c5d1d7e0b4ddc0e5ee98f Mon Sep 17 00:00:00 2001 From: zeroleo12345 Date: Thu, 12 Feb 2026 18:00:23 +0800 Subject: [PATCH 01/11] feat: feishu switch to dingding --- src/library/crypto.py | 14 +-- src/processor/auth_processor.py | 4 +- src/settings.py | 30 +++--- src/utils/config.py | 7 +- src/utils/feishu.py | 162 ++++++++++++++++++++++++++++---- src/utils/prometheus.py | 4 +- 6 files changed, 173 insertions(+), 48 deletions(-) diff --git a/src/library/crypto.py b/src/library/crypto.py index 1336f3b61..5673138d4 100644 --- a/src/library/crypto.py +++ b/src/library/crypto.py @@ -6,15 +6,15 @@ import ctypes from loguru import logger as log # 项目库 -from utils.config import config +from utils.config import settings # HOSTAPD 动态库 -HOSTAPD_LIBRARY = config('HOSTAPD_LIBRARY') -CA_CERT = config('CA_CERT') -CLIENT_CERT = config('CLIENT_CERT') -PRIVATE_KEY = config('PRIVATE_KEY') -PRIVATE_KEY_PASSWORD = str(config('PRIVATE_KEY_PASSWORD')) -DH_FILE = config('DH_FILE') +HOSTAPD_LIBRARY = settings.get('HOSTAPD_LIBRARY') +CA_CERT = settings.get('CA_CERT') +CLIENT_CERT = settings.get('CLIENT_CERT') +PRIVATE_KEY = settings.get('PRIVATE_KEY') +PRIVATE_KEY_PASSWORD = str(settings.get('PRIVATE_KEY_PASSWORD')) +DH_FILE = settings.get('DH_FILE') class EapCryptoError(Exception): diff --git a/src/processor/auth_processor.py b/src/processor/auth_processor.py index e46fd4e2c..879b1baac 100755 --- a/src/processor/auth_processor.py +++ b/src/processor/auth_processor.py @@ -21,11 +21,11 @@ from settings import RADIUS_DICTIONARY_DIR, RADIUS_SECRET, RADIUS_LISTEN_IP, RADIUS_LISTEN_PORT from loguru import logger as log from controls.user import AuthUserProfile -from utils.config import config +from utils.config import settings from library.crypto import libhostapd -if config('USE_GTC', default=False, cast='@bool'): +if settings.get('USE_GTC', default=False, cast='@bool'): log.info('## PEAP-GTC mode ##') USE_GTC = True else: diff --git a/src/settings.py b/src/settings.py index 2b8c74f96..4ff384caf 100644 --- a/src/settings.py +++ b/src/settings.py @@ -3,12 +3,12 @@ # 第三方库 import sentry_sdk # 项目库 -from utils.config import config +from utils.config import settings from loguru import logger as log -SENTRY_DSN = config('SENTRY_DSN', mandatory=False) -SENTRY_PROXY = config('SENTRY_PROXY', default='') +SENTRY_DSN = settings.get('SENTRY_DSN', mandatory=False) +SENTRY_PROXY = settings.get('SENTRY_PROXY', default='') sentry_sdk.init( dsn=SENTRY_DSN, debug=False, @@ -16,24 +16,24 @@ https_proxy=SENTRY_PROXY, ) -RADIUS_DICTIONARY_DIR = config('RADIUS_DICTIONARY_DIR') -RADIUS_SECRET: bytes = str.encode(config('RADIUS_SECRET')) -RADIUS_LISTEN_IP = config('RADIUS_LISTEN_IP', default='') -RADIUS_LISTEN_PORT = config('RADIUS_LISTEN_PORT', default='') -ACCOUNTING_INTERVAL = config('ACCOUNTING_INTERVAL', default=60, cast='@int') -API_URL = config('API_URL') +RADIUS_DICTIONARY_DIR = settings.get('RADIUS_DICTIONARY_DIR') +RADIUS_SECRET: bytes = str.encode(settings.get('RADIUS_SECRET')) +RADIUS_LISTEN_IP = settings.get('RADIUS_LISTEN_IP', default='') +RADIUS_LISTEN_PORT = settings.get('RADIUS_LISTEN_PORT', default='') +ACCOUNTING_INTERVAL = settings.get('ACCOUNTING_INTERVAL', default=60, cast='@int') +API_URL = settings.get('API_URL') # DB -DATABASE_URI = config('DATABASE_URI') +DATABASE_URI = settings.get('DATABASE_URI') # Redis -REDIS_HOST = config('REDIS_HOST') -REDIS_PORT = config('REDIS_PORT') -REDIS_PASSWORD = config('REDIS_PASSWORD') -REDIS_DB = config('REDIS_DB') +REDIS_HOST = settings.get('REDIS_HOST') +REDIS_PORT = settings.get('REDIS_PORT') +REDIS_PASSWORD = settings.get('REDIS_PASSWORD') +REDIS_DB = settings.get('REDIS_DB') # Log -LOG_LEVEL = config('LOG_LEVEL') +LOG_LEVEL = settings.get('LOG_LEVEL') # 初始化日志 log.remove() # workaround: https://github.com/Delgan/loguru/issues/208 # log_console_format = "{time:YYYY-MM-DD HH:mm:ss.SSS} | {level: <8} | {message}" diff --git a/src/utils/config.py b/src/utils/config.py index d71462dbb..4a72c0c83 100644 --- a/src/utils/config.py +++ b/src/utils/config.py @@ -10,11 +10,12 @@ class Config(object): dotenv_override=False, # 设置.env配置是否覆盖环境变量 ) - def __call__(self, key, default=None, cast=None, mandatory=True, fresh=False, dotted_lookup=True, parent=None): - value = self._settings.get(key, default=default, cast=cast, fresh=fresh, dotted_lookup=dotted_lookup, parent=None) + @classmethod + def get(cls, key, default=None, cast=None, mandatory=True, fresh=False, dotted_lookup=True, parent=None): + value = cls._settings.get(key, default=default, cast=cast, fresh=fresh, dotted_lookup=dotted_lookup, parent=None) if mandatory and value is None: raise Exception(f'config key: {key} is missing') return value -config = Config() +settings = Config diff --git a/src/utils/feishu.py b/src/utils/feishu.py index 6ebca277e..44ca2be38 100644 --- a/src/utils/feishu.py +++ b/src/utils/feishu.py @@ -1,28 +1,124 @@ -import json import requests +import time # 第三方库 -from utils.config import config +from utils.myconf import settings +from loguru import logger as log class Feishu(object): - FEISHU_APP_ID = config('FEISHU_APP_ID') - FEISHU_APP_SECRET = config('FEISHU_APP_SECRET') - FEISHU_CHARGE_CHAT_ID = config('FEISHU_CHARGE_CHAT_ID', default='oc_a4bc2f10dd9ec84f08f2bbcaa82e08cd') - FEISHU_MAC_CHAT_ID = config('FEISHU_MAC_CHAT_ID', default='oc_3a7065d01efdb36d949088341aada466') - FEISHU_SESSION_CHAT_ID = config('FEISHU_SESSION_CHAT_ID', default='oc_19b2404bb0917fc066cce1b3a58c3558') + class Token(object): + def __init__(self, token='', ttl=-1): + self.token = token + self.expired_at = int(time.time()) + ttl + # Must: + FEISHU_APP_ID = settings.get('FEISHU_APP_ID') + FEISHU_APP_SECRET = settings.get('FEISHU_APP_SECRET') + # Optional: + FEISHU_CHARGE_CHAT_ID = settings.get('FEISHU_CHARGE_CHAT_ID', default='oc_a4bc2f10dd9ec84f08f2bbcaa82e08cd') # 充值统计群 + FEISHU_MAC_CHAT_ID = settings.get('FEISHU_MAC_CHAT_ID', default='oc_3a7065d01efdb36d949088341aada466') # MAC请求放通群 + FEISHU_SESSION_CHAT_ID = settings.get('FEISHU_SESSION_CHAT_ID', default='oc_19b2404bb0917fc066cce1b3a58c3558') # 多拨告警群 + # + _ACCESS_TOKEN = Token() + + """ + 获取access_token + https://feishu.apifox.cn/api-58156651 + + POST /open-apis/auth/v3/tenant_access_token/internal HTTP/1.1 + Host: open.feishu.cn + Authorization: Bearer + Content-Type: application/json + Content-Length: 81 + + { + "app_id": "cli_slkdjalasdkjasd", + "app_secret": "dskLLdkasdjlasdKK" + } + + :return: + { + "code": 0, + "msg": "ok", + "tenant_access_token": "t-caecc734c2e3328a62489fe0648c4b98779515d3", + "expire": 7200 + } + """ @classmethod - def send_groud_msg(cls, receiver_id: str, text: str): - data = { - 'app_id': cls.FEISHU_APP_ID, - 'app_secret': cls.FEISHU_APP_SECRET, + def get_access_token(cls) -> str: + assert cls.FEISHU_APP_ID and cls.FEISHU_APP_SECRET + if int(time.time()) > cls._ACCESS_TOKEN.expired_at: + data = { + 'app_id': cls.FEISHU_APP_ID, + 'app_secret': cls.FEISHU_APP_SECRET, + } + response = requests.post('https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/', json=data) + assert response.ok + body = response.json() + log.debug(f'API get_access_token: {body}') + if body['code'] != 0: + raise Exception('飞书获取access_token失败') + cls._ACCESS_TOKEN = cls.Token(token=body['tenant_access_token'], ttl=body['expire']) + log.debug(f'fetched access token: {cls._ACCESS_TOKEN.token}') + return cls._ACCESS_TOKEN.token + + """ + 发送消息. 目前使用的是 历史版本的 发送消息卡片(/open-apis/message/v4/send/) 接口 + https://feishu.apifox.cn/api-58348294 + + POST /open-apis/im/v1/messages?receive_id_type=null HTTP/1.1 + Host: open.feishu.cn + Authorization: Bearer + Content-Type: application/json + Content-Length: 189 + + { + "receive_id": "ou_7d8a6e6df7621556ce0d21922b676706ccs", + "msg_type": "text", + "content": "{\"text\":\"test content\"}", + "uuid": "a0d69e20-1dd1-458b-k525-dfeca4015204" + } + + :return: + { + "code": 0, + "msg": "success", + "data": { + "message_id": "om_dc13264520392913993dd051dba21dcf", + "root_id": "om_40eb06e7b84dc71c03e009ad3c754195", + "parent_id": "om_d4be107c616aed9c1da8ed8068570a9f", + "msg_type": "card", + "create_time": "1615380573411", + "update_time": "1615380573411", + "deleted": false, + "updated": false, + "chat_id": "oc_5ad11d72b830411d72b836c20", + "sender": { + "id": "cli_9f427eec54ae901b", + "id_type": "app_id", + "sender_type": "app", + "tenant_key": "736588c9260f175e" + }, + "body": { + "content": "text:测试消息" + }, + "mentions": [ + { + "key": "@_user_1", + "id": "ou_155184d1e73cbfb8973e5a9e698e74f2", + "id_type": "open_id", + "name": "Tom", + "tenant_key": "736588c9260f175e" + } + ], + "upper_message_id": "om_40eb06e7b84dc71c03e009ad3c754195" } - response = requests.post('https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/', json=data) - assert response.ok - body = json.loads(response.text) - if body['code'] != 0: - raise Exception('飞书获取access_token失败') - access_token = response.json()['tenant_access_token'] + } + """ + + @classmethod + def send_group_msg(cls, receiver_id: str, text: str): + access_token = cls.get_access_token() # headers = { 'Authorization': f'Bearer {access_token}' @@ -36,6 +132,34 @@ def send_groud_msg(cls, receiver_id: str, text: str): } response = requests.post('https://open.feishu.cn/open-apis/message/v4/send/', json=data, headers=headers) assert response.ok - body = json.loads(response.text) + body = response.json() + log.debug(f'API send_group_msg: {body}') if body['code'] != 0: - raise Exception('信息发送到飞书败') + raise Exception('飞书群消息发送失败') + + @classmethod + def send_webhook_msg(cls, webhook_url: str, text: str): + data = { + 'msg_type': 'text', + 'content': { + 'text': text, + } + } + response = requests.post(webhook_url, json=data) + assert response.ok + body = response.json() + log.debug(f'API send_webhook_msg: {body}') + if body['code'] != 0: + raise Exception('飞书webhook消息发送失败') + + +if __name__ == "__main__": + import sys + # + LOG_LEVEL = settings.get('LOG_LEVEL', default='debug') + log.info(f'start log. LOG_LEVEL: {LOG_LEVEL}') + # + if sys.argv[1] == "2": + assert Feishu.FEISHU_CHARGE_CHAT_ID + Feishu.send_group_msg(Feishu.FEISHU_CHARGE_CHAT_ID, text="feishu group msg test") + log.info('Send feishu group msg done') diff --git a/src/utils/prometheus.py b/src/utils/prometheus.py index 17ddd6e2b..3eb1e0e2c 100644 --- a/src/utils/prometheus.py +++ b/src/utils/prometheus.py @@ -1,10 +1,10 @@ import requests # 项目库 -from utils.config import config +from utils.config import settings class Prometheus(object): - ENDPOINT = config('PROMETHEUS_ENDPOINT', default='http://metric:8428/prometheus/api/v1/import/prometheus') + ENDPOINT = settings.get('PROMETHEUS_ENDPOINT', default='http://metric:8428/prometheus/api/v1/import/prometheus') @classmethod def push_metric(cls, metrics: list): From 6d8409c197e7bade8669c45e6369bfecfbd4070d Mon Sep 17 00:00:00 2001 From: zeroleo12345 Date: Thu, 12 Feb 2026 18:11:38 +0800 Subject: [PATCH 02/11] group id --- src/utils/dingding.py | 93 +++++++++++++++++++++++++++++++++++++++++++ src/utils/feishu.py | 7 ++-- 2 files changed, 96 insertions(+), 4 deletions(-) create mode 100644 src/utils/dingding.py diff --git a/src/utils/dingding.py b/src/utils/dingding.py new file mode 100644 index 000000000..54ed9e54f --- /dev/null +++ b/src/utils/dingding.py @@ -0,0 +1,93 @@ +import requests +import time +# 第三方库 +from utils.config import settings +from loguru import logger as log + + +class Dingding(object): + class Token(object): + def __init__(self, token='', ttl=-1): + self.token = token + self.expired_at = int(time.time()) + ttl + + # Must: + DINGDING_APP_ID = settings.get('DINGDING_APP_ID') + DINGDING_APP_SECRET = settings.get('DINGDING_APP_SECRET') + DINGDING_ROBOT_CODE = settings.get('DINGDING_ROBOT_CODE', default='dingqnettcbcq4tpecq7') + # Optional: + DINGDING_MAC_CHAT_ID = settings.get('FEISHU_MAC_CHAT_ID', default='cidVhnIuNh9n5Q0MoN8ddMqNw==') # MAC请求放通群 + DINGDING_SESSION_CHAT_ID = settings.get('FEISHU_SESSION_CHAT_ID', default='cidVhnIuNh9n5Q0MoN8ddMqNw==') # 多拨告警群 + # + _ACCESS_TOKEN = Token() + + """ + 获取access_token + https://open.dingtalk.com/document/development/obtain-the-access-token-of-an-internal-app + + POST /v1.0/oauth2/accessToken HTTP/1.1 + Host:api.dingtalk.com + Content-Type:application/json + + { + "appKey" : "dingeqqpkv3xxxxxx", + "appSecret" : "GT-lsu-taDAxxxsTsxxxx" + } + + :return: + { + "accessToken" : "fw8ef8we8f76e6f7s8dxxxx", + "expireIn" : 7200 + } + """ + @classmethod + def get_access_token(cls) -> str: + if int(time.time()) > cls._ACCESS_TOKEN.expired_at: + data = { + 'appKey': cls.DINGDING_APP_ID, + 'appSecret': cls.DINGDING_APP_SECRET, + } + response = requests.post('https://api.dingtalk.com/v1.0/oauth2/accessToken', json=data) + body = response.json() + log.debug(f'API get_access_token: {body}') + cls._ACCESS_TOKEN = cls.Token(token=body['accessToken'], ttl=body['expireIn']) + log.debug(f'fetched access token: {cls._ACCESS_TOKEN.token}') + return cls._ACCESS_TOKEN.token + + """ + 发送应用消息 + https://open.dingtalk.com/document/development/the-robot-sends-a-group-message + + POST /v1.0/robot/groupMessages/send HTTP/1.1 + Host:api.dingtalk.com + x-acs-dingtalk-access-token:nvosnghskaknz8an3b82 + Content-Type:application/json + + { + "msgParam" : "{\"content\":\"钉钉,让进步发生\"}", + "msgKey" : "sampleText", + "openConversationId" : "cid6KeBBLoveMJOGXoYKF5x7EeiodoA==", + "robotCode" : "dingue4kfzdxbynxxxxxx", + "coolAppCode" : "COOLAPP-1-10182EEDD1AC0BA600D9000J" + } + + :return: + { + "processQueryKey" : "jkasdfb8va9hndjksnvzkj" + } + """ + @classmethod + def send_group_msg(cls, receiver_id: str, text: str): + headers = { + 'x-acs-dingtalk-access-token': cls.get_access_token(), + } + data = { + 'msgParam': f'{{"content":"{text}"}}', + 'msgKey': 'sampleText', + 'openConversationId': receiver_id, + 'robotCode': cls.DINGDING_ROBOT_CODE, + } + response = requests.post('https://api.dingtalk.com/v1.0/robot/groupMessages/send', json=data, headers=headers) + body = response.json() + log.debug(f'API send_group_msg: {body}') + assert response.ok diff --git a/src/utils/feishu.py b/src/utils/feishu.py index 44ca2be38..ad3f97add 100644 --- a/src/utils/feishu.py +++ b/src/utils/feishu.py @@ -1,7 +1,7 @@ import requests import time # 第三方库 -from utils.myconf import settings +from utils.config import settings from loguru import logger as log @@ -15,7 +15,6 @@ def __init__(self, token='', ttl=-1): FEISHU_APP_ID = settings.get('FEISHU_APP_ID') FEISHU_APP_SECRET = settings.get('FEISHU_APP_SECRET') # Optional: - FEISHU_CHARGE_CHAT_ID = settings.get('FEISHU_CHARGE_CHAT_ID', default='oc_a4bc2f10dd9ec84f08f2bbcaa82e08cd') # 充值统计群 FEISHU_MAC_CHAT_ID = settings.get('FEISHU_MAC_CHAT_ID', default='oc_3a7065d01efdb36d949088341aada466') # MAC请求放通群 FEISHU_SESSION_CHAT_ID = settings.get('FEISHU_SESSION_CHAT_ID', default='oc_19b2404bb0917fc066cce1b3a58c3558') # 多拨告警群 # @@ -160,6 +159,6 @@ def send_webhook_msg(cls, webhook_url: str, text: str): log.info(f'start log. LOG_LEVEL: {LOG_LEVEL}') # if sys.argv[1] == "2": - assert Feishu.FEISHU_CHARGE_CHAT_ID - Feishu.send_group_msg(Feishu.FEISHU_CHARGE_CHAT_ID, text="feishu group msg test") + assert Feishu.FEISHU_PAYMENT_CHAT_ID + Feishu.send_group_msg(Feishu.FEISHU_PAYMENT_CHAT_ID, text="feishu group msg test") log.info('Send feishu group msg done') From 45a9593b423746500b59041fd1e675b99c68f24f Mon Sep 17 00:00:00 2001 From: zeroleo12345 Date: Thu, 12 Feb 2026 18:35:03 +0800 Subject: [PATCH 03/11] encrypt --- .env.x | Bin 2192 -> 2336 bytes src/acct/accounting_flow.py | 4 ++-- src/auth/mac_flow.py | 4 ++-- src/utils/feishu.py | 12 ------------ 4 files changed, 4 insertions(+), 16 deletions(-) diff --git a/.env.x b/.env.x index e9ba6508ac509e4ddd41928a748c5a5fb1907439..1b1aec6d0f2daabba2f15d741fd4b1e05f8112e1 100644 GIT binary patch delta 2237 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 L3fb%Rha6AS{2641 delta 2092 zcmV+{2-EkV5|9xWFoFn-1_>&LNQU?P<$V_#b6u_4%6M6k3pDpUN^^$n@ow&lJ#;|6`0I}*lgOAW| z1*QFf2=`+TmFf)IMF0>yB^QHf0JBZJPDHJ$uPZp{z%}%PXyc#43XHJnE)KIH@mML2 zVSFF46UN`afRTTo4}$sTv$N}Yl2qkYmYh~nYg;@Di!KS4E)iO&8me&SFIzCSr4!qhD-m*ET>YyGZRdQY;Vx$%GNMs zham+E=zr{a(u+eL@rArAPM|7JFDN%n`Pl)#1#t0TzM1blJkqB*?e>wn;xZS zHdWxvLmht$r}8dZ@?_Z!iN4!JKx$86Cc?Q-H4Wm4LgqTP%(nw$`aS%5F=6*_Up!Fj zN))DjhZEEL^n*?!6novx;q(uz*6;xfn2;bUC=uUQP#oA{80Opyx0Gp>aVl>0(uSt5 zJxX)CwOGMGHN~O3MyhZFQIV8UwWAz=#s4;P3*3Jc8Yua6nKlR|EuXVEpT=9$B_1E& z#iR;GR3%OJ1zvos94ie&#q90$eThC{%I(GAtM!JcRzU^r>+*-cfD+1hbfa2!TTniu zYJDHq69{KUw2`^#c{ef%6O{xLxkt1xM+`X|nqWH40ruK+`pG%}3f5wKroM*4jMz${M2K>WZL?Av$uL)i1pf zsUq(YK^fyvPqP#)xP-^ z_76}XU`bi2{wKzM`U}D1dVtM@Kx+@4LlzrGM9Ggq0;GwqwsrUk2rz;Jo(2gjhDe6@4FLxMFdYU7V1`HmWdj5ODg=KJf3F;t zKyJwH$`LJldaBIifPw>X3&;G<+Fe#70PLc&&DePu=}x+*!5CKL{@JCdxw6l4OO`WR z%xS`M>YYHS3I(Xl8B1bO5!p}&h5|+8esBrMLZviyQ{O5Djd||s5#{M&m51?xv@?J` zD7Rj;-l#yNfV+M(6jgLv@UMR)jmwckKZ7d<0`c#i)4)(xAi+3$Z;tj$8Aw5P0!+`w z#gmje_UmD$KQL@#Cp*EQ!Qx29AAE}dZh4$XG2zK0uvOS0v05QC%#fAn3*Ea%&hejb zz>(pZGfZ1L-NCU$=lbcJT|NWN)%fC7WH^ilq|!J5u&GjNUq<@!T`e`csg-@r$b>F6*}&RCf)U z+GjFAdD;t^>O8l}&QF^9SZ3j}S`SvX4A`uQ-C}s%N$!Bfa_Zivi64O*Mb+BvO_FUDu;EG&aZ3Fu9MM1~)hoD^G0}l-o_G!`W4AC?G88 zRmp_0SxzXo`;T}7?I-CGLgPIB=zNRO^5=8xn6f~TLNoD_&gd~|A)GxGn2uGbU}ZvL zfn%MDKYc*@Qku$3sk2JF1MC9Egu*yc!Cj$GGC2V#B&Phk6#{<~w^1MwSdF7SRV>3Z zQ5;w@0EU5KO|Oa6 z|8M{Yv?v~#j>3*vJkUj+LWzDQEI9M?hq)yAR)sJY@@Z`*0S|Ag-cyTV!pW5&J}P6` zVMP@H;kBo&RLPHSc#_`vcYL$<_La)m1s04&pty7LT2_BO$v)-5(v|j7_bl 1 and account.role != Account.Role.PLATFORM_OWNER.value: text = f'{acct_user_profile.packet.outer_username} 账号多拨!' - Feishu.send_groud_msg(receiver_id=Feishu.FEISHU_SESSION_CHAT_ID, text=text) + Dingding.send_group_msg(receiver_id=Dingding.DINGDING_SESSION_CHAT_ID, text=text) # cls.disconnect(user_name=acct_user_profile.packet.outer_username, user_mac=acct_user_profile.packet.user_mac) # cls.push_metric(username=account.username, request=request) diff --git a/src/auth/mac_flow.py b/src/auth/mac_flow.py index c80f3336f..c7150ea9d 100644 --- a/src/auth/mac_flow.py +++ b/src/auth/mac_flow.py @@ -35,7 +35,7 @@ def mac_auth(cls, request: AuthRequest, session: BaseSession): # notify notify_url = f'{API_URL}/mac-account?username={session.auth_user_profile.packet.outer_username}&ssid={request.ssid}&ap_mac={request.ap_mac}' text = f'设备首次请求放通:\nMAC: {session.auth_user_profile.packet.user_mac}\nSSID: {request.ssid}\n若允许访问, 请点击: {notify_url}' - Feishu.send_groud_msg(receiver_id=Feishu.FEISHU_MAC_CHAT_ID, text=text) + Feishu.send_group_msg(receiver_id=Feishu.FEISHU_MAC_CHAT_ID, text=text) # mac Flow: 用户不存在则创建 account = MacAccount.get_(username=session.auth_user_profile.packet.outer_username) @@ -53,7 +53,7 @@ def mac_auth(cls, request: AuthRequest, session: BaseSession): expired_at=expired_at, created_at=created_at, ) text = f'新增放通 MAC 设备, MAC: {session.auth_user_profile.packet.user_mac}, SSID: {request.ssid}' - Feishu.send_groud_msg(receiver_id=Feishu.FEISHU_MAC_CHAT_ID, text=text) + Feishu.send_group_msg(receiver_id=Feishu.FEISHU_MAC_CHAT_ID, text=text) redis.delete(enable_flag_key) if not account.is_enable: log.warning(f'account is disabled') diff --git a/src/utils/feishu.py b/src/utils/feishu.py index ad3f97add..ddbc301d1 100644 --- a/src/utils/feishu.py +++ b/src/utils/feishu.py @@ -150,15 +150,3 @@ def send_webhook_msg(cls, webhook_url: str, text: str): log.debug(f'API send_webhook_msg: {body}') if body['code'] != 0: raise Exception('飞书webhook消息发送失败') - - -if __name__ == "__main__": - import sys - # - LOG_LEVEL = settings.get('LOG_LEVEL', default='debug') - log.info(f'start log. LOG_LEVEL: {LOG_LEVEL}') - # - if sys.argv[1] == "2": - assert Feishu.FEISHU_PAYMENT_CHAT_ID - Feishu.send_group_msg(Feishu.FEISHU_PAYMENT_CHAT_ID, text="feishu group msg test") - log.info('Send feishu group msg done') From 171143aa31872e28a65959de22dedc98e6d0f7df Mon Sep 17 00:00:00 2001 From: zeroleo12345 Date: Thu, 12 Feb 2026 18:55:06 +0800 Subject: [PATCH 04/11] fix --- src/utils/feishu.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/utils/feishu.py b/src/utils/feishu.py index ddbc301d1..65aedf235 100644 --- a/src/utils/feishu.py +++ b/src/utils/feishu.py @@ -12,8 +12,8 @@ def __init__(self, token='', ttl=-1): self.expired_at = int(time.time()) + ttl # Must: - FEISHU_APP_ID = settings.get('FEISHU_APP_ID') - FEISHU_APP_SECRET = settings.get('FEISHU_APP_SECRET') + FEISHU_APP_ID = settings.get('FEISHU_APP_ID', default='') + FEISHU_APP_SECRET = settings.get('FEISHU_APP_SECRET', default='') # Optional: FEISHU_MAC_CHAT_ID = settings.get('FEISHU_MAC_CHAT_ID', default='oc_3a7065d01efdb36d949088341aada466') # MAC请求放通群 FEISHU_SESSION_CHAT_ID = settings.get('FEISHU_SESSION_CHAT_ID', default='oc_19b2404bb0917fc066cce1b3a58c3558') # 多拨告警群 From 22cfb41790e057b426351ee816a3b8bccd9e90ea Mon Sep 17 00:00:00 2001 From: zeroleo12345 Date: Thu, 12 Feb 2026 22:34:46 +0800 Subject: [PATCH 05/11] fix --- .env.x | Bin 2336 -> 2336 bytes src/acct/accounting_flow.py | 4 ++-- src/utils/dingding.py | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.env.x b/.env.x index 1b1aec6d0f2daabba2f15d741fd4b1e05f8112e1..b78c0f2a07694590b6640785ff98a6ef39389393 100644 GIT binary patch delta 2186 zcmV;52zB?M5}*>0lz$c48#2Q3lqw(^d(8Qk)!{c!)kb@ZH=GTQGbsEfz*~=>u5ord zUPK>e=7v(^NOCArh=y3fDG4|^Jg&*;sqj6c`VPjXzUTZI z3Av|^`ar0Bz9IJZ9dRR^+wLKUeV`Rd16s13uZd7(;b2q8D1WLS`(`vPn(I_e?djH; z`y^m~9C;t9kA zwf;+tU&Lv1`A`$7lc8p24U97UA!;e^N~>+^*Qr_%Jbrki2g2pdIr@XFA(mjN<9|aA zPaC`3fBB|rVXy4`Qq$5|ogB}vE-Tr~oxvf3FZ<1vqklg>=WyQ9^i5`)#2nL{(Jn? zVMe^3D}|i-FcV2KAchh0=21#wEWV~mCk5m!uD0nBq_4GaQ+xbr$?@+qj)bhFWoP?a zrKUBmpMR#EW%Oh<-qu+Y(=*;0^(QCUMt(0yDcAHpr+}@-V+5ky)Ls)%Ep2Cn${pW0 zR)QRIoqG%L%TT@B+k_>QDYRJHbXp*mDNvm^>s}!zjHfCWm<) zcyAa`_d32@3n5{r(XQXmE>O|8pTrDXE4t+JTYn5yVNlrti^DylZCbEjut)aJB>6s~ z1SW}s00%GY7o+cD3`jWoi&M0I073j?a)!wC%xK*vpgx2zKDD)@b zIemNHTZV)Aj0Xl5qmQ2Z)D1&FW&jC(ESuQB6YRdun8p2dcV8%1RyL3M(8;icb;_LQ zQGao$+i>Vqm|xrB)4F>V#H|j3>-u@tS2N*nIJ?CpB*l}oFZs-R*L^S8{`~~9c=5Bc z91lrFxw0J4-PDpp^}cXz+{G$db6Z?+VoeE9?lwYlrW$PE-4Ol;D05pw%QfNtVeZB~Kav8#2)?R% z9Fx!*?XMh!d)U4d!rG^@&P^pd-R%;`;Kb+Y5$t=~QBKQt=*UtmEH@kwIFU5!&C-v? zSvl)82^m-RmkHpoictvRD$coI=5HBU9VzI{z9~T8KV^yDBVT{@Fu}P?_x30 z{UkZA#vwdHxwZZ(#9wBehK-Qqaq*Tr$m#iW7V3qZDSj`;pC5J09{}9C_SdU5RFb)% zHWo+MrlQof?~du973`6w7y88c_9BG^>bxIyOP+KYF3z3D9>;;*%!(walkNl_f87jB zbjZcZy8o_RaNvWRbAW;b032Iz$4&1@)ZZ~tlpRe(p|qu98!u=9w6oiR-W9M zbi~r;Mr8y7raC9X0XCDR+Jr7Ue@sy6(#E!dt_!b`Zq!m*{}5!mI`~=&kt&cs(#zMu z;ivKpiVK%j!ov?V&N``!$*0=j4yjZ#4Er}U2(`}OKoNCMfK__3;4sD^wyt?0Nv;ZE zUs78^$N*!b zS=_g`ir@2wu)&7UhXGlPsOznrP&i`?H%=8*Z3j3fk~WT22jz;(F0+)hAu{|6rS>$J zb%8Xj;=M;9=fyHcaWT(k2^A;!8%x8H7n|k$@s1(A4Ltb7)D-V)EsT)FTy8#bx2-`v z8i&1SXNNRNLh!Yig~@&ne~UpB7Zy^anfx+NE0#%Ez|SS{omOF`sOy1(UuLPKFG23% z^mFfvj_}KjiIKPrW=tsIqXt^4P*ru$mwDu(;PL9QLUiGTWsX1VZL;88t4EcH3SYOO z;ZY2ruckt3iQ9gb0((D>Kx!^yBaHwhKv#cqrM9H^bsLOQ0_Cpi*&PTs0%zBJV|E46#y;n7P7`58G5=b2zxWp@5bqA0rv- z1U1hTPNy_g6wk4pCX<8$Aj|k_q0VzOK*iLRrm$GF@^f0{Qe?`b3S6r?|Qg&K7fMqg4^PoU`vUX>Y8O`k#4P;QSVhIOj# zIEQJtgZ9pHDbb+MH22|a2c+T5ij=sUffxjM`pP$A)6b{0F{<^Ry) zJ{G6c7aw)O{3J_5bhAU49{j4?jmi_o`QJd_amI;cUcm!fP>skQx8^du$>{Lb*DS z(>|8ue0JFHc|I3;e#9I>4<99-1!&5-)x!o5OqKeB~V Mbc;CIJ$KF?X*>s1x&QzG delta 2186 zcmV;52zB?M5}*>0lz*0(4VY~rhm;@0PxTe~E_mz8WE2Fx4b?e<`_G$Orb6~`sN|wK zpo7cX_KC-S&abfxa6i7zi~OHRH`yPM-i0I`oX4pDiNLI^bl$ZABPSw+?c^K6Z3va7 zBbAj(1jCUzzx$z2dvU{LCE5r5*g~;=c~gn`DUh}RgH-s6^?weKEY9(NSKwl zl1S+QON(TIs)!LhU2_S#{XzK+DwE6~Y7oM?yA6qzW)b8_Rua-D)AM~;Lx`kXJ zgG}lM^ZP%@{D0l}>(Fl6#M)t4(VKTz`Z)(r72r)=x`R|8Sd-H; zvQh%l?>IpOMZ%=1b~NiKJgYSUa1V{FqK6B>E)0-(v}fp9tD&fYLN0Ou}C|F?!uw=T!wdvq0~HmBEj zSffm6sw`7;rBiU4OJ4hvmZo?QhE7H4Y&E|Vl79wOF87!_wk*VGp4nkgp9a99D=ow(x_Ri%MwV0 zi?<3Y%Z(Gb*z+Cy%YvID0k^1D?Ctx3ujH_cV`n<%^VvYBKH1h~UZJ0DTFaD`4tZp1 zUDz1C)laxrYaSc-#p-V)%Ur=RuGTyVjf#bB8T7KGpOkqfDmsrUx5C3AioC3n9b#%@ zv!WN?NrPVY1fZpm{;B;M+y6Pmh<<^1XX2pacU!lix8j9i>hjvo0$%|?mL&yv~4-<>;xTTj_T0l z8dt9W2WrY=h_2**lU>-JWmYh~%~#ivPzNlY=RYT{y9NVb<@2c~+kiTOv@*3r>^ruR zjJ8$f>+xk=8iYPdh@cf6fAEmY$hN)|<-6%&!(;TjO8_(RRJooXJ$;7PXGN8wef7AX1eRqP?0F6TjS{Z2Pj6mWp(Q}ue=;9!eZZuVBu>g) zkJfZhZ7E8TdmhDB&op~vOlvqOkzpB7TxgcA8VdOi+M>$&A1(++7;xcDOXh~bn)k6% z<9Sy%>ZYed`X&}}rie`?J?se2y%1mFOs*tOy~Hhte}CESdY=m}x8Zp^G4OOVd#nEi!_Y~$YIWC$IbiQgVvH`5wHNxks%6*nQGw~vE5)0EV`XG6RYOqZCda2uw#&(Kt<|DWH0;5Ths?1ne(VYVk{N5Mm zDX=IhG-*fbOdjgUo&eJqTlSd5^?%rUm%aKz(OJLXWpHmQe~vHI`Y-Q+DzLX55G_RQ zvCV@zukTA9B9GC<6K6nz2FvL?-#MboMFAfsbQW@_Xbnqa2V5(mX~P0r=);3)s4HL& z-w7U{RjsadXfNa3UkTEI~@4hZWs06bmF$HmDE9W63KQ!!Cs;(4Q5-T%~<#= zsdxYMdb#$uL-Zh4{<%Vzhf%)X=+h{hUT$NByevQuzxd(DZy?!@ws=>c;U|uD6h2wA z=0M>z{!g=m(Pgu 1 and account.role != Account.Role.PLATFORM_OWNER.value: text = f'{acct_user_profile.packet.outer_username} 账号多拨!' - Dingding.send_group_msg(receiver_id=Dingding.DINGDING_SESSION_CHAT_ID, text=text) + Feishu.send_group_msg(receiver_id=Feishu.FEISHU_SESSION_CHAT_ID, text=text) # cls.disconnect(user_name=acct_user_profile.packet.outer_username, user_mac=acct_user_profile.packet.user_mac) # cls.push_metric(username=account.username, request=request) diff --git a/src/utils/dingding.py b/src/utils/dingding.py index 54ed9e54f..56ce0568a 100644 --- a/src/utils/dingding.py +++ b/src/utils/dingding.py @@ -16,8 +16,8 @@ def __init__(self, token='', ttl=-1): DINGDING_APP_SECRET = settings.get('DINGDING_APP_SECRET') DINGDING_ROBOT_CODE = settings.get('DINGDING_ROBOT_CODE', default='dingqnettcbcq4tpecq7') # Optional: - DINGDING_MAC_CHAT_ID = settings.get('FEISHU_MAC_CHAT_ID', default='cidVhnIuNh9n5Q0MoN8ddMqNw==') # MAC请求放通群 - DINGDING_SESSION_CHAT_ID = settings.get('FEISHU_SESSION_CHAT_ID', default='cidVhnIuNh9n5Q0MoN8ddMqNw==') # 多拨告警群 + DINGDING_MAC_CHAT_ID = settings.get('DINGDING_MAC_CHAT_ID', default='cidVhnIuNh9n5Q0MoN8ddMqNw==') # MAC请求放通群 + DINGDING_SESSION_CHAT_ID = settings.get('DINGDING_SESSION_CHAT_ID', default='cidVhnIuNh9n5Q0MoN8ddMqNw==') # 多拨告警群 # _ACCESS_TOKEN = Token() From dfe676cebe8d734ed541d9ff4160488ab7b8699c Mon Sep 17 00:00:00 2001 From: zeroleo12345 Date: Thu, 12 Feb 2026 22:39:30 +0800 Subject: [PATCH 06/11] fix --- src/utils/dingding.py | 8 ++++---- src/utils/feishu.py | 24 ++++++++++++------------ 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/utils/dingding.py b/src/utils/dingding.py index 56ce0568a..1ff665d45 100644 --- a/src/utils/dingding.py +++ b/src/utils/dingding.py @@ -60,20 +60,20 @@ def get_access_token(cls) -> str: POST /v1.0/robot/groupMessages/send HTTP/1.1 Host:api.dingtalk.com - x-acs-dingtalk-access-token:nvosnghskaknz8an3b82 + x-acs-dingtalk-access-token:nvosnghskaknz8xxxxxx Content-Type:application/json { "msgParam" : "{\"content\":\"钉钉,让进步发生\"}", "msgKey" : "sampleText", - "openConversationId" : "cid6KeBBLoveMJOGXoYKF5x7EeiodoA==", + "openConversationId" : "cid6KeBBLoveMJOGXoYKF5xxxxxxx==", "robotCode" : "dingue4kfzdxbynxxxxxx", - "coolAppCode" : "COOLAPP-1-10182EEDD1AC0BA600D9000J" + "coolAppCode" : "COOLAPP-1-10182EEDD1AC0BA60xxxxxx" } :return: { - "processQueryKey" : "jkasdfb8va9hndjksnvzkj" + "processQueryKey" : "jkasdfb8va9hnxxxxxx" } """ @classmethod diff --git a/src/utils/feishu.py b/src/utils/feishu.py index 65aedf235..7f0fd11de 100644 --- a/src/utils/feishu.py +++ b/src/utils/feishu.py @@ -31,15 +31,15 @@ def __init__(self, token='', ttl=-1): Content-Length: 81 { - "app_id": "cli_slkdjalasdkjasd", - "app_secret": "dskLLdkasdjlasdKK" + "app_id": "cli_slkdjalaxxxxxx", + "app_secret": "dskLLdkasdxxxxxx" } :return: { "code": 0, "msg": "ok", - "tenant_access_token": "t-caecc734c2e3328a62489fe0648c4b98779515d3", + "tenant_access_token": "t-caecc734c2e3328a62489fe0648c4xxxxxx", "expire": 7200 } """ @@ -72,10 +72,10 @@ def get_access_token(cls) -> str: Content-Length: 189 { - "receive_id": "ou_7d8a6e6df7621556ce0d21922b676706ccs", + "receive_id": "ou_7d8a6e6df7621556ce0d219xxxxxx", "msg_type": "text", "content": "{\"text\":\"test content\"}", - "uuid": "a0d69e20-1dd1-458b-k525-dfeca4015204" + "uuid": "a0d69e20-1dd1-458b-k525-dfexxxxxx" } :return: @@ -83,20 +83,20 @@ def get_access_token(cls) -> str: "code": 0, "msg": "success", "data": { - "message_id": "om_dc13264520392913993dd051dba21dcf", - "root_id": "om_40eb06e7b84dc71c03e009ad3c754195", - "parent_id": "om_d4be107c616aed9c1da8ed8068570a9f", + "message_id": "om_dc13264520392913993dd051xxxxxx", + "root_id": "om_40eb06e7b84dc71c03e0xxxxxx", + "parent_id": "om_d4be107c616aed9c1da8edxxxxxx", "msg_type": "card", "create_time": "1615380573411", "update_time": "1615380573411", "deleted": false, "updated": false, - "chat_id": "oc_5ad11d72b830411d72b836c20", + "chat_id": "oc_5ad11d72b830411d72bxxxxxx", "sender": { "id": "cli_9f427eec54ae901b", "id_type": "app_id", "sender_type": "app", - "tenant_key": "736588c9260f175e" + "tenant_key": "736588c926xxxxxx" }, "body": { "content": "text:测试消息" @@ -104,13 +104,13 @@ def get_access_token(cls) -> str: "mentions": [ { "key": "@_user_1", - "id": "ou_155184d1e73cbfb8973e5a9e698e74f2", + "id": "ou_155184d1e73cbfb8973e5axxxxxx", "id_type": "open_id", "name": "Tom", "tenant_key": "736588c9260f175e" } ], - "upper_message_id": "om_40eb06e7b84dc71c03e009ad3c754195" + "upper_message_id": "om_40eb06e7b84dc71c03e009axxxxxx" } } """ From 6ed495df15fac08d34d48f6e8557a55616e6f2b8 Mon Sep 17 00:00:00 2001 From: zeroleo12345 Date: Thu, 12 Feb 2026 22:40:35 +0800 Subject: [PATCH 07/11] fix --- src/utils/feishu.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/utils/feishu.py b/src/utils/feishu.py index 7f0fd11de..3053148f8 100644 --- a/src/utils/feishu.py +++ b/src/utils/feishu.py @@ -93,7 +93,7 @@ def get_access_token(cls) -> str: "updated": false, "chat_id": "oc_5ad11d72b830411d72bxxxxxx", "sender": { - "id": "cli_9f427eec54ae901b", + "id": "cli_9f427eec54axxxxxx", "id_type": "app_id", "sender_type": "app", "tenant_key": "736588c926xxxxxx" @@ -107,7 +107,7 @@ def get_access_token(cls) -> str: "id": "ou_155184d1e73cbfb8973e5axxxxxx", "id_type": "open_id", "name": "Tom", - "tenant_key": "736588c9260f175e" + "tenant_key": "736588c9xxxxxx" } ], "upper_message_id": "om_40eb06e7b84dc71c03e009axxxxxx" From b59c6af564d740cbc30c838a5a470ea3ea57b418 Mon Sep 17 00:00:00 2001 From: zeroleo12345 Date: Thu, 12 Feb 2026 22:44:55 +0800 Subject: [PATCH 08/11] fix --- src/processor/dae_processor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/processor/dae_processor.py b/src/processor/dae_processor.py index f7cae8e75..1fd84ee7d 100755 --- a/src/processor/dae_processor.py +++ b/src/processor/dae_processor.py @@ -96,7 +96,7 @@ def run(self): # 发送报文 try: self.socket.sendto(request.RequestPacket(), request.address) - res_data, from_address = self.socket.recvfrom(__bufsize=1024) + res_data, from_address = self.socket.recvfrom(1024) # buf size: 1024 except Exception as e: log.error(traceback.format_exc()) return False From da3b2e7d68d92871a3156d1babba6f09d7e5b84e Mon Sep 17 00:00:00 2001 From: zeroleo12345 Date: Thu, 12 Feb 2026 23:35:02 +0800 Subject: [PATCH 09/11] fix --- src/utils/feishu.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/utils/feishu.py b/src/utils/feishu.py index 3053148f8..6096a50bd 100644 --- a/src/utils/feishu.py +++ b/src/utils/feishu.py @@ -123,16 +123,16 @@ def send_group_msg(cls, receiver_id: str, text: str): 'Authorization': f'Bearer {access_token}' } data = { - 'chat_id': receiver_id, + 'receive_id': receiver_id, 'msg_type': 'text', - 'content': { + 'content': json.dumps({ 'text': text, - } + }) } - response = requests.post('https://open.feishu.cn/open-apis/message/v4/send/', json=data, headers=headers) - assert response.ok + response = requests.post('https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=chat_id', json=data, headers=headers) body = response.json() log.debug(f'API send_group_msg: {body}') + assert response.ok if body['code'] != 0: raise Exception('飞书群消息发送失败') From 28b3a1ab01205b5d5d922de17b6eb2b98b0ece5f Mon Sep 17 00:00:00 2001 From: zeroleo12345 Date: Thu, 12 Feb 2026 23:35:44 +0800 Subject: [PATCH 10/11] fix --- src/utils/feishu.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/utils/feishu.py b/src/utils/feishu.py index 6096a50bd..6ea745683 100644 --- a/src/utils/feishu.py +++ b/src/utils/feishu.py @@ -1,4 +1,5 @@ import requests +import json import time # 第三方库 from utils.config import settings From 2fe9a603b2af8c73122220a3f62a0efdced64103 Mon Sep 17 00:00:00 2001 From: zeroleo12345 Date: Thu, 12 Feb 2026 23:37:24 +0800 Subject: [PATCH 11/11] fix --- src/utils/feishu.py | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/utils/feishu.py b/src/utils/feishu.py index 6ea745683..16bb39438 100644 --- a/src/utils/feishu.py +++ b/src/utils/feishu.py @@ -63,20 +63,20 @@ def get_access_token(cls) -> str: return cls._ACCESS_TOKEN.token """ - 发送消息. 目前使用的是 历史版本的 发送消息卡片(/open-apis/message/v4/send/) 接口 + 发送消息 https://feishu.apifox.cn/api-58348294 - POST /open-apis/im/v1/messages?receive_id_type=null HTTP/1.1 + POST /open-apis/im/v1/messages?receive_id_type=chat_id HTTP/1.1 Host: open.feishu.cn Authorization: Bearer Content-Type: application/json Content-Length: 189 { - "receive_id": "ou_7d8a6e6df7621556ce0d219xxxxxx", + "receive_id": "ou_7d8a6e6df7621556ce0d21922bxxxxxx", "msg_type": "text", "content": "{\"text\":\"test content\"}", - "uuid": "a0d69e20-1dd1-458b-k525-dfexxxxxx" + "uuid": "a0d69e20-1dd1-458b-k525-dfecaxxxxxx" } :return: @@ -84,17 +84,17 @@ def get_access_token(cls) -> str: "code": 0, "msg": "success", "data": { - "message_id": "om_dc13264520392913993dd051xxxxxx", - "root_id": "om_40eb06e7b84dc71c03e0xxxxxx", - "parent_id": "om_d4be107c616aed9c1da8edxxxxxx", + "message_id": "om_dc13264520392913993dd05xxxxxx", + "root_id": "om_40eb06e7b84dc71c03e009ad3cxxxxxx", + "parent_id": "om_d4be107c616aed9c1da8ed8xxxxxx", "msg_type": "card", "create_time": "1615380573411", "update_time": "1615380573411", "deleted": false, "updated": false, - "chat_id": "oc_5ad11d72b830411d72bxxxxxx", + "chat_id": "oc_5ad11d72b830411d72xxxxxx", "sender": { - "id": "cli_9f427eec54axxxxxx", + "id": "cli_9f427eec54ae901b", "id_type": "app_id", "sender_type": "app", "tenant_key": "736588c926xxxxxx" @@ -105,17 +105,16 @@ def get_access_token(cls) -> str: "mentions": [ { "key": "@_user_1", - "id": "ou_155184d1e73cbfb8973e5axxxxxx", + "id": "ou_155184d1e73cbfb8973e5a9exxxxxx", "id_type": "open_id", "name": "Tom", - "tenant_key": "736588c9xxxxxx" + "tenant_key": "736588c9260xxxxxx" } ], - "upper_message_id": "om_40eb06e7b84dc71c03e009axxxxxx" + "upper_message_id": "om_40eb06e7b84dc71c03e009adxxxxxx" } } """ - @classmethod def send_group_msg(cls, receiver_id: str, text: str): access_token = cls.get_access_token()