{"type":"rich","version":"1.0","title":"gan wrote","author_name":"gan (npub13z…l2rce)","author_url":"https://yabu.me/npub13zyg3zysfylqc6nwfgj2uvce5rtlck2u50vwtjhpn92wzyusprfsdl2rce","provider_name":"njump","provider_url":"https://yabu.me","html":"import json\nimport hashlib\nimport hmac\nimport time\nimport random\nimport websocket\nimport chardet\nimport logging\n\n# 设置日志级别和格式\nlogging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname)s] %(message)s')\n\n# Nostr公钥\nnostr_pubkey = \"\"\n\n# Nostr私钥\nnostr_privkey = \"\"\n\n# JLPT N1文法列表\nn1_grammar = [\n    \"こんにちは\",\n    \"美味しい\",\n    \"おはよう御座います\",\n    \"サヨナラ\",\n    # 添加更多JLPT N1文法...\n]\n\n# 事件标签\ntags = []\n\n# 事件类型\nkind = 1\n\n# Nostr Relay网址列表\nrelays = [\n    \"wss://relay.damus.io\",\n    \"wss://nos.lol\",\n    \"wss://nostr.mom\",\n    \"wss://relay.coinos.io/\",\n    \"wss://offchain.pub/\"\n]\n\ndef send_nostr_message():\n    try:\n        # 选择随机的JLPT N1文法\n        content = random.choice(n1_grammar)\n\n        # 生成事件创建时间\n        created_at = int(time.time())\n\n        # 生成事件数据\n        event_data = [\n            0,\n            nostr_pubkey,\n            created_at,\n            kind,\n            tags,\n            content\n        ]\n\n        # 序列化事件数据\n        event_json = json.dumps(event_data, separators=(',', ':'))\n\n        # 计算事件ID\n        event_id = hashlib.sha256(event_json.encode('utf-8')).hexdigest()\n\n        # 计算事件签名\n        event_sig = hmac.new(nostr_privkey.encode(), event_json.encode('utf-8'), hashlib.sha256).hexdigest()\n\n        # 生成Nostr事件\n        event = {\n            \"id\": event_id,\n            \"pubkey\": nostr_pubkey,\n            \"created_at\": created_at,\n            \"kind\": kind,\n            \"tags\": tags,\n            \"content\": content,\n            \"sig\": event_sig\n        }\n\n        # 以JSON格式显示发送的内容\n        logging.info(\"发送的内容：\")\n        logging.info(json.dumps(event, indent=4, ensure_ascii=False))\n\n        # 发送事件到多个Relays\n        for relay in relays:\n            try:\n                ws = websocket.create_connection(relay)\n                logging.info(f\"成功连接到 {relay}\")\n                ws.send(json.dumps(event))\n                logging.info(f\"成功发送事件到 {relay}\")\n                ws.close()\n            except websocket.WebSocketException as e:\n                logging.error(f\"连接到 {relay} 失败：{e}\")\n    except Exception as e:\n        logging.error(f\"发送事件失败：{e}\")\n\n# 每小时运行一次send_nostr_message函数\nwhile True:\n    try:\n        send_nostr_message()\n        time.sleep(3600)\n    except KeyboardInterrupt:\n        logging.info(\"程序终止\")\n        break\n    except Exception as e:\n        logging.error(f\"程序运行失败：{e}\")"}
