from enum import StrEnum class FeishuReceiveIdType(StrEnum): CHAT_ID = "chat_id" class FeishuMessageType(StrEnum): TEXT = "text" INTERACTIVE = "interactive" class FeishuEventSource(StrEnum): WEBHOOK = "webhook" LONG_CONNECTION = "long_connection" class FeishuPayloadKey(StrEnum): APP_ID = "app_id" APP_SECRET = "app_secret" CARD = "card" CHALLENGE = "challenge" CODE = "code" CONFIG = "config" CONTENT = "content" DIV = "div" DATA = "data" ELEMENTS = "elements" EXPIRE = "expire" FEISHU_ERROR = "feishu_error" HEADER = "header" IMAGE = "image" IMAGE_KEY = "image_key" IMAGE_TYPE = "image_type" IMG = "img" IMG_KEY = "img_key" ALT = "alt" EVENT = "event" EVENT_ID = "event_id" EVENT_TYPE = "event_type" LARK_MARKDOWN = "lark_md" MESSAGE = "message" MESSAGE_ID = "message_id" MESSAGE_TYPE = "msg_type" OPEN_ID = "open_id" PLAIN_TEXT = "plain_text" RECEIVE_ID = "receive_id" RECEIVE_ID_TYPE = "receive_id_type" SENDER = "sender" SENDER_ID = "sender_id" TAG = "tag" TENANT_ACCESS_TOKEN = "tenant_access_token" TEXT = "text" TITLE = "title" TOKEN = "token" USER_ID = "user_id" WIDE_SCREEN_MODE = "wide_screen_mode" class FeishuCommandKey(StrEnum): TEXT = "text" CHAT_ID = "chat_id" ACTOR = "actor" class FeishuResponseKey(StrEnum): OK = "ok" ACCEPTED = "accepted" HANDLED = "handled" DUPLICATE = "duplicate" RESULT = "result" CHALLENGE = "challenge" PROVIDER_RESPONSE = "provider_response" STATUS = "status" APPROVER = "approver" class FeishuCommandResultKey(StrEnum): COMMAND = "command" REPLY_TYPE = "reply_type" TITLE = "title" CONTENT = "content" LINES = "lines" PROVIDER_RESPONSE = "provider_response" class FeishuCommandName(StrEnum): RULE_CREATE = "rule_create" RULE_LIST = "rule_list" RULE_DISABLE = "rule_disable" RULE_ENABLE = "rule_enable" FINANCE_NEEDS = "finance_needs" PROJECT_FINANCE = "project_finance" MARKET_OVERVIEW = "market_overview" MARKET_MACRO = "market_macro" MARKET_ANNOUNCEMENTS = "market_announcements" STOCK_ANALYSIS = "stock_analysis" WATCHLIST_ADD = "watchlist_add" WATCHLIST_LIST = "watchlist_list" DAILY_BRIEF = "daily_brief" PROJECT_WEEKLY = "project_weekly" ATTENDANCE_SUMMARY = "attendance_summary" RISK_SUMMARY = "risk_summary" AI_ASK = "ai_ask" FALLBACK_AI = "fallback_ai" class FeishuReplyType(StrEnum): CARD = "card" TEXT = "text" class FeishuEventReceiptKey(StrEnum): EVENT_KEY = "event_key" SOURCE = "source" EVENT_ID = "event_id" MESSAGE_ID = "message_id" class FeishuCardKey(StrEnum): ACTIONS = "actions" BUTTON_TYPE = "type" VALUE = "value" FEISHU_TENANT_TOKEN_PATH = "/auth/v3/tenant_access_token/internal" FEISHU_MESSAGE_PATH = "/im/v1/messages" FEISHU_IMAGE_PATH = "/im/v1/images" FEISHU_DEFAULT_OPEN_API_DOMAIN = "https://open.feishu.cn" FEISHU_AUTH_MISSING = "Feishu app credentials are not configured" FEISHU_VERIFICATION_TOKEN_REQUIRED = "FEISHU_VERIFICATION_TOKEN is required" FEISHU_INVALID_TOKEN = "Invalid Feishu token" FEISHU_RECEIVE_ID_MISSING = "receive_id or FEISHU_DEFAULT_CHAT_ID is required" FEISHU_SUCCESS_CODE = 0 FEISHU_DEFAULT_TOKEN_EXPIRE_SECONDS = 7200 FEISHU_TOKEN_EXPIRE_SAFETY_SECONDS = 300 FEISHU_AI_REPLY_TITLE = "AI 回复" FEISHU_EMPTY_CARD_TEXT = "暂无数据" FEISHU_MENTION_PATTERN = r"@\S+" FEISHU_ZERO_WIDTH_SPACE = "\u200b"