chore(corporate): session 2026-05-07T13-32

This commit is contained in:
한예성
2026-05-07 22:33:12 +09:00
parent 293c51c703
commit 3069c8aee5
67 changed files with 2693 additions and 0 deletions
@@ -0,0 +1,88 @@
#!/usr/bin/env python3
"""Telegram Notify — small wrapper that sends a message to your Telegram bot.
Two modes:
1. No CLI arg → sends a connectivity test ("✅ 텔레그램 연결 정상").
2. With CLI arg(s) → sends those as the message body. Other tools can call
this script to push their summaries.
telegram_v3 — Secretary's tools/telegram_setup.json is the canonical
UI-managed home (input via Skills ⚙️). Falls back to legacy config.md
and finally to youtube_account.json so older setups keep working."""
import os, json, sys, time, re
HERE = os.path.dirname(os.path.abspath(__file__))
ACCOUNT = os.path.join(HERE, "youtube_account.json")
# tools/ → youtube/ → _agents/ → brain root
BRAIN_ROOT = os.path.abspath(os.path.join(HERE, "..", "..", ".."))
SECRETARY_TOOL_JSON = os.path.join(BRAIN_ROOT, "_agents", "secretary", "tools", "telegram_setup.json")
SECRETARY_CFG = os.path.join(BRAIN_ROOT, "_agents", "secretary", "config.md")
def _resolve_telegram():
"""Secretary tool JSON > Secretary legacy md > youtube_account.json."""
token, chat = "", ""
if os.path.exists(SECRETARY_TOOL_JSON):
try:
with open(SECRETARY_TOOL_JSON, "r", encoding="utf-8") as f:
cfg = json.load(f)
token = (cfg.get("TELEGRAM_BOT_TOKEN") or "").strip()
chat = (cfg.get("TELEGRAM_CHAT_ID") or "").strip()
except Exception:
pass
if (not token or not chat) and os.path.exists(SECRETARY_CFG):
try:
with open(SECRETARY_CFG, "r", encoding="utf-8") as f:
txt = f.read()
if not token:
m = re.search(r"TELEGRAM_BOT_TOKEN\s*[:=]\s*([A-Za-z0-9:_\-]+)", txt)
if m: token = m.group(1).strip()
if not chat:
m = re.search(r"TELEGRAM_CHAT_ID\s*[:=]\s*(-?\d+)", txt)
if m: chat = m.group(1).strip()
except Exception:
pass
if (not token or not chat) and os.path.exists(ACCOUNT):
try:
with open(ACCOUNT, "r", encoding="utf-8") as f:
acct = json.load(f)
if not token: token = (acct.get("TELEGRAM_BOT_TOKEN") or "").strip()
if not chat: chat = (acct.get("TELEGRAM_CHAT_ID") or "").strip()
except Exception:
pass
return token, chat
def main():
token, chat = _resolve_telegram()
if not token or not chat:
print("❌ TELEGRAM_BOT_TOKEN 또는 TELEGRAM_CHAT_ID를 못 찾았어요.")
print(" 권장: 비서(Secretary) 클릭 → Skills → 📨 텔레그램 연결 ⚙️ → 폼에 입력")
print(" 봇 만들기: Telegram → @BotFather → /newbot")
print(" chat_id: 봇에 메시지 1회 → https://api.telegram.org/bot<TOKEN>/getUpdates 에서 chat.id 확인")
sys.exit(1)
if len(sys.argv) > 1:
body = " ".join(sys.argv[1:])
else:
body = f"✅ 텔레그램 연결 정상 — {time.strftime('%Y-%m-%d %H:%M:%S')}\n\n비서(Secretary) 또는 YouTube 도구가 이 채널로 보고를 보낼 수 있습니다."
try:
import requests
except ImportError:
print("❌ pip install requests")
sys.exit(1)
try:
r = requests.post(
f"https://api.telegram.org/bot{token}/sendMessage",
json={"chat_id": chat, "text": body, "parse_mode": "Markdown"},
timeout=15,
)
r.raise_for_status()
print(f"✅ 전송 OK ({len(body)}자)")
except Exception as e:
print(f"❌ 전송 실패: {e}")
if "Bad Request" in str(e):
print(" chat_id가 정확한지, 봇과 한 번이라도 대화를 시작했는지 확인하세요.")
sys.exit(1)
if __name__ == "__main__":
main()