Files
timmy-home/nostr/create_group.py

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())