From d13fb1b0700dea686e98185d09c5cdd7d5f525be Mon Sep 17 00:00:00 2001 From: zfb132 Date: Sat, 2 Sep 2023 13:53:34 +0800 Subject: [PATCH] add feat: use feishu bot --- app/config.py | 8 +++++- app/model/FeishuBot.py | 52 +++++++++++++++++++++++++++++++++++++++ app/model/HandleFrpMsg.py | 11 ++++++--- 3 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 app/model/FeishuBot.py diff --git a/app/config.py b/app/config.py index d418641..8d39420 100644 --- a/app/config.py +++ b/app/config.py @@ -11,7 +11,13 @@ DINGTALK_SECRET_KEY = "SECff11ffffffffffffffffffffffffffff896c5cb6d21234567898765432123876" # 钉钉群机器人的接入秘钥 DINGTALK_ACCESS_TOKEN = "896c5cb6d212896c5cb6d212ac9d9dac896c5cb6d2120dd24896c5cb6d2128c4" -# 若机器人的任一秘钥为空,则不发送钉钉消息 +# 飞书群机器人的webhook地址 +FEISHU_WEBHOOK = "https://open.feishu.cn/open-apis/bot/v2/hook/e4e2cc3f-5864-44b5-95c4-6adaa69d7a7b" +# 飞书群机器人的安全密钥 +FEISHU_SECRET_KEY = "agPhgtfrdyhYfrTeWdQsX" +# 多选项:dingtalk feishu +RECEIVERS = ["dingtalk", "feishu"] +# 若机器人的任一秘钥为空,则不发送消息 # frps.ini,若未设置,则写为""即可 subdomain_host = "example.cn" diff --git a/app/model/FeishuBot.py b/app/model/FeishuBot.py new file mode 100644 index 0000000..0a62c99 --- /dev/null +++ b/app/model/FeishuBot.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# author: 'zfb' +# time: 2023-09-02 11:47 + +import base64 +import hashlib +import hmac +import json +import requests +import time +import urllib.parse + +import app.config as config + +webhook_url = config.FEISHU_WEBHOOK +token = config.FEISHU_SECRET_KEY + +headers = { + 'Content-Type': 'application/json;charset=utf-8' +} + +# 获取时间戳和签名 +def get_params(secret): + timestamp = str(round(time.time())) + string_to_sign = '{}\n{}'.format(timestamp, secret) + hmac_code = hmac.new(string_to_sign.encode("utf-8"), digestmod=hashlib.sha256).digest() + # 对结果进行base64处理 + sign = base64.b64encode(hmac_code).decode('utf-8') + return timestamp, sign + +# 发送消息并@指定成员 +def send_text(txt): + # 判断是否有钉钉机器人的秘钥 + if not webhook_url or not token: + return + timestamp, sign = get_params(token) + request_dict = { + "timestamp": timestamp, + "sign": sign, + "msg_type": "text", + "content": { + "text": txt + } + } + # 保证中文可以正常发送 + data = json.dumps(request_dict, ensure_ascii=False).encode('utf-8') + response = requests.post(webhook_url, data, headers=headers).content + print(response.decode('utf-8')) + +if __name__ == "__main__": + send_text("我在测试") \ No newline at end of file diff --git a/app/model/HandleFrpMsg.py b/app/model/HandleFrpMsg.py index bd1776f..a92b11d 100644 --- a/app/model/HandleFrpMsg.py +++ b/app/model/HandleFrpMsg.py @@ -7,8 +7,9 @@ import logging import time -from app.config import SSH_IP_MODE, subdomain_host -from app.model.DingTalkBot import send_text +from app.config import SSH_IP_MODE, subdomain_host, RECEIVERS +from app.model.DingTalkBot import send_text as send_text_dingtalk +from app.model.FeishuBot import send_text as send_text_feishu from app.model.SSHFilter import ip_check, ip2geo logging = logging.getLogger('runserver.handlefrpmsg') @@ -90,5 +91,9 @@ def handlemsg(data): # 基本不会出现此情况 return True # 钉钉发送给管理员 - send_text(txt) + for receiver in RECEIVERS: + if receiver == "dingtalk": + send_text_dingtalk(txt) + elif receiver == "feishu": + send_text_feishu(txt) return is_allow_ssh