81 lines
2.6 KiB
Python
81 lines
2.6 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Nostr Group Setup — Creates the Timmy Time household group on the relay.
|
|
Creates group metadata, posts a test message, logs the group code.
|
|
"""
|
|
import asyncio, json, secrets
|
|
|
|
from nostr_sdk import (
|
|
Keys, Client, NostrSigner, Kind, EventBuilder, Tag, RelayUrl
|
|
)
|
|
|
|
RELAY_WS = "ws://127.0.0.1:2929"
|
|
|
|
def load_nsec(name):
|
|
with open(f"/Users/apayne/.timmy/nostr/agent_keys.json") as f:
|
|
data = json.load(f)
|
|
return data[name]["nsec"], data.get(name, {}).get("npub", "")
|
|
|
|
async def create_group():
|
|
timmy_nsec, timmy_npub = load_nsec("timmy")
|
|
print(f"Using Timmy: {timmy_npub}")
|
|
|
|
keys = Keys.parse(timmy_nsec)
|
|
signer = NostrSigner.keys(keys)
|
|
client = Client(signer)
|
|
|
|
# Connect to local relay (forwarded from VPS)
|
|
relay_url = RelayUrl.parse(RELAY_WS)
|
|
await client.add_relay(relay_url)
|
|
await client.connect()
|
|
|
|
# Generate group code (NIP-29 uses this as the "h" tag value)
|
|
group_code = secrets.token_hex(4)
|
|
|
|
# Group metadata (kind 39000 — replaceable event)
|
|
metadata = json.dumps({
|
|
"name": "Timmy Time",
|
|
"about": "The Timmy Foundation household — sovereign comms for the crew",
|
|
})
|
|
|
|
group_def = EventBuilder(Kind(39000), metadata).tags([
|
|
Tag(["d", group_code]),
|
|
Tag(["name", "Timmy Time"]),
|
|
Tag(["about", "The Timmy Foundation household"]),
|
|
])
|
|
|
|
result = await client.send_event_builder(group_def)
|
|
print(f"\nGroup created on relay.alexanderwhitestone.com:2929")
|
|
print(f" Group code: {group_code}")
|
|
print(f" Event ID: {result.id.to_hex()}")
|
|
|
|
# Post test message as kind 9
|
|
msg = EventBuilder(Kind(9),
|
|
"Timmy speaking: The group is live. Sovereignty and service always."
|
|
).tags([Tag(["h", group_code])])
|
|
result2 = await client.send_event_builder(msg)
|
|
print(f" Test message posted: {result2.id.to_hex()[:16]}...")
|
|
|
|
# Post second message
|
|
msg2 = EventBuilder(Kind(9),
|
|
"All crew: welcome to sovereign comms. No more Telegram dependency."
|
|
).tags([Tag(["h", group_code])])
|
|
result3 = await client.send_event_builder(msg2)
|
|
print(f" Second message posted: {result3.id.to_hex()[:16]}...")
|
|
|
|
await client.disconnect()
|
|
|
|
# Save group config
|
|
config = {
|
|
"relay": "wss://relay.alexanderwhitestone.com:2929",
|
|
"group_code": group_code,
|
|
"created_by": "timmy",
|
|
"group_name": "Timmy Time",
|
|
}
|
|
with open("/Users/apayne/.timmy/nostr/group_config.json", "w") as f:
|
|
json.dump(config, f, indent=2)
|
|
print(f"\nGroup config saved to ~/.timmy/nostr/group_config.json")
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(create_group())
|