-

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