diff --git a/examples/ollama_dvm/test_client.py b/examples/ollama_dvm/test_client.py index 183143e..b16aa35 100644 --- a/examples/ollama_dvm/test_client.py +++ b/examples/ollama_dvm/test_client.py @@ -68,7 +68,7 @@ def nostr_client(): print("[Nostr Client]: " + event.content()) elif event.kind() == 4: - dec_text = nip04_decrypt(sk, event.pubkey(), event.content()) + dec_text = nip04_decrypt(sk, event.author(), event.content()) print("[Nostr Client]: " + f"Received new msg: {dec_text}") elif event.kind() == 9735: diff --git a/examples/tts_dvm/test_client.py b/examples/tts_dvm/test_client.py index 88b6e61..bd211f3 100644 --- a/examples/tts_dvm/test_client.py +++ b/examples/tts_dvm/test_client.py @@ -75,7 +75,7 @@ def nostr_client(): print("[Nostr Client]: " + event.content()) elif event.kind() == 4: - dec_text = nip04_decrypt(sk, event.pubkey(), event.content()) + dec_text = nip04_decrypt(sk, event.author(), event.content()) print("[Nostr Client]: " + f"Received new msg: {dec_text}") elif event.kind() == 9735: diff --git a/nostr_dvm/bot.py b/nostr_dvm/bot.py index 336e96f..cde4ece 100644 --- a/nostr_dvm/bot.py +++ b/nostr_dvm/bot.py @@ -83,12 +83,12 @@ class Bot: return def handle_dm(nostr_event): - sender = nostr_event.pubkey().to_hex() + sender = nostr_event.author().to_hex() if sender == self.keys.public_key().to_hex(): return try: - decrypted_text = nip04_decrypt(self.keys.secret_key(), nostr_event.pubkey(), nostr_event.content()) + decrypted_text = nip04_decrypt(self.keys.secret_key(), nostr_event.author(), nostr_event.content()) user = get_or_add_user(db=self.dvm_config.DB, npub=sender, client=self.client, config=self.dvm_config) print("[" + self.NAME + "] Message from " + user.name + ": " + decrypted_text) @@ -152,7 +152,7 @@ class Bot: elif decrypted_text.lower().startswith("balance"): time.sleep(3.0) - evt = EventBuilder.new_encrypted_direct_msg(self.keys, nostr_event.pubkey(), + evt = EventBuilder.encrypted_direct_msg(self.keys, nostr_event.author(), "Your current balance is " + str( user.balance) + " Sats. Zap me to add to your balance. I will use your balance interact with the DVMs for you.\n" "I support both public and private Zaps, as well as Zapplepay.\n" @@ -172,12 +172,12 @@ class Bot: else: time.sleep(2.0) message = "Error: " + cashu_message + ". Token has not been redeemed." - evt = EventBuilder.new_encrypted_direct_msg(self.keys, PublicKey.from_hex(sender), message, + evt = EventBuilder.encrypted_direct_msg(self.keys, PublicKey.from_hex(sender), message, None).to_event(self.keys) send_event(evt, client=self.client, dvm_config=self.dvm_config) elif decrypted_text.lower().startswith("what's the second best"): time.sleep(3.0) - evt = EventBuilder.new_encrypted_direct_msg(self.keys, nostr_event.pubkey(), + evt = EventBuilder.encrypted_direct_msg(self.keys, nostr_event.author(), "No, there is no second best.\n\nhttps://cdn.nostr.build/p/mYLv.mp4", nostr_event.id()).to_event(self.keys) send_event(evt, client=self.client, dvm_config=self.dvm_config) @@ -212,7 +212,7 @@ class Bot: if is_encrypted: if ptag == self.keys.public_key().to_hex(): tags_str = nip04_decrypt(Keys.from_sk_str(dvm_config.PRIVATE_KEY).secret_key(), - nostr_event.pubkey(), nostr_event.content()) + nostr_event.author(), nostr_event.content()) params = json.loads(tags_str) params.append(Tag.parse(["p", ptag]).as_vec()) params.append(Tag.parse(["encrypted"]).as_vec()) @@ -236,17 +236,17 @@ class Bot: if status == "success" or status == "error" or status == "processing" or status == "partial" and content != "": entry = next((x for x in self.job_list if x['event_id'] == etag), None) - if entry is not None and entry['dvm_key'] == nostr_event.pubkey().to_hex(): + if entry is not None and entry['dvm_key'] == nostr_event.author().to_hex(): user = get_or_add_user(db=self.dvm_config.DB, npub=entry['npub'], client=self.client, config=self.dvm_config) time.sleep(2.0) - reply_event = EventBuilder.new_encrypted_direct_msg(self.keys, + reply_event = EventBuilder.encrypted_direct_msg(self.keys, PublicKey.from_hex(entry['npub']), content, None).to_event(self.keys) print(status + ": " + content) print( - "[" + self.NAME + "] Received reaction from " + nostr_event.pubkey().to_hex() + " message to orignal sender " + user.name) + "[" + self.NAME + "] Received reaction from " + nostr_event.author().to_hex() + " message to orignal sender " + user.name) send_event(reply_event, client=self.client, dvm_config=dvm_config) elif status == "payment-required" or status == "partial": @@ -256,7 +256,7 @@ class Bot: amount = int(amount_msats / 1000) entry = next((x for x in self.job_list if x['event_id'] == etag), None) if entry is not None and entry['is_paid'] is False and entry[ - 'dvm_key'] == nostr_event.pubkey().to_hex(): + 'dvm_key'] == nostr_event.author().to_hex(): # if we get a bolt11, we pay and move on user = get_or_add_user(db=self.dvm_config.DB, npub=entry["npub"], client=self.client, config=self.dvm_config) @@ -266,7 +266,7 @@ class Bot: iswhitelisted=user.iswhitelisted, isblacklisted=user.isblacklisted, nip05=user.nip05, lud16=user.lud16, name=user.name, lastactive=Timestamp.now().as_secs()) - evt = EventBuilder.new_encrypted_direct_msg(self.keys, + evt = EventBuilder.encrypted_direct_msg(self.keys, PublicKey.from_hex(entry["npub"]), "Paid " + str( amount) + " Sats from balance to DVM. New balance is " + @@ -280,7 +280,7 @@ class Bot: else: print("Bot payment-required") time.sleep(2.0) - evt = EventBuilder.new_encrypted_direct_msg(self.keys, + evt = EventBuilder.encrypted_direct_msg(self.keys, PublicKey.from_hex(entry["npub"]), "Current balance: " + str( user.balance) + " Sats. Balance of " + str( @@ -295,7 +295,7 @@ class Bot: bolt11 = tag.as_vec()[2] # else we create a zap else: - user = get_or_add_user(db=self.dvm_config.DB, npub=nostr_event.pubkey().to_hex(), + user = get_or_add_user(db=self.dvm_config.DB, npub=nostr_event.author().to_hex(), client=self.client, config=self.dvm_config) print("Paying: " + user.name) bolt11 = zaprequest(user.lud16, amount, "Zap", nostr_event, self.keys, @@ -332,7 +332,7 @@ class Bot: entry = next((x for x in self.job_list if x['event_id'] == etag), None) if entry is not None and entry[ - 'dvm_key'] == nostr_event.pubkey().to_hex(): + 'dvm_key'] == nostr_event.author().to_hex(): print(entry) user = get_or_add_user(db=self.dvm_config.DB, npub=entry['npub'], client=self.client, config=self.dvm_config) @@ -341,12 +341,12 @@ class Bot: content = nostr_event.content() if is_encrypted: if ptag == self.keys.public_key().to_hex(): - content = nip04_decrypt(self.keys.secret_key(), nostr_event.pubkey(), content) + content = nip04_decrypt(self.keys.secret_key(), nostr_event.author(), content) else: return dvms = [x for x in self.dvm_config.SUPPORTED_DVMS if - x.PUBLIC_KEY == nostr_event.pubkey().to_hex() and x.KIND == nostr_event.kind() - 1000] + x.PUBLIC_KEY == nostr_event.author().to_hex() and x.KIND == nostr_event.kind() - 1000] if len(dvms) > 0: dvm = dvms[0] if dvm.dvm_config.EXTERNAL_POST_PROCESS_TYPE != PostProcessFunctionType.NONE: @@ -357,7 +357,7 @@ class Bot: print("[" + self.NAME + "] Received results, message to orignal sender " + user.name) time.sleep(1.0) - reply_event = EventBuilder.new_encrypted_direct_msg(self.keys, + reply_event = EventBuilder.encrypted_direct_msg(self.keys, PublicKey.from_hex(user.npub), content, None).to_event(self.keys) @@ -383,8 +383,8 @@ class Bot: entry = next((x for x in self.job_list if x['event_id'] == etag), None) print(entry) # print(entry['dvm_key']) - # print(str(zapped_event.pubkey().to_hex())) - # print(str(zap_event.pubkey().to_hex())) + # print(str(zapped_event.author().to_hex())) + # print(str(zap_event.author().to_hex())) print(sender) if entry is not None and entry['is_paid'] is True and entry['dvm_key'] == sender: # if we get a bolt11, we pay and move on @@ -425,7 +425,7 @@ class Bot: index += 1 time.sleep(3.0) - evt = EventBuilder.new_encrypted_direct_msg(self.keys, nostr_event.pubkey(), + evt = EventBuilder.encrypted_direct_msg(self.keys, nostr_event.author(), message + "\nSelect an Index and provide an input (" "e.g. \"2 A purple ostrich\")\nType \"index info\" to learn " "more about each DVM. (e.g. \"2 info\")\n\n" @@ -436,7 +436,7 @@ class Bot: def answer_blacklisted(nostr_event): # For some reason an admin might blacklist npubs, e.g. for abusing the service - evt = EventBuilder.new_encrypted_direct_msg(self.keys, nostr_event.pubkey(), + evt = EventBuilder.encrypted_direct_msg(self.keys, nostr_event.author(), "Your are currently blocked from all " "services.", None).to_event(self.keys) send_event(evt, client=self.client, dvm_config=dvm_config) @@ -445,10 +445,10 @@ class Bot: info = print_dvm_info(self.client, index) time.sleep(2.0) if info is not None: - evt = EventBuilder.new_encrypted_direct_msg(self.keys, nostr_event.pubkey(), + evt = EventBuilder.encrypted_direct_msg(self.keys, nostr_event.author(), info, None).to_event(self.keys) else: - evt = EventBuilder.new_encrypted_direct_msg(self.keys, nostr_event.pubkey(), + evt = EventBuilder.encrypted_direct_msg(self.keys, nostr_event.author(), "No NIP89 Info found for " + self.dvm_config.SUPPORTED_DVMS[index].NAME, None).to_event(self.keys) @@ -463,7 +463,7 @@ class Bot: if len(split) == 1: remaining_text = decrypted_text.replace(split[0], "") params = remaining_text.split(" -") - tag = Tag.parse(["param", "user", nostr_event.pubkey().to_hex()]) + tag = Tag.parse(["param", "user", nostr_event.author().to_hex()]) tags.append(tag) for i in params: print(i) diff --git a/nostr_dvm/dvm.py b/nostr_dvm/dvm.py index 3cd598a..4378850 100644 --- a/nostr_dvm/dvm.py +++ b/nostr_dvm/dvm.py @@ -89,7 +89,7 @@ class DVM: if nip90_event is None: return - user = get_or_add_user(self.dvm_config.DB, nip90_event.pubkey().to_hex(), client=self.client, + user = get_or_add_user(self.dvm_config.DB, nip90_event.author().to_hex(), client=self.client, config=self.dvm_config) cashu = "" p_tag_str = "" @@ -334,12 +334,12 @@ class DVM: dvm_config=self.dvm_config, ) if amount > 0 and self.dvm_config.LNBITS_ADMIN_KEY != "": - user = get_or_add_user(self.dvm_config.DB, original_event.pubkey().to_hex(), + user = get_or_add_user(self.dvm_config.DB, original_event.author().to_hex(), client=self.client, config=self.dvm_config) print(user.lud16 + " " + str(amount)) bolt11 = zaprequest(user.lud16, amount, "Couldn't finish job, returning sats", - original_event, - self.keys, self.dvm_config, zaptype="private") + original_event, "", + self.keys, self.dvm_config.RELAY_LIST, zaptype="private") if bolt11 is None: print("Receiver has no Lightning address, can't zap back.") return @@ -352,7 +352,7 @@ class DVM: original_event = Event.from_json(original_event_as_str) request_tag = Tag.parse(["request", original_event_as_str]) e_tag = Tag.parse(["e", original_event.id().to_hex()]) - p_tag = Tag.parse(["p", original_event.pubkey().to_hex()]) + p_tag = Tag.parse(["p", original_event.author().to_hex()]) alt_tag = Tag.parse(["alt", "This is the result of a NIP90 DVM AI task with kind " + str( original_event.kind()) + ". The task was: " + original_event.content()]) status_tag = Tag.parse(["status", "success"]) @@ -372,7 +372,7 @@ class DVM: if encrypted: print(content) - content = nip04_encrypt(self.keys.secret_key(), PublicKey.from_hex(original_event.pubkey().to_hex()), + content = nip04_encrypt(self.keys.secret_key(), PublicKey.from_hex(original_event.author().to_hex()), content) reply_event = EventBuilder(original_event.kind() + 1000, str(content), reply_tags).to_event(self.keys) @@ -389,7 +389,7 @@ class DVM: alt_description, reaction = build_status_reaction(status, task, amount, content) e_tag = Tag.parse(["e", original_event.id().to_hex()]) - p_tag = Tag.parse(["p", original_event.pubkey().to_hex()]) + p_tag = Tag.parse(["p", original_event.author().to_hex()]) alt_tag = Tag.parse(["alt", alt_description]) status_tag = Tag.parse(["status", status]) reply_tags = [e_tag, alt_tag, status_tag] @@ -464,7 +464,7 @@ class DVM: str_tags.append(element.as_vec()) content = json.dumps(str_tags) - content = nip04_encrypt(self.keys.secret_key(), PublicKey.from_hex(original_event.pubkey().to_hex()), + content = nip04_encrypt(self.keys.secret_key(), PublicKey.from_hex(original_event.author().to_hex()), content) reply_tags = encryption_tags @@ -527,7 +527,7 @@ class DVM: dvm_config=self.dvm_config) # Zapping back the user on error if amount > 0 and self.dvm_config.LNBITS_ADMIN_KEY != "": - user = get_or_add_user(self.dvm_config.DB, job_event.pubkey().to_hex(), + user = get_or_add_user(self.dvm_config.DB, job_event.author().to_hex(), client=self.client, config=self.dvm_config) print(user.lud16 + " " + str(amount)) bolt11 = zaprequest(user.lud16, amount, "Couldn't finish job, returning sats", job_event, user.npub, diff --git a/nostr_dvm/tasks/discovery_inactive_follows.py b/nostr_dvm/tasks/discovery_inactive_follows.py index d5e5283..13a17d8 100644 --- a/nostr_dvm/tasks/discovery_inactive_follows.py +++ b/nostr_dvm/tasks/discovery_inactive_follows.py @@ -43,7 +43,7 @@ class DiscoverInactiveFollows(DVMTaskInterface): request_form = {"jobID": event.id().to_hex()} # default values - user = event.pubkey().to_hex() + user = event.author().to_hex() since_days = 90 for tag in event.tags(): diff --git a/nostr_dvm/utils/database_utils.py b/nostr_dvm/utils/database_utils.py index 0572647..16e9250 100644 --- a/nostr_dvm/utils/database_utils.py +++ b/nostr_dvm/utils/database_utils.py @@ -179,7 +179,7 @@ def update_user_balance(db, npub, additional_sats, client, config): message = ("Added " + str(additional_sats) + " Sats to balance. New balance is " + str(new_balance) + " Sats.") - evt = EventBuilder.new_encrypted_direct_msg(keys, PublicKey.from_hex(npub), message, + evt = EventBuilder.encrypted_direct_msg(keys, PublicKey.from_hex(npub), message, None).to_event(keys) send_event(evt, client=client, dvm_config=config) diff --git a/nostr_dvm/utils/nip89_utils.py b/nostr_dvm/utils/nip89_utils.py index 5db4530..37d5f98 100644 --- a/nostr_dvm/utils/nip89_utils.py +++ b/nostr_dvm/utils/nip89_utils.py @@ -50,7 +50,7 @@ def fetch_nip89_paramters_for_deletion(keys, eventid, client, dvmconfig): print("No dtag found") return - if event.pubkey().to_hex() == keys.public_key().to_hex(): + if event.author().to_hex() == keys.public_key().to_hex(): nip89_delete_announcement(event.id().to_hex(), keys, d_tag, client, dvmconfig) print("NIP89 announcement deleted from known relays!") else: @@ -85,11 +85,11 @@ def nip89_fetch_events_pubkey(client, pubkey, kind): dvms = {} for event in events: - if dvms.get(event.pubkey().to_hex()): - if dvms.get(event.pubkey().to_hex()).created_at().as_secs() < event.created_at().as_secs(): - dvms[event.pubkey().to_hex()] = event + if dvms.get(event.author().to_hex()): + if dvms.get(event.author().to_hex()).created_at().as_secs() < event.created_at().as_secs(): + dvms[event.author().to_hex()] = event else: - dvms[event.pubkey().to_hex()] = event + dvms[event.author().to_hex()] = event # should be one element of the kind now for dvm in dvms: diff --git a/nostr_dvm/utils/nostr_utils.py b/nostr_dvm/utils/nostr_utils.py index f0a1af0..0d1a2b4 100644 --- a/nostr_dvm/utils/nostr_utils.py +++ b/nostr_dvm/utils/nostr_utils.py @@ -117,7 +117,7 @@ def check_and_decrypt_tags(event, dvm_config): elif p == dvm_config.PUBLIC_KEY: tags_str = nip04_decrypt(Keys.from_sk_str(dvm_config.PRIVATE_KEY).secret_key(), - event.pubkey(), event.content()) + event.author(), event.content()) params = json.loads(tags_str) params.append(Tag.parse(["p", p]).as_vec()) params.append(Tag.parse(["encrypted"]).as_vec()) @@ -142,12 +142,12 @@ def check_and_decrypt_own_tags(event, dvm_config): p = tag.as_vec()[1] if is_encrypted: - if dvm_config.PUBLIC_KEY != event.pubkey().to_hex(): + if dvm_config.PUBLIC_KEY != event.author().to_hex(): print("[" + dvm_config.NIP89.NAME + "] Task encrypted and not addressed to this DVM, " "skipping..") return None - elif event.pubkey().to_hex() == dvm_config.PUBLIC_KEY: + elif event.author().to_hex() == dvm_config.PUBLIC_KEY: tags_str = nip04_decrypt(Keys.from_sk_str(dvm_config.PRIVATE_KEY).secret_key(), PublicKey.from_hex(p), event.content()) params = json.loads(tags_str) diff --git a/nostr_dvm/utils/zap_utils.py b/nostr_dvm/utils/zap_utils.py index 6c1ea21..c369552 100644 --- a/nostr_dvm/utils/zap_utils.py +++ b/nostr_dvm/utils/zap_utils.py @@ -29,7 +29,7 @@ def parse_zap_event_tags(zap_event, keys, name, client, config): invoice_amount = 0 anon = False message = "" - sender = zap_event.pubkey() + sender = zap_event.author() for tag in zap_event.tags(): if tag.as_vec()[0] == 'bolt11': invoice_amount = parse_amount_from_bolt11_invoice(tag.as_vec()[1]) @@ -40,7 +40,7 @@ def parse_zap_event_tags(zap_event, keys, name, client, config): p_tag = tag.as_vec()[1] elif tag.as_vec()[0] == 'description': zap_request_event = Event.from_json(tag.as_vec()[1]) - sender = check_for_zapplepay(zap_request_event.pubkey().to_hex(), + sender = check_for_zapplepay(zap_request_event.author().to_hex(), zap_request_event.content()) for z_tag in zap_request_event.tags(): if z_tag.as_vec()[0] == 'anon': @@ -48,10 +48,10 @@ def parse_zap_event_tags(zap_event, keys, name, client, config): # print("[" + name + "] Private Zap received.") decrypted_content = decrypt_private_zap_message(z_tag.as_vec()[1], keys.secret_key(), - zap_request_event.pubkey()) + zap_request_event.author()) decrypted_private_event = Event.from_json(decrypted_content) if decrypted_private_event.kind() == 9733: - sender = decrypted_private_event.pubkey().to_hex() + sender = decrypted_private_event.author().to_hex() message = decrypted_private_event.content() # if message != "": # print("Zap Message: " + message) @@ -255,7 +255,7 @@ def zaprequest(lud16: str, amount: int, content, zapped_event, zapped_user, keys relays_tag = Tag.parse(['relays', str(relay_list)]) lnurl_tag = Tag.parse(['lnurl', encoded_lnurl]) if zapped_event is not None: - p_tag = Tag.parse(['p', zapped_event.pubkey().to_hex()]) + p_tag = Tag.parse(['p', zapped_event.author().to_hex()]) e_tag = Tag.parse(['e', zapped_event.id().to_hex()]) tags = [amount_tag, relays_tag, p_tag, e_tag, lnurl_tag] else: @@ -270,7 +270,7 @@ def zaprequest(lud16: str, amount: int, content, zapped_event, zapped_user, keys zap_request = EventBuilder(9733, content, [p_tag, e_tag]).to_event(keys).as_json() keys = Keys.from_sk_str(encryption_key) - encrypted_content = enrypt_private_zap_message(zap_request, keys.secret_key(), zapped_event.pubkey()) + encrypted_content = enrypt_private_zap_message(zap_request, keys.secret_key(), zapped_event.author()) anon_tag = Tag.parse(['anon', encrypted_content]) tags.append(anon_tag) content = "" diff --git a/setup.py b/setup.py index 2b8418d..45d3363 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -VERSION = '0.2.0' +VERSION = '0.2.1' DESCRIPTION = 'A framework to build and run Nostr NIP90 Data Vending Machines' LONG_DESCRIPTION = ('A framework to build and run Nostr NIP90 Data Vending Machines. ' 'This is an early stage release. Interfaces might change/brick') @@ -15,9 +15,9 @@ setup( long_description=LONG_DESCRIPTION, packages=find_packages(include=['nostr_dvm', 'nostr_dvm.*']), - install_requires=["nostr-sdk==0.7.1", + install_requires=["nostr-sdk==0.8.0", "bech32", - "pycryptodome==3.19.0", + "pycryptodome==3.20.0", "python-dotenv==1.0.0", "emoji==2.8.0", "eva-decord==0.6.1", diff --git a/tests/gui/nicegui/nostrAI_search_client.py b/tests/gui/nicegui/nostrAI_search_client.py index d6deecb..9d12805 100644 --- a/tests/gui/nicegui/nostrAI_search_client.py +++ b/tests/gui/nicegui/nostrAI_search_client.py @@ -104,9 +104,9 @@ def init(): listui = [] for event in events: - nip19event = Nip19Event(event.id(), event.pubkey(), dvmconfig.DVMConfig.RELAY_LIST) + nip19event = Nip19Event(event.id(), event.author(), dvmconfig.DVMConfig.RELAY_LIST) nip19eventid = nip19event.to_bech32() - new = {'result': event.content(), 'author': event.pubkey().to_hex(), + new = {'result': event.content(), 'author': event.author().to_hex(), 'eventid': str(event.id().to_hex()), 'time': str(event.created_at().to_human_datetime()), 'njump': "https://njump.me/" + nip19eventid, diff --git a/tests/test_dvm_client.py b/tests/test_dvm_client.py index 349bf60..7f13627 100644 --- a/tests/test_dvm_client.py +++ b/tests/test_dvm_client.py @@ -174,7 +174,7 @@ def nostr_client(): print("[Nostr Client]: " + event.content()) elif event.kind() == 4: - dec_text = nip04_decrypt(sk, event.pubkey(), event.content()) + dec_text = nip04_decrypt(sk, event.author(), event.content()) print("[Nostr Client]: " + f"Received new msg: {dec_text}") elif event.kind() == 9735: