mirror of
https://github.com/aljazceru/sciencestr.git
synced 2025-12-17 14:04:23 +01:00
60 lines
2.0 KiB
Python
60 lines
2.0 KiB
Python
from nostr_sdk import Keys, Client, Event, EventBuilder, Filter, HandleNotification, Timestamp, nip04_decrypt, SecretKey, init_logger, LogLevel
|
|
import time
|
|
import requests
|
|
from settings import *
|
|
|
|
|
|
init_logger(LogLevel.DEBUG)
|
|
|
|
sk = SecretKey.from_hex(NOSTR_KEY)
|
|
keys = Keys(sk)
|
|
sk = keys.secret_key()
|
|
pk = keys.public_key()
|
|
print(f"Bot public key: {pk.to_bech32()}")
|
|
|
|
client = Client(keys)
|
|
|
|
client.add_relay("wss://relay.damus.io")
|
|
client.add_relay("wss://nostr.mom")
|
|
client.add_relay("wss://nostr.oxtr.dev")
|
|
client.connect()
|
|
|
|
filter = Filter().pubkey(pk).kind(4).since(Timestamp.now())
|
|
client.subscribe([filter])
|
|
|
|
# function to format results into title and url
|
|
|
|
def format_answer(response):
|
|
# Extract the answer
|
|
formatted_response = "Short answer:\n" + response["short_answer"] + "\n\nExcerpts from articles:\n" + response["chunks"]
|
|
return formatted_response
|
|
|
|
class NotificationHandler(HandleNotification):
|
|
def handle(self, relay_url, event):
|
|
print(f"Received new event from {relay_url}: {event.as_json()}")
|
|
if event.kind() == 4:
|
|
print("Decrypting event")
|
|
try:
|
|
msg = nip04_decrypt(sk, event.pubkey(), event.content())
|
|
print(f"Received new msg: {msg}")
|
|
params = {'query': str(msg)}
|
|
try:
|
|
resp = requests.get('http://127.0.0.1:6000/ask', params=params)
|
|
except Exception as e:
|
|
print(f"Error during request: {e}")
|
|
if resp.status_code == 200:
|
|
print("Sending answer")
|
|
event = EventBuilder.new_encrypted_direct_msg(keys, event.pubkey(), f"{resp.text}", event.id()).to_event(keys)
|
|
client.send_event(event)
|
|
else:
|
|
print(f"Error during content decryption: {resp.text}")
|
|
except Exception as e:
|
|
print(f"Error during content decryption: {e}")
|
|
|
|
def handle_msg(self, relay_url, msg):
|
|
None
|
|
|
|
client.handle_notifications(NotificationHandler())
|
|
|
|
while True:
|
|
time.sleep(5.0) |