mirror of
https://github.com/believethehype/nostrdvm.git
synced 2025-05-05 16:40:20 +02:00
update to nostrsdk080
This commit is contained in:
parent
b26851337e
commit
0513dcfabd
@ -68,7 +68,7 @@ def nostr_client():
|
|||||||
print("[Nostr Client]: " + event.content())
|
print("[Nostr Client]: " + event.content())
|
||||||
|
|
||||||
elif event.kind() == 4:
|
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}")
|
print("[Nostr Client]: " + f"Received new msg: {dec_text}")
|
||||||
|
|
||||||
elif event.kind() == 9735:
|
elif event.kind() == 9735:
|
||||||
|
@ -75,7 +75,7 @@ def nostr_client():
|
|||||||
print("[Nostr Client]: " + event.content())
|
print("[Nostr Client]: " + event.content())
|
||||||
|
|
||||||
elif event.kind() == 4:
|
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}")
|
print("[Nostr Client]: " + f"Received new msg: {dec_text}")
|
||||||
|
|
||||||
elif event.kind() == 9735:
|
elif event.kind() == 9735:
|
||||||
|
@ -83,12 +83,12 @@ class Bot:
|
|||||||
return
|
return
|
||||||
|
|
||||||
def handle_dm(nostr_event):
|
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():
|
if sender == self.keys.public_key().to_hex():
|
||||||
return
|
return
|
||||||
|
|
||||||
try:
|
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)
|
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)
|
print("[" + self.NAME + "] Message from " + user.name + ": " + decrypted_text)
|
||||||
|
|
||||||
@ -152,7 +152,7 @@ class Bot:
|
|||||||
|
|
||||||
elif decrypted_text.lower().startswith("balance"):
|
elif decrypted_text.lower().startswith("balance"):
|
||||||
time.sleep(3.0)
|
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(
|
"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"
|
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"
|
"I support both public and private Zaps, as well as Zapplepay.\n"
|
||||||
@ -172,12 +172,12 @@ class Bot:
|
|||||||
else:
|
else:
|
||||||
time.sleep(2.0)
|
time.sleep(2.0)
|
||||||
message = "Error: " + cashu_message + ". Token has not been redeemed."
|
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)
|
None).to_event(self.keys)
|
||||||
send_event(evt, client=self.client, dvm_config=self.dvm_config)
|
send_event(evt, client=self.client, dvm_config=self.dvm_config)
|
||||||
elif decrypted_text.lower().startswith("what's the second best"):
|
elif decrypted_text.lower().startswith("what's the second best"):
|
||||||
time.sleep(3.0)
|
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",
|
"No, there is no second best.\n\nhttps://cdn.nostr.build/p/mYLv.mp4",
|
||||||
nostr_event.id()).to_event(self.keys)
|
nostr_event.id()).to_event(self.keys)
|
||||||
send_event(evt, client=self.client, dvm_config=self.dvm_config)
|
send_event(evt, client=self.client, dvm_config=self.dvm_config)
|
||||||
@ -212,7 +212,7 @@ class Bot:
|
|||||||
if is_encrypted:
|
if is_encrypted:
|
||||||
if ptag == self.keys.public_key().to_hex():
|
if ptag == self.keys.public_key().to_hex():
|
||||||
tags_str = nip04_decrypt(Keys.from_sk_str(dvm_config.PRIVATE_KEY).secret_key(),
|
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 = json.loads(tags_str)
|
||||||
params.append(Tag.parse(["p", ptag]).as_vec())
|
params.append(Tag.parse(["p", ptag]).as_vec())
|
||||||
params.append(Tag.parse(["encrypted"]).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 != "":
|
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)
|
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'],
|
user = get_or_add_user(db=self.dvm_config.DB, npub=entry['npub'],
|
||||||
client=self.client, config=self.dvm_config)
|
client=self.client, config=self.dvm_config)
|
||||||
time.sleep(2.0)
|
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']),
|
PublicKey.from_hex(entry['npub']),
|
||||||
content,
|
content,
|
||||||
None).to_event(self.keys)
|
None).to_event(self.keys)
|
||||||
print(status + ": " + content)
|
print(status + ": " + content)
|
||||||
print(
|
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)
|
send_event(reply_event, client=self.client, dvm_config=dvm_config)
|
||||||
|
|
||||||
elif status == "payment-required" or status == "partial":
|
elif status == "payment-required" or status == "partial":
|
||||||
@ -256,7 +256,7 @@ class Bot:
|
|||||||
amount = int(amount_msats / 1000)
|
amount = int(amount_msats / 1000)
|
||||||
entry = next((x for x in self.job_list if x['event_id'] == etag), None)
|
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[
|
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
|
# if we get a bolt11, we pay and move on
|
||||||
user = get_or_add_user(db=self.dvm_config.DB, npub=entry["npub"],
|
user = get_or_add_user(db=self.dvm_config.DB, npub=entry["npub"],
|
||||||
client=self.client, config=self.dvm_config)
|
client=self.client, config=self.dvm_config)
|
||||||
@ -266,7 +266,7 @@ class Bot:
|
|||||||
iswhitelisted=user.iswhitelisted, isblacklisted=user.isblacklisted,
|
iswhitelisted=user.iswhitelisted, isblacklisted=user.isblacklisted,
|
||||||
nip05=user.nip05, lud16=user.lud16, name=user.name,
|
nip05=user.nip05, lud16=user.lud16, name=user.name,
|
||||||
lastactive=Timestamp.now().as_secs())
|
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"]),
|
PublicKey.from_hex(entry["npub"]),
|
||||||
"Paid " + str(
|
"Paid " + str(
|
||||||
amount) + " Sats from balance to DVM. New balance is " +
|
amount) + " Sats from balance to DVM. New balance is " +
|
||||||
@ -280,7 +280,7 @@ class Bot:
|
|||||||
else:
|
else:
|
||||||
print("Bot payment-required")
|
print("Bot payment-required")
|
||||||
time.sleep(2.0)
|
time.sleep(2.0)
|
||||||
evt = EventBuilder.new_encrypted_direct_msg(self.keys,
|
evt = EventBuilder.encrypted_direct_msg(self.keys,
|
||||||
PublicKey.from_hex(entry["npub"]),
|
PublicKey.from_hex(entry["npub"]),
|
||||||
"Current balance: " + str(
|
"Current balance: " + str(
|
||||||
user.balance) + " Sats. Balance of " + str(
|
user.balance) + " Sats. Balance of " + str(
|
||||||
@ -295,7 +295,7 @@ class Bot:
|
|||||||
bolt11 = tag.as_vec()[2]
|
bolt11 = tag.as_vec()[2]
|
||||||
# else we create a zap
|
# else we create a zap
|
||||||
else:
|
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)
|
client=self.client, config=self.dvm_config)
|
||||||
print("Paying: " + user.name)
|
print("Paying: " + user.name)
|
||||||
bolt11 = zaprequest(user.lud16, amount, "Zap", nostr_event, self.keys,
|
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)
|
entry = next((x for x in self.job_list if x['event_id'] == etag), None)
|
||||||
if entry is not None and entry[
|
if entry is not None and entry[
|
||||||
'dvm_key'] == nostr_event.pubkey().to_hex():
|
'dvm_key'] == nostr_event.author().to_hex():
|
||||||
print(entry)
|
print(entry)
|
||||||
user = get_or_add_user(db=self.dvm_config.DB, npub=entry['npub'],
|
user = get_or_add_user(db=self.dvm_config.DB, npub=entry['npub'],
|
||||||
client=self.client, config=self.dvm_config)
|
client=self.client, config=self.dvm_config)
|
||||||
@ -341,12 +341,12 @@ class Bot:
|
|||||||
content = nostr_event.content()
|
content = nostr_event.content()
|
||||||
if is_encrypted:
|
if is_encrypted:
|
||||||
if ptag == self.keys.public_key().to_hex():
|
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:
|
else:
|
||||||
return
|
return
|
||||||
|
|
||||||
dvms = [x for x in self.dvm_config.SUPPORTED_DVMS if
|
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:
|
if len(dvms) > 0:
|
||||||
dvm = dvms[0]
|
dvm = dvms[0]
|
||||||
if dvm.dvm_config.EXTERNAL_POST_PROCESS_TYPE != PostProcessFunctionType.NONE:
|
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)
|
print("[" + self.NAME + "] Received results, message to orignal sender " + user.name)
|
||||||
time.sleep(1.0)
|
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),
|
PublicKey.from_hex(user.npub),
|
||||||
content,
|
content,
|
||||||
None).to_event(self.keys)
|
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)
|
entry = next((x for x in self.job_list if x['event_id'] == etag), None)
|
||||||
print(entry)
|
print(entry)
|
||||||
# print(entry['dvm_key'])
|
# print(entry['dvm_key'])
|
||||||
# print(str(zapped_event.pubkey().to_hex()))
|
# print(str(zapped_event.author().to_hex()))
|
||||||
# print(str(zap_event.pubkey().to_hex()))
|
# print(str(zap_event.author().to_hex()))
|
||||||
print(sender)
|
print(sender)
|
||||||
if entry is not None and entry['is_paid'] is True and entry['dvm_key'] == 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
|
# if we get a bolt11, we pay and move on
|
||||||
@ -425,7 +425,7 @@ class Bot:
|
|||||||
index += 1
|
index += 1
|
||||||
|
|
||||||
time.sleep(3.0)
|
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 ("
|
message + "\nSelect an Index and provide an input ("
|
||||||
"e.g. \"2 A purple ostrich\")\nType \"index info\" to learn "
|
"e.g. \"2 A purple ostrich\")\nType \"index info\" to learn "
|
||||||
"more about each DVM. (e.g. \"2 info\")\n\n"
|
"more about each DVM. (e.g. \"2 info\")\n\n"
|
||||||
@ -436,7 +436,7 @@ class Bot:
|
|||||||
|
|
||||||
def answer_blacklisted(nostr_event):
|
def answer_blacklisted(nostr_event):
|
||||||
# For some reason an admin might blacklist npubs, e.g. for abusing the service
|
# 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 "
|
"Your are currently blocked from all "
|
||||||
"services.", None).to_event(self.keys)
|
"services.", None).to_event(self.keys)
|
||||||
send_event(evt, client=self.client, dvm_config=dvm_config)
|
send_event(evt, client=self.client, dvm_config=dvm_config)
|
||||||
@ -445,10 +445,10 @@ class Bot:
|
|||||||
info = print_dvm_info(self.client, index)
|
info = print_dvm_info(self.client, index)
|
||||||
time.sleep(2.0)
|
time.sleep(2.0)
|
||||||
if info is not None:
|
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)
|
info, None).to_event(self.keys)
|
||||||
else:
|
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 " +
|
"No NIP89 Info found for " +
|
||||||
self.dvm_config.SUPPORTED_DVMS[index].NAME,
|
self.dvm_config.SUPPORTED_DVMS[index].NAME,
|
||||||
None).to_event(self.keys)
|
None).to_event(self.keys)
|
||||||
@ -463,7 +463,7 @@ class Bot:
|
|||||||
if len(split) == 1:
|
if len(split) == 1:
|
||||||
remaining_text = decrypted_text.replace(split[0], "")
|
remaining_text = decrypted_text.replace(split[0], "")
|
||||||
params = remaining_text.split(" -")
|
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)
|
tags.append(tag)
|
||||||
for i in params:
|
for i in params:
|
||||||
print(i)
|
print(i)
|
||||||
|
@ -89,7 +89,7 @@ class DVM:
|
|||||||
if nip90_event is None:
|
if nip90_event is None:
|
||||||
return
|
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)
|
config=self.dvm_config)
|
||||||
cashu = ""
|
cashu = ""
|
||||||
p_tag_str = ""
|
p_tag_str = ""
|
||||||
@ -334,12 +334,12 @@ class DVM:
|
|||||||
dvm_config=self.dvm_config,
|
dvm_config=self.dvm_config,
|
||||||
)
|
)
|
||||||
if amount > 0 and self.dvm_config.LNBITS_ADMIN_KEY != "":
|
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)
|
client=self.client, config=self.dvm_config)
|
||||||
print(user.lud16 + " " + str(amount))
|
print(user.lud16 + " " + str(amount))
|
||||||
bolt11 = zaprequest(user.lud16, amount, "Couldn't finish job, returning sats",
|
bolt11 = zaprequest(user.lud16, amount, "Couldn't finish job, returning sats",
|
||||||
original_event,
|
original_event, "",
|
||||||
self.keys, self.dvm_config, zaptype="private")
|
self.keys, self.dvm_config.RELAY_LIST, zaptype="private")
|
||||||
if bolt11 is None:
|
if bolt11 is None:
|
||||||
print("Receiver has no Lightning address, can't zap back.")
|
print("Receiver has no Lightning address, can't zap back.")
|
||||||
return
|
return
|
||||||
@ -352,7 +352,7 @@ class DVM:
|
|||||||
original_event = Event.from_json(original_event_as_str)
|
original_event = Event.from_json(original_event_as_str)
|
||||||
request_tag = Tag.parse(["request", original_event_as_str])
|
request_tag = Tag.parse(["request", original_event_as_str])
|
||||||
e_tag = Tag.parse(["e", original_event.id().to_hex()])
|
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(
|
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()])
|
original_event.kind()) + ". The task was: " + original_event.content()])
|
||||||
status_tag = Tag.parse(["status", "success"])
|
status_tag = Tag.parse(["status", "success"])
|
||||||
@ -372,7 +372,7 @@ class DVM:
|
|||||||
|
|
||||||
if encrypted:
|
if encrypted:
|
||||||
print(content)
|
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)
|
content)
|
||||||
|
|
||||||
reply_event = EventBuilder(original_event.kind() + 1000, str(content), reply_tags).to_event(self.keys)
|
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)
|
alt_description, reaction = build_status_reaction(status, task, amount, content)
|
||||||
|
|
||||||
e_tag = Tag.parse(["e", original_event.id().to_hex()])
|
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])
|
alt_tag = Tag.parse(["alt", alt_description])
|
||||||
status_tag = Tag.parse(["status", status])
|
status_tag = Tag.parse(["status", status])
|
||||||
reply_tags = [e_tag, alt_tag, status_tag]
|
reply_tags = [e_tag, alt_tag, status_tag]
|
||||||
@ -464,7 +464,7 @@ class DVM:
|
|||||||
str_tags.append(element.as_vec())
|
str_tags.append(element.as_vec())
|
||||||
|
|
||||||
content = json.dumps(str_tags)
|
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)
|
content)
|
||||||
reply_tags = encryption_tags
|
reply_tags = encryption_tags
|
||||||
|
|
||||||
@ -527,7 +527,7 @@ class DVM:
|
|||||||
dvm_config=self.dvm_config)
|
dvm_config=self.dvm_config)
|
||||||
# Zapping back the user on error
|
# Zapping back the user on error
|
||||||
if amount > 0 and self.dvm_config.LNBITS_ADMIN_KEY != "":
|
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)
|
client=self.client, config=self.dvm_config)
|
||||||
print(user.lud16 + " " + str(amount))
|
print(user.lud16 + " " + str(amount))
|
||||||
bolt11 = zaprequest(user.lud16, amount, "Couldn't finish job, returning sats", job_event, user.npub,
|
bolt11 = zaprequest(user.lud16, amount, "Couldn't finish job, returning sats", job_event, user.npub,
|
||||||
|
@ -43,7 +43,7 @@ class DiscoverInactiveFollows(DVMTaskInterface):
|
|||||||
request_form = {"jobID": event.id().to_hex()}
|
request_form = {"jobID": event.id().to_hex()}
|
||||||
|
|
||||||
# default values
|
# default values
|
||||||
user = event.pubkey().to_hex()
|
user = event.author().to_hex()
|
||||||
since_days = 90
|
since_days = 90
|
||||||
|
|
||||||
for tag in event.tags():
|
for tag in event.tags():
|
||||||
|
@ -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.")
|
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)
|
None).to_event(keys)
|
||||||
send_event(evt, client=client, dvm_config=config)
|
send_event(evt, client=client, dvm_config=config)
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ def fetch_nip89_paramters_for_deletion(keys, eventid, client, dvmconfig):
|
|||||||
print("No dtag found")
|
print("No dtag found")
|
||||||
return
|
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)
|
nip89_delete_announcement(event.id().to_hex(), keys, d_tag, client, dvmconfig)
|
||||||
print("NIP89 announcement deleted from known relays!")
|
print("NIP89 announcement deleted from known relays!")
|
||||||
else:
|
else:
|
||||||
@ -85,11 +85,11 @@ def nip89_fetch_events_pubkey(client, pubkey, kind):
|
|||||||
|
|
||||||
dvms = {}
|
dvms = {}
|
||||||
for event in events:
|
for event in events:
|
||||||
if dvms.get(event.pubkey().to_hex()):
|
if dvms.get(event.author().to_hex()):
|
||||||
if dvms.get(event.pubkey().to_hex()).created_at().as_secs() < event.created_at().as_secs():
|
if dvms.get(event.author().to_hex()).created_at().as_secs() < event.created_at().as_secs():
|
||||||
dvms[event.pubkey().to_hex()] = event
|
dvms[event.author().to_hex()] = event
|
||||||
else:
|
else:
|
||||||
dvms[event.pubkey().to_hex()] = event
|
dvms[event.author().to_hex()] = event
|
||||||
|
|
||||||
# should be one element of the kind now
|
# should be one element of the kind now
|
||||||
for dvm in dvms:
|
for dvm in dvms:
|
||||||
|
@ -117,7 +117,7 @@ def check_and_decrypt_tags(event, dvm_config):
|
|||||||
|
|
||||||
elif p == dvm_config.PUBLIC_KEY:
|
elif p == dvm_config.PUBLIC_KEY:
|
||||||
tags_str = nip04_decrypt(Keys.from_sk_str(dvm_config.PRIVATE_KEY).secret_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 = json.loads(tags_str)
|
||||||
params.append(Tag.parse(["p", p]).as_vec())
|
params.append(Tag.parse(["p", p]).as_vec())
|
||||||
params.append(Tag.parse(["encrypted"]).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]
|
p = tag.as_vec()[1]
|
||||||
|
|
||||||
if is_encrypted:
|
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, "
|
print("[" + dvm_config.NIP89.NAME + "] Task encrypted and not addressed to this DVM, "
|
||||||
"skipping..")
|
"skipping..")
|
||||||
return None
|
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(),
|
tags_str = nip04_decrypt(Keys.from_sk_str(dvm_config.PRIVATE_KEY).secret_key(),
|
||||||
PublicKey.from_hex(p), event.content())
|
PublicKey.from_hex(p), event.content())
|
||||||
params = json.loads(tags_str)
|
params = json.loads(tags_str)
|
||||||
|
@ -29,7 +29,7 @@ def parse_zap_event_tags(zap_event, keys, name, client, config):
|
|||||||
invoice_amount = 0
|
invoice_amount = 0
|
||||||
anon = False
|
anon = False
|
||||||
message = ""
|
message = ""
|
||||||
sender = zap_event.pubkey()
|
sender = zap_event.author()
|
||||||
for tag in zap_event.tags():
|
for tag in zap_event.tags():
|
||||||
if tag.as_vec()[0] == 'bolt11':
|
if tag.as_vec()[0] == 'bolt11':
|
||||||
invoice_amount = parse_amount_from_bolt11_invoice(tag.as_vec()[1])
|
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]
|
p_tag = tag.as_vec()[1]
|
||||||
elif tag.as_vec()[0] == 'description':
|
elif tag.as_vec()[0] == 'description':
|
||||||
zap_request_event = Event.from_json(tag.as_vec()[1])
|
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())
|
zap_request_event.content())
|
||||||
for z_tag in zap_request_event.tags():
|
for z_tag in zap_request_event.tags():
|
||||||
if z_tag.as_vec()[0] == 'anon':
|
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.")
|
# print("[" + name + "] Private Zap received.")
|
||||||
decrypted_content = decrypt_private_zap_message(z_tag.as_vec()[1],
|
decrypted_content = decrypt_private_zap_message(z_tag.as_vec()[1],
|
||||||
keys.secret_key(),
|
keys.secret_key(),
|
||||||
zap_request_event.pubkey())
|
zap_request_event.author())
|
||||||
decrypted_private_event = Event.from_json(decrypted_content)
|
decrypted_private_event = Event.from_json(decrypted_content)
|
||||||
if decrypted_private_event.kind() == 9733:
|
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()
|
message = decrypted_private_event.content()
|
||||||
# if message != "":
|
# if message != "":
|
||||||
# print("Zap Message: " + 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)])
|
relays_tag = Tag.parse(['relays', str(relay_list)])
|
||||||
lnurl_tag = Tag.parse(['lnurl', encoded_lnurl])
|
lnurl_tag = Tag.parse(['lnurl', encoded_lnurl])
|
||||||
if zapped_event is not None:
|
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()])
|
e_tag = Tag.parse(['e', zapped_event.id().to_hex()])
|
||||||
tags = [amount_tag, relays_tag, p_tag, e_tag, lnurl_tag]
|
tags = [amount_tag, relays_tag, p_tag, e_tag, lnurl_tag]
|
||||||
else:
|
else:
|
||||||
@ -270,7 +270,7 @@ def zaprequest(lud16: str, amount: int, content, zapped_event, zapped_user, keys
|
|||||||
zap_request = EventBuilder(9733, content,
|
zap_request = EventBuilder(9733, content,
|
||||||
[p_tag, e_tag]).to_event(keys).as_json()
|
[p_tag, e_tag]).to_event(keys).as_json()
|
||||||
keys = Keys.from_sk_str(encryption_key)
|
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])
|
anon_tag = Tag.parse(['anon', encrypted_content])
|
||||||
tags.append(anon_tag)
|
tags.append(anon_tag)
|
||||||
content = ""
|
content = ""
|
||||||
|
6
setup.py
6
setup.py
@ -1,6 +1,6 @@
|
|||||||
from setuptools import setup, find_packages
|
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'
|
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. '
|
LONG_DESCRIPTION = ('A framework to build and run Nostr NIP90 Data Vending Machines. '
|
||||||
'This is an early stage release. Interfaces might change/brick')
|
'This is an early stage release. Interfaces might change/brick')
|
||||||
@ -15,9 +15,9 @@ setup(
|
|||||||
long_description=LONG_DESCRIPTION,
|
long_description=LONG_DESCRIPTION,
|
||||||
packages=find_packages(include=['nostr_dvm', 'nostr_dvm.*']),
|
packages=find_packages(include=['nostr_dvm', 'nostr_dvm.*']),
|
||||||
|
|
||||||
install_requires=["nostr-sdk==0.7.1",
|
install_requires=["nostr-sdk==0.8.0",
|
||||||
"bech32",
|
"bech32",
|
||||||
"pycryptodome==3.19.0",
|
"pycryptodome==3.20.0",
|
||||||
"python-dotenv==1.0.0",
|
"python-dotenv==1.0.0",
|
||||||
"emoji==2.8.0",
|
"emoji==2.8.0",
|
||||||
"eva-decord==0.6.1",
|
"eva-decord==0.6.1",
|
||||||
|
@ -104,9 +104,9 @@ def init():
|
|||||||
|
|
||||||
listui = []
|
listui = []
|
||||||
for event in events:
|
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()
|
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()),
|
'eventid': str(event.id().to_hex()),
|
||||||
'time': str(event.created_at().to_human_datetime()),
|
'time': str(event.created_at().to_human_datetime()),
|
||||||
'njump': "https://njump.me/" + nip19eventid,
|
'njump': "https://njump.me/" + nip19eventid,
|
||||||
|
@ -174,7 +174,7 @@ def nostr_client():
|
|||||||
print("[Nostr Client]: " + event.content())
|
print("[Nostr Client]: " + event.content())
|
||||||
|
|
||||||
elif event.kind() == 4:
|
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}")
|
print("[Nostr Client]: " + f"Received new msg: {dec_text}")
|
||||||
|
|
||||||
elif event.kind() == 9735:
|
elif event.kind() == 9735:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user