Why Nostr? What is Njump?
2025-04-22 16:34:19
in reply to

🔞鸟巢🔞 on Nostr: ### aibot源代码第二部分 ```python def run(): messages_done = [] private_key, ...

### aibot源代码第二部分

```python
def run():
messages_done = []
private_key, pubkey_hex = get_keypair()

print("Pubkey: " + private_key.public_key.bech32())
print("Pubkey (hex): " + pubkey_hex)

start_timestamp = get_timestamp()

while(True):

filters = FiltersList([
Filters(pubkey_refs=[pubkey_hex],
kinds=[EventKind.ENCRYPTED_DIRECT_MESSAGE, EventKind.TEXT_NOTE],
since=start_timestamp)
])
subscription_id = uuid.uuid1().hex
relay_manager_for_pubkey.add_subscription_on_all_relays(subscription_id, filters)
relay_manager_for_pubkey.run_sync()
while relay_manager_for_pubkey.message_pool.has_notices():
notice_msg = relay_manager_for_pubkey.message_pool.get_notice()
print("Notice: " + notice_msg.content)
while relay_manager_for_pubkey.message_pool.has_events():
event_msg = relay_manager_for_pubkey.message_pool.get_event()
# is message too old?
# we don't need this anymore, we filter events and then remember processed events
#if(time.time() - 60 > event_msg.event.created_at):
# continue
# has it already been processed?
if(event_msg.event.id in messages_done):
continue

messages_done.append(event_msg.event.id)
recipient_pubkey = event_msg.event.pubkey
if event_msg.event.kind == EventKind.ENCRYPTED_DIRECT_MESSAGE:
msg_decrypted = EncryptedDirectMessage()
msg_decrypted.decrypt(private_key_hex=private_key.hex(), encrypted_message=event_msg.event.content, public_key_hex=event_msg.event.pubkey)
if (len(msg_decrypted.cleartext_content) < 4):
continue
print ("Private message '" +msg_decrypted.cleartext_content + "' from " + event_msg.event.pubkey)
response = respond(msg_decrypted.cleartext_content)
# print("--> " + response)
print("Sending response to " + recipient_pubkey)

dm = EncryptedDirectMessage()
dm.encrypt(private_key.hex(),
recipient_pubkey=recipient_pubkey,
cleartext_content=response,
)
dm_event = dm.to_event()
dm_event.sign(private_key.hex())
relay_manager_for_pubkey.publish_event(dm_event)
print("Response sent to " + recipient_pubkey)
elif event_msg.event.kind == EventKind.TEXT_NOTE:
print(f"Received public note: {event_msg.event.content}")
content = re.sub(r'\b(nostr:)?(nprofile|npub)[0-9a-z]+[\s]*', '', event_msg.event.content)
if (len(content) < 4):
continue
# 获取引用的上下文
ref_contents = process_event(event_msg.event)
print(f"Received public note: {content}")
if recipient_pubkey != pubkey_hex:
print("Responding...")
reply = Event(
content=respond(content, ref_contents),
)
reply.add_event_ref(event_msg.event.id)
reply.add_pubkey_ref(event_msg.event.pubkey)
reply.sign(private_key.hex())
relay_manager_for_pubkey.publish_event(reply)
print("Public response sent.")
gc.collect()

time.sleep(10)
relay_manager_for_pubkey.close_all_relay_connections()

try:
run()
except KeyboardInterrupt:
print("KeyboardInterrupt")
relay_manager_for_pubkey.close_all_relay_connections()
relay_manager_for_ids.close_all_relay_connections()
exit(1)
except:
print("Exception")
relay_manager_for_pubkey.close_all_relay_connections()
relay_manager_for_ids.close_all_relay_connections()
run()
```
Author Public Key
npub13m4q96y3yzzev25npv5tamfxsw5csc2dax3njag2uzesv83vdkcs9973fv