update to nostr-sdk 0.38, improve prints

This commit is contained in:
dbth 2024-12-31 14:39:37 +01:00
parent 5033fe0134
commit fbc7361ca5
40 changed files with 137 additions and 150 deletions

View File

@ -189,7 +189,7 @@ class Bot:
print(params_as_str)
# and encrypt them
encrypted_params = nip44_encrypt(self.keys.secret_key(),
PublicKey.from_hex(
PublicKey.parse(
self.dvm_config.SUPPORTED_DVMS[
index].PUBLIC_KEY),
params_as_str, Nip44Version.V2)
@ -675,16 +675,12 @@ class Bot:
elif (input.startswith("nevent") or input.startswith("nostr:nevent") or input.startswith("note") or
input.startswith("nostr:note")):
input_type = "event"
if str(input).startswith('note'):
event_id = EventId.from_bech32(input)
elif str(input).startswith("nevent"):
if str(input).startswith("nevent"):
event_id = Nip19Event.from_bech32(input).event_id()
elif str(input).startswith('nostr:note'):
event_id = EventId.from_nostr_uri(input)
elif str(input).startswith("nostr:nevent"):
event_id = Nip19Event.from_nostr_uri(input).event_id()
else:
event_id = EventId.from_hex(input)
event_id = EventId.parse(input)
i_tag = Tag.parse(["i", event_id.to_hex(), input_type])
tags.append(i_tag)
else:

View File

@ -17,7 +17,7 @@ from nostr_dvm.utils.dvmconfig import DVMConfig
from nostr_dvm.utils.mediasource_utils import input_data_file_duration
from nostr_dvm.utils.nip88_utils import nip88_has_active_subscription
from nostr_dvm.utils.nostr_utils import get_event_by_id, get_referenced_event_by_id, check_and_decrypt_tags, \
send_event_outbox
send_event_outbox, print_send_result
from nostr_dvm.utils.nut_wallet_utils import NutZapWallet
from nostr_dvm.utils.output_utils import build_status_reaction
from nostr_dvm.utils.print_utils import bcolors
@ -432,7 +432,7 @@ class DVM:
print(status)
if job_event.kind() == EventDefinitions.KIND_NIP88_SUBSCRIBE_EVENT:
await send_job_status_reaction(job_event, "subscription-success", client=self.client,
dvm_config=self.dvm_config, user=user)
dvm_config=self.dvm_config)
@ -579,8 +579,8 @@ class DVM:
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.author().to_hex()])
alt_tag = Tag.parse(["alt", "This is the result of a NIP90 DVM AI task with kind " + str(
original_event.kind().as_u16()) + ". The task was: " + original_event.content()])
alt_tag = Tag.parse(["alt", "This is the result of a NIP90 DVM task with kind " + str(
original_event.kind().as_u16())])
status_tag = Tag.parse(["status", "success"])
reply_tags = [request_tag, e_tag, p_tag, alt_tag, status_tag]
@ -624,12 +624,12 @@ class DVM:
if encrypted:
print(content)
if is_legacy_encryption:
content = nip04_encrypt(self.keys.secret_key(), PublicKey.from_hex(original_event.author().to_hex()),
content = nip04_encrypt(self.keys.secret_key(), PublicKey.parse(original_event.author().to_hex()),
content)
else:
content = nip44_encrypt(self.keys.secret_key(),
PublicKey.from_hex(original_event.author().to_hex()),
PublicKey.parse(original_event.author().to_hex()),
content, Nip44Version.V2)
reply_tags = encryption_tags
@ -639,13 +639,19 @@ class DVM:
self.keys)
#print(reply_event)
# send_event(reply_event, client=self.client, dvm_config=self.dvm_config)
await send_event_outbox(reply_event, client=self.client, dvm_config=self.dvm_config)
response_status = await send_event_outbox(reply_event, client=self.client, dvm_config=self.dvm_config)
if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value:
print(bcolors.GREEN + "[" + self.dvm_config.NIP89.NAME + "] " + str(
original_event.kind().as_u16() + 1000) + " Job Response event sent: " + reply_event.as_json() + bcolors.ENDC)
original_event.kind().as_u16() + 1000) + " Job Response event sent: " + reply_event.as_json() + ". Success: " + str(
response_status.success) + " Failed: " + str(response_status.failed) + " EventID: "
+ response_status.id.to_hex() + " / " + response_status.id.to_bech32() + bcolors.ENDC)
elif self.dvm_config.LOGLEVEL.value >= LogLevel.INFO.value:
print(bcolors.GREEN + "[" + self.dvm_config.NIP89.NAME + "] " + str(
original_event.kind().as_u16() + 1000) + " Job Response event sent: " + reply_event.id().to_hex() + bcolors.ENDC)
original_event.kind().as_u16() + 1000) + " Job Response event sent. Success: " + str(
response_status.success) + " Failed: " + str(response_status.failed) + " EventID: "
+ response_status.id.to_hex() + " / " + response_status.id.to_bech32() + bcolors.ENDC)
async def send_job_status_reaction(original_event, status, is_paid=True, amount=0, client=None,
content=None,
@ -751,11 +757,11 @@ class DVM:
content = json.dumps(str_tags)
if is_legacy_encryption:
content = nip04_encrypt(self.keys.secret_key(), PublicKey.from_hex(original_event.author().to_hex()),
content = nip04_encrypt(self.keys.secret_key(), PublicKey.parse(original_event.author().to_hex()),
content)
else:
content = nip44_encrypt(self.keys.secret_key(),
PublicKey.from_hex(original_event.author().to_hex()),
PublicKey.parse(original_event.author().to_hex()),
content, version=Nip44Version.V2)
reply_tags = encryption_tags
@ -768,14 +774,19 @@ class DVM:
keys = Keys.parse(dvm_config.PRIVATE_KEY)
reaction_event = EventBuilder(EventDefinitions.KIND_FEEDBACK, str(content)).tags(reply_tags).sign_with_keys(keys)
# send_event(reaction_event, client=self.client, dvm_config=self.dvm_config)
await send_event_outbox(reaction_event, client=self.client, dvm_config=self.dvm_config)
response_status = await send_event_outbox(reaction_event, client=self.client, dvm_config=self.dvm_config)
if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value:
print(bcolors.YELLOW + "[" + self.dvm_config.NIP89.NAME + "]" + " Sent Kind " + str(
EventDefinitions.KIND_FEEDBACK.as_u16()) + " Reaction: " + status + " " + reaction_event.as_json() + bcolors.ENDC)
print(bcolors.YELLOW + "[" + self.dvm_config.NIP89.NAME + "] Sent Kind " + str(
EventDefinitions.KIND_FEEDBACK.as_u16()) + " Reaction: " + status + " " + reaction_event.as_json() + ". Success: " + str(
response_status.success) + " Failed: " + str(response_status.failed) + " EventID: "
+ response_status.id.to_hex() + " / " + response_status.id.to_bech32() + bcolors.ENDC)
elif self.dvm_config.LOGLEVEL.value >= LogLevel.INFO.value:
print(bcolors.YELLOW + "[" + self.dvm_config.NIP89.NAME + "]" + " Sent Kind " + str(
EventDefinitions.KIND_FEEDBACK.as_u16()) + " Reaction: " + status + " " + reaction_event.id().to_hex() + bcolors.ENDC)
print(bcolors.YELLOW + "[" + self.dvm_config.NIP89.NAME + "] Sent Kind " + str(
EventDefinitions.KIND_FEEDBACK.as_u16()) + " Reaction: " + status + ". Success: " + str(
response_status.success) + " Failed: " + str(response_status.failed) + " EventID: "
+ response_status.id.to_hex() + " / " + response_status.id.to_bech32() + bcolors.ENDC)
return reaction_event.as_json()

View File

@ -147,7 +147,7 @@ class Subscription:
str_tags.append(element.as_vec())
content = json.dumps(str_tags)
content = nip44_encrypt(self.keys.secret_key(), PublicKey.from_hex(original_event.author().to_hex()),
content = nip44_encrypt(self.keys.secret_key(), PublicKey.parse(original_event.author().to_hex()),
content, Nip44Version.V2)
reply_tags = encryption_tags

View File

@ -87,7 +87,7 @@ class AdvancedSearch(DVMTaskInterface):
from nostr_sdk import Filter
options = self.set_options(request_form)
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
cli = Client(NostrSigner.keys(keys))
@ -110,12 +110,7 @@ class AdvancedSearch(DVMTaskInterface):
user = tag.as_vec()[1]
# user = user[1]
user = str(user).lstrip("@")
if str(user).startswith('npub'):
userkey = PublicKey.from_bech32(user)
elif str(user).startswith("nostr:npub"):
userkey = PublicKey.from_nostr_uri(user)
else:
userkey = PublicKey.from_hex(user)
userkey = PublicKey.parse(user)
userkeys.append(userkey)

View File

@ -89,12 +89,7 @@ class AdvancedSearchWine(DVMTaskInterface):
tag = Tag.parse(user)
user = tag.as_vec()[1]
user = str(user).lstrip("@")
if str(user).startswith('npub'):
userkey = PublicKey.from_bech32(user)
elif str(user).startswith("nostr:npub"):
userkey = PublicKey.from_nostr_uri(user)
else:
userkey = PublicKey.from_hex(user)
userkey = PublicKey.parse(user)
userkeys.append(userkey)

View File

@ -107,7 +107,7 @@ class DicoverContentLatestLongForm(DVMTaskInterface):
options = self.set_options(request_form)
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
database = NostrDatabase.lmdb(self.db_name)
@ -172,7 +172,7 @@ class DicoverContentLatestLongForm(DVMTaskInterface):
try:
relaylimits = RelayLimits.disable()
opts = (Options().relay_limits(relaylimits))
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
database = NostrDatabase.lmdb(self.db_name)
cli = ClientBuilder().signer(NostrSigner.keys(keys)).database(database).opts(opts).build()

View File

@ -107,7 +107,7 @@ class DicoverContentLatestWiki(DVMTaskInterface):
options = self.set_options(request_form)
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
database = NostrDatabase.lmdb(self.db_name)
@ -172,7 +172,7 @@ class DicoverContentLatestWiki(DVMTaskInterface):
try:
relaylimits = RelayLimits.disable()
opts = (Options().relay_limits(relaylimits))
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
database = NostrDatabase.lmdb(self.db_name)
cli = ClientBuilder().signer(NostrSigner.keys(keys)).database(database).opts(opts).build()

View File

@ -170,7 +170,7 @@ class DicoverContentCurrentlyPopular(DVMTaskInterface):
async def sync_db(self):
try:
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
database = NostrDatabase.lmdb(self.db_name)

View File

@ -213,7 +213,7 @@ class DicoverContentCurrentlyPopularZaps(DVMTaskInterface):
async def sync_db(self):
try:
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
database = NostrDatabase.lmdb(self.db_name)
cli = ClientBuilder().signer(NostrSigner.keys(keys)).database(database).build()

View File

@ -94,7 +94,7 @@ class DicoverContentCurrentlyPopularFollowers(DVMTaskInterface):
opts = (
Options().relay_limits(
relaylimits))
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
database = NostrDatabase.lmdb(self.db_name)
@ -189,7 +189,7 @@ class DicoverContentCurrentlyPopularFollowers(DVMTaskInterface):
async def sync_db(self):
try:
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
database = NostrDatabase.lmdb(self.db_name)
cli = ClientBuilder().signer(NostrSigner.keys(keys)).database(database).build()

View File

@ -133,7 +133,7 @@ class DicoverContentCurrentlyPopularGallery(DVMTaskInterface):
relaylimits = RelayLimits.disable()
opts = (Options().relay_limits(relaylimits))
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
cli = ClientBuilder().database(databasegallery).signer(NostrSigner.keys(keys)).opts(opts).build()
@ -233,7 +233,7 @@ class DicoverContentCurrentlyPopularGallery(DVMTaskInterface):
async def sync_db(self):
try:
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
database = NostrDatabase.lmdb(self.db_name)
cli = ClientBuilder().signer(NostrSigner.keys(keys)).database(database).build()

View File

@ -176,7 +176,7 @@ class DicoverContentCurrentlyPopularMostr(DVMTaskInterface):
async def sync_db(self):
try:
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
database = NostrDatabase.lmdb(self.db_name)
cli = ClientBuilder().signer(NostrSigner.keys(keys)).database(database).build()

View File

@ -142,7 +142,7 @@ class DicoverContentCurrentlyPopularNonFollowers(DVMTaskInterface):
relaylimits = RelayLimits.disable()
opts = (
Options().relay_limits(relaylimits))
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
if self.database is None:
self.database = NostrDatabase.lmdb(self.db_name)
@ -225,7 +225,7 @@ class DicoverContentCurrentlyPopularNonFollowers(DVMTaskInterface):
async def sync_db(self):
try:
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
database = NostrDatabase.lmdb(self.db_name)
cli = ClientBuilder().signer(NostrSigner.keys(keys)).database(database).build()

View File

@ -202,7 +202,7 @@ class DicoverContentCurrentlyPopularbyTopic(DVMTaskInterface):
async def sync_db(self):
try:
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
database = NostrDatabase.lmdb(self.db_name)
cli = ClientBuilder().signer(NostrSigner.keys(keys)).database(database).build()

View File

@ -191,7 +191,7 @@ class DicoverContentCurrentlyPopularTweets(DVMTaskInterface):
async def sync_db(self):
try:
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
database = NostrDatabase.lmdb(self.db_name)
cli = ClientBuilder().signer(NostrSigner.keys(keys)).database(database).build()

View File

@ -69,7 +69,7 @@ class Discoverlatestperfollower(DVMTaskInterface):
from types import SimpleNamespace
ns = SimpleNamespace()
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
relaylimits = RelayLimits.disable()

View File

@ -175,7 +175,7 @@ class DicoverContentOnThisDay(DVMTaskInterface):
async def sync_db(self):
try:
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
database = NostrDatabase.lmdb(self.db_name)

View File

@ -137,7 +137,7 @@ class DicoverContentDBUpdateScheduler(DVMTaskInterface):
opts = (Options().relay_limits(relaylimits))
if self.dvm_config.WOT_FILTERING:
opts = opts.filtering_mode(RelayFilteringMode.WHITELIST)
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
if self.database is None:
self.database = await init_db(self.db_name, True, self.max_db_size)

View File

@ -74,7 +74,7 @@ class DiscoveryBotFarms(DVMTaskInterface):
from nostr_sdk import Filter
options = self.set_options(request_form)
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
database = NostrDatabase.lmdb("db/nostr_profiles.db")
@ -134,7 +134,7 @@ class DiscoveryBotFarms(DVMTaskInterface):
return 1
async def sync_db(self):
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
database = NostrDatabase.lmdb("db/nostr_profiles.db")
cli = ClientBuilder().signer(NostrSigner.keys(keys)).database(database).build()

View File

@ -71,7 +71,7 @@ class DiscoverReports(DVMTaskInterface):
relaylimits = RelayLimits.disable()
opts = (
Options().relay_limits(relaylimits))
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
cli = ClientBuilder().signer(NostrSigner.keys(keys)).opts(opts).build()
# cli.add_relay("wss://relay.nostr.band")

View File

@ -68,7 +68,7 @@ class DiscoverInactiveFollows(DVMTaskInterface):
from types import SimpleNamespace
ns = SimpleNamespace()
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
# relaylimits = RelayLimits().event_max_num_tags(max_num_tags=10000)
# relaylimits.event_max_size(None)
@ -130,7 +130,7 @@ class DiscoverInactiveFollows(DVMTaskInterface):
filters = []
for i in range(i, i + st):
filter1 = Filter().author(PublicKey.from_hex(users[i])).since(notactivesince).limit(1)
filter1 = Filter().author(PublicKey.parse(users[i])).since(notactivesince).limit(1)
filters.append(filter1)
event_from_authors = await cli.fetch_events(filters, relay_timeout_long)
for author in event_from_authors.to_vec():

View File

@ -66,7 +66,7 @@ class DiscoverNonFollowers(DVMTaskInterface):
opts = (
Options().relay_limits(
relaylimits))
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
cli= ClientBuilder().signer(NostrSigner.keys(keys)).opts(opts).build()
@ -81,7 +81,7 @@ class DiscoverNonFollowers(DVMTaskInterface):
options = self.set_options(request_form)
step = 20
followers_filter = Filter().author(PublicKey.from_hex(options["user"])).kind(Kind(3))
followers_filter = Filter().author(PublicKey.parse(options["user"])).kind(Kind(3))
followers = await cli.fetch_events([followers_filter], relay_timeout)
if len(followers.to_vec()) > 0:
@ -113,7 +113,7 @@ class DiscoverNonFollowers(DVMTaskInterface):
for i in range(i, i + st):
filters = []
filter1 = Filter().author(PublicKey.from_hex(users[i])).kind(Kind(3))
filter1 = Filter().author(PublicKey.parse(users[i])).kind(Kind(3))
filters.append(filter1)
followers = await cli.fetch_events(filters, relay_timeout)

View File

@ -70,7 +70,7 @@ class TrendingNotesGleasonator(DVMTaskInterface):
async def process(self, request_form):
options = self.set_options(request_form)
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
cli = Client(NostrSigner.keys(keys))

View File

@ -203,7 +203,7 @@ class DiscoverPeopleMyWOT(DVMTaskInterface):
async def sync_db(self):
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
database = NostrDatabase.lmdb(self.db_name)
cli = ClientBuilder().signer(NostrSigner.keys(keys)).database(database).build()

View File

@ -207,7 +207,7 @@ class DiscoverPeopleWOT(DVMTaskInterface):
return 1
async def sync_db(self):
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
database = NostrDatabase.lmdb(self.db_name)
cli = ClientBuilder().signer(NostrSigner.keys(keys)).database(database).build()

View File

@ -79,7 +79,7 @@ class SearchUser(DVMTaskInterface):
from nostr_sdk import Filter
options = self.set_options(request_form)
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
database = NostrDatabase.lmdb(self.db_name)
cli = ClientBuilder().database(database).signer(NostrSigner.keys(keys)).build()
@ -140,7 +140,7 @@ class SearchUser(DVMTaskInterface):
return 1
async def sync_db(self):
sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(self.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
database = NostrDatabase.lmdb(self.db_name)
relaylimits = RelayLimits.disable()

View File

@ -9,7 +9,7 @@ from nostr_dvm.utils.nip65_utils import nip65_announce_relays
from nostr_dvm.utils.nip88_utils import nip88_announce_tier, fetch_nip88_parameters_for_deletion, fetch_nip88_event, \
check_and_set_tiereventid_nip88
from nostr_dvm.utils.nip89_utils import nip89_announce_tasks, fetch_nip89_parameters_for_deletion
from nostr_dvm.utils.nostr_utils import update_profile
from nostr_dvm.utils.nostr_utils import update_profile, print_send_result
from nostr_dvm.utils.nut_wallet_utils import NutZapWallet
@ -128,5 +128,5 @@ async def admin_make_database_updates(adminconfig: AdminConfig = None, dvmconfig
await fetch_nip88_event(keys, event_id, client, dvmconfig)
if adminconfig.UPDATE_PROFILE:
event = await update_profile(dvmconfig, client, lud16=dvmconfig.LN_ADDRESS)
print(event.output)
event_result = await update_profile(dvmconfig, client, lud16=dvmconfig.LN_ADDRESS)
print_send_result(event_result)

View File

@ -22,7 +22,7 @@ async def build_client(config):
def build_external_dvm(pubkey, task, kind, fix_cost, per_unit_cost, config,
external_post_process=PostProcessFunctionType.NONE):
pubkey = PublicKey.from_hex(pubkey).to_hex()
pubkey = PublicKey.parse(pubkey).to_hex()
dvm_config = DVMConfig()
dvm_config.PUBLIC_KEY = pubkey
dvm_config.FIX_COST = fix_cost

View File

@ -16,7 +16,7 @@ import requests
from urllib.parse import urlparse
from nostr_dvm.utils.nostr_utils import send_event
from nostr_dvm.utils.nostr_utils import send_event, print_send_result
from nostr_dvm.utils.print_utils import bcolors
@ -88,8 +88,9 @@ async def convert_nip93_to_nip68(private_key, relay_list, user_to_import_npub=No
var = input("Convert and post this image? (y(es)/n(o)/d(elete): " + image_url + " Content: " + content + "\n")
if var == "d" or var == "delete":
delete_event = EventBuilder.delete([event.id()]).sign_with_keys(keys)
result = await client.send_event(delete_event)
print(result.output)
response_status = await client.send_event(delete_event)
print_send_result(response_status)
elif var == "y" or var == "yes":

View File

@ -16,11 +16,12 @@ async def announce_dm_relays(dvm_config, client):
content = ""
event = EventBuilder(Kind(10050), content).tags(tags).sign_with_keys(keys)
eventid = await send_event(event, client=client, dvm_config=dvm_config, broadcast=True)
if eventid is not None:
response_status = await send_event(event, client=client, dvm_config=dvm_config, broadcast=True)
if response_status is not None:
print(
bcolors.BLUE + "[" + dvm_config.NIP89.NAME + "] Announced DM relays for " + dvm_config.NIP89.NAME + " (EventID: " + str(
eventid.id.to_hex()) + ")" + bcolors.ENDC)
bcolors.BLUE + "[" + dvm_config.NIP89.NAME + "] Announced DM relays for " + dvm_config.NIP89.NAME + ". Success: " + str(
response_status.success) + " Failed: " + str(response_status.failed) + " EventID: "
+ response_status.id.to_hex() + " / " + response_status.id.to_bech32())
else:
print(
bcolors.RED + "[" + dvm_config.NIP89.NAME + "] Could not announce DM relays for " + dvm_config.NIP89.NAME + bcolors.ENDC)
@ -40,11 +41,12 @@ async def nip65_announce_relays(dvm_config, client):
content = ""
event = EventBuilder(EventDefinitions.KIND_RELAY_ANNOUNCEMENT, content).tags(tags).sign_with_keys(keys)
eventid = await send_event(event, client=client, dvm_config=dvm_config, broadcast=True)
if eventid is not None:
response_status = await send_event(event, client=client, dvm_config=dvm_config, broadcast=True)
if response_status is not None:
print(
bcolors.BLUE + "[" + dvm_config.NIP89.NAME + "] Announced NIP 65 for " + dvm_config.NIP89.NAME + " (EventID: " + str(
eventid.id.to_hex()) + ")" + bcolors.ENDC)
bcolors.BLUE + "[" + dvm_config.NIP89.NAME + "] Announced NIP 65 for " + dvm_config.NIP89.NAME + ". Success: " + str(
response_status.success) + " Failed: " + str(response_status.failed) + " EventID: "
+ response_status.id.to_hex() + " / " + response_status.id.to_bech32())
else:
print(
bcolors.RED + "[" + dvm_config.NIP89.NAME + "] Could not announce NIP 65 for " + dvm_config.NIP89.NAME + bcolors.ENDC)

View File

@ -35,7 +35,7 @@ def nip88_create_d_tag(name, pubkey, image):
async def fetch_nip88_parameters_for_deletion(keys, eventid, client, dvmconfig):
idfilter = Filter().id(EventId.from_hex(eventid)).limit(1)
idfilter = Filter().id(EventId.parse(eventid)).limit(1)
nip88events = await client.fetch_events([idfilter], relay_timeout)
d_tag = ""
if len(nip88events.to_vec()) == 0:

View File

@ -6,7 +6,7 @@ import dotenv
from nostr_sdk import Tag, Keys, EventBuilder, Filter, Alphabet, PublicKey, Client, EventId, SingleLetterTag, Kind
from nostr_dvm.utils.definitions import EventDefinitions, relay_timeout
from nostr_dvm.utils.nostr_utils import send_event
from nostr_dvm.utils.nostr_utils import send_event, print_send_result
from nostr_dvm.utils.print_utils import bcolors
@ -31,15 +31,15 @@ async def nip89_announce_tasks(dvm_config, client):
content = dvm_config.NIP89.CONTENT
event = EventBuilder(EventDefinitions.KIND_ANNOUNCEMENT, content).tags([k_tag, d_tag]).sign_with_keys(keys)
eventid = await send_event(event, client=client, dvm_config=dvm_config, broadcast=True)
print(eventid.output)
response_status = await send_event(event, client=client, dvm_config=dvm_config, broadcast=True)
print(
bcolors.BLUE + "[" + dvm_config.NIP89.NAME + "] Announced NIP 89 for " + dvm_config.NIP89.NAME + " (" + eventid.id.to_hex() + ")" + bcolors.ENDC)
print(bcolors.BLUE + "[" + dvm_config.NIP89.NAME + "] Announced NIP 89 for " + dvm_config.NIP89.NAME + ". Success: " + str(response_status.success) + " Failed: " + str(response_status.failed) + " EventID: "
+ response_status.id.to_hex() + " / " + response_status.id.to_bech32())
async def fetch_nip89_parameters_for_deletion(keys, eventid, client, dvmconfig, pow=False):
idfilter = Filter().id(EventId.from_hex(eventid)).limit(1)
idfilter = Filter().id(EventId.parse(eventid)).limit(1)
nip89events = await client.fetch_events([idfilter], relay_timeout)
d_tag = ""
if len(nip89events.to_vec()) == 0:
@ -73,13 +73,8 @@ async def nip89_delete_announcement(eid: str, keys: Keys, dtag: str, client: Cli
event = EventBuilder(Kind(5), "").tags([e_tag, a_tag]).sign_with_keys(keys)
print(f"Deletion event: {event.as_json()}")
new_dvm_config = DVMConfig()
new_dvm_config.RELAY_LIST = new_dvm_config.ANNOUNCE_RELAY_LIST
for relay in config.RELAY_LIST:
if relay not in new_dvm_config.RELAY_LIST:
new_dvm_config.RELAY_LIST.append(relay)
await send_event(event, client, new_dvm_config)
await send_event(event, client, config, broadcast=True)
async def nip89_delete_announcement_pow(eid: str, keys: Keys, dtag: str, client: Client, config):
@ -88,13 +83,7 @@ async def nip89_delete_announcement_pow(eid: str, keys: Keys, dtag: str, client:
["a", str(EventDefinitions.KIND_ANNOUNCEMENT.as_u16()) + ":" + keys.public_key().to_hex() + ":" + dtag])
event = EventBuilder(Kind(5), "").tags([e_tag, a_tag]).pow(28).sign_with_keys(keys)
print(f"POW event: {event.as_json()}")
new_dvm_config = DVMConfig()
new_dvm_config.RELAY_LIST = new_dvm_config.ANNOUNCE_RELAY_LIST
for relay in config.RELAY_LIST:
if relay not in new_dvm_config.RELAY_LIST:
new_dvm_config.RELAY_LIST.append(relay)
await send_event(event, client, new_dvm_config)
await send_event(event, client, config, broadcast=True)
async def nip89_fetch_all_dvms(client):

View File

@ -15,7 +15,7 @@ from nostr_dvm.utils.definitions import EventDefinitions, relay_timeout
async def get_event_by_id(event_id_str: str, client: Client, config=None) -> Event | None:
split = event_id_str.split(":")
if len(split) == 3:
pk = PublicKey.from_hex(split[1])
pk = PublicKey.parse(split[1])
id_filter = Filter().author(pk).custom_tag(SingleLetterTag.lowercase(Alphabet.D), [split[2]])
events = await client.fetch_events([id_filter], relay_timeout)
else:
@ -43,21 +43,17 @@ async def get_events_by_ids(event_ids, client: Client, config=None) -> List | No
for event_id in event_ids:
split = event_id.split(":")
if len(split) == 3:
pk = PublicKey.from_hex(split[1])
pk = PublicKey.parse(split[1])
id_filter = Filter().author(pk).custom_tag(SingleLetterTag.lowercase(Alphabet.D), [split[2]])
events = await client.fetch_events([id_filter], relay_timeout)
else:
if str(event_id).startswith('note'):
event_id = EventId.from_bech32(event_id)
elif str(event_id).startswith("nevent"):
if str(event_id).startswith("nevent"):
event_id = Nip19Event.from_bech32(event_id).event_id()
elif str(event_id).startswith('nostr:note'):
event_id = EventId.from_nostr_uri(event_id)
elif str(event_id).startswith("nostr:nevent"):
event_id = Nip19Event.from_nostr_uri(event_id).event_id()
else:
event_id = EventId.from_hex(event_id)
event_id = EventId.parse(event_id)
search_ids.append(event_id)
id_filter = Filter().ids(search_ids)
@ -82,16 +78,12 @@ async def get_events_by_id(event_ids: list, client: Client, config=None) -> list
async def get_referenced_event_by_id(event_id, client, dvm_config, kinds) -> Event | None:
if kinds is None:
kinds = []
if str(event_id).startswith('note'):
event_id = EventId.from_bech32(event_id)
elif str(event_id).startswith("nevent"):
if str(event_id).startswith("nevent"):
event_id = Nip19Event.from_bech32(event_id).event_id()
elif str(event_id).startswith('nostr:note'):
event_id = EventId.from_nostr_uri(event_id)
elif str(event_id).startswith("nostr:nevent"):
event_id = Nip19Event.from_nostr_uri(event_id).event_id()
else:
event_id = EventId.from_hex(event_id)
event_id = EventId.parse(event_id)
if len(kinds) > 0:
job_id_filter = Filter().kinds(kinds).event(event_id).limit(1)
@ -219,10 +211,10 @@ async def send_event_outbox(event: Event, client, dvm_config) -> SendEventOutput
# connection = Connection().addr("127.0.0.1:9050").target(ConnectionTarget.ONION)
opts = Options().relay_limits(relaylimits).connection(connection)
sk = SecretKey.from_hex(dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
outboxclient = ClientBuilder().signer(NostrSigner.keys(keys)).opts(opts).build()
print("[" + dvm_config.NIP89.NAME + "] Receiver Inbox relays: " + str(relays))
#print("[" + dvm_config.NIP89.NAME + "] Receiver Inbox relays: " + str(relays))
for relay in relays[:5]:
try:
@ -233,14 +225,14 @@ async def send_event_outbox(event: Event, client, dvm_config) -> SendEventOutput
await outboxclient.connect()
try:
#print("Connected, sending event")
event_id = await outboxclient.send_event(event)
print(event_id.output)
event_response = await outboxclient.send_event(event)
except Exception as e:
event_id = None
event_response = None
print(e)
# 5. Fallback, if we couldn't send the event to any relay, we try to send to generic relays instead.
if event_id is None:
if event_response is None:
relays = await get_main_relays(event, client, dvm_config)
if len(relays) == 0:
return None
@ -248,15 +240,16 @@ async def send_event_outbox(event: Event, client, dvm_config) -> SendEventOutput
await outboxclient.add_relay(relay)
try:
await outboxclient.connect()
event_id = await outboxclient.send_event(event)
event_response = await outboxclient.send_event(event)
except Exception as e:
# Love yourself then.
event_id = None
event_response = None
print(e)
await outboxclient.shutdown()
return event_id
return event_response
async def send_event(event: Event, client: Client, dvm_config, broadcast=False):
@ -280,7 +273,7 @@ async def send_event(event: Event, client: Client, dvm_config, broadcast=False):
if len(relays) == 0:
relays = relay_list
print(relays)
for relay in relays:
if relay not in dvm_config.RELAY_LIST:
await client.add_relay(relay)
@ -288,19 +281,24 @@ async def send_event(event: Event, client: Client, dvm_config, broadcast=False):
await client.connect()
try:
event_id = await client.send_event(event)
response_status = await client.send_event(event)
except Exception as e:
print(e)
event_id = None
response_status = None
for relay in relays:
if relay not in dvm_config.RELAY_LIST:
await client.force_remove_relay(relay)
return event_id
return response_status
except Exception as e:
print(e)
def print_send_result(response_status):
print("Success: " + str(response_status.success) + " Failed: " + str(response_status.failed) + " EventID: "
+ response_status.id.to_hex() + " / " + response_status.id.to_bech32())
def check_and_decrypt_tags(event, dvm_config):
is_encrypted = False
use_legacy_encryption = False
@ -364,10 +362,10 @@ def check_and_decrypt_own_tags(event, dvm_config):
elif event.author().to_hex() == dvm_config.PUBLIC_KEY:
try:
tags_str = nip44_decrypt(Keys.parse(dvm_config.PRIVATE_KEY).secret_key(),
PublicKey.from_hex(p), event.content())
PublicKey.parse(p), event.content())
except:
tags_str = nip04_decrypt(Keys.parse(dvm_config.PRIVATE_KEY).secret_key(),
PublicKey.from_hex(p), event.content())
PublicKey.parse(p), event.content())
params = json.loads(tags_str)
params.append(Tag.parse(["p", p]).as_vec())
params.append(Tag.parse(["encrypted"]).as_vec())

View File

@ -107,7 +107,7 @@ def post_process_list_to_events(result):
for tag in result_list:
try:
e_tag = Tag.parse(tag)
id = EventId.from_hex(e_tag.as_vec()[1]).to_bech32()
id = EventId.parse(e_tag.as_vec()[1]).to_bech32()
result_str = result_str + "nostr:" + id + "\n"
except Exception as e:
print(e)

View File

@ -1,6 +1,6 @@
from setuptools import setup, find_packages
VERSION = '1.0.5'
VERSION = '1.0.6'
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. See the github repository for more information')
@ -14,7 +14,7 @@ setup(
long_description=LONG_DESCRIPTION,
packages=find_packages(include=['nostr_dvm', 'nostr_dvm.*']),
install_requires=["nostr-sdk==0.37.0",
install_requires=["nostr-sdk==0.38.0",
"bech32==1.2.0",
"pycryptodome==3.20.0",
"yt-dlp==2024.11.04",

View File

@ -120,7 +120,7 @@ def playground(announce=False):
async def process(request_form):
since = 2 * 60 * 60
options = dvm.set_options(request_form)
sk = SecretKey.from_hex(dvm.dvm_config.PRIVATE_KEY)
sk = SecretKey.parse(dvm.dvm_config.PRIVATE_KEY)
keys = Keys.parse(sk.to_hex())
relaylimits = RelayLimits.disable()

View File

@ -326,7 +326,7 @@ async def nostr_client_test_discovery_user(user, ptag):
await client.add_relay(relay)
await client.connect()
config = DVMConfig
eventid = await send_event(event, client=client, dvm_config=config)
await send_event(event, client=client, dvm_config=config)
return event.as_json()
@ -351,7 +351,7 @@ async def nostr_client_test_discovery_gallery(user, ptag):
await client.add_relay(relay)
await client.connect()
config = DVMConfig
eventid = await send_event(event, client=client, dvm_config=config)
await send_event(event, client=client, dvm_config=config)
return event.as_json()

View File

@ -28,14 +28,14 @@ async def test():
await test_referred_events(client, "5635e5dd930b3c831f6ab1e348bb488f3c9aca2f13190e93ab5e5e1e1ba1835e",
definitions.EventDefinitions.ANY_RESULT)
bech32evnt = EventId.from_hex("5635e5dd930b3c831f6ab1e348bb488f3c9aca2f13190e93ab5e5e1e1ba1835e").to_bech32()
bech32evnt = EventId.parse("5635e5dd930b3c831f6ab1e348bb488f3c9aca2f13190e93ab5e5e1e1ba1835e").to_bech32()
print(bech32evnt)
test = Nip19Event.from_bech32(
"nevent1qqsrjcpejsrlt3u7dy42y6rc97svrq9ver08xy4jr2ll55ynq3sxafcppamhxue69uhkummnw3ezumt0d5pzpmnqx2pla0zvxxcfjqeeysy29ll3mtmf4s3yff0y45r7egau080vqvzqqqqqqyu4q839")
print(test.event_id().to_hex())
nostruri = EventId.from_hex("5635e5dd930b3c831f6ab1e348bb488f3c9aca2f13190e93ab5e5e1e1ba1835e").to_nostr_uri()
nostruri = EventId.parse("5635e5dd930b3c831f6ab1e348bb488f3c9aca2f13190e93ab5e5e1e1ba1835e").to_nostr_uri()
print(nostruri)
await test_search_by_user_since_days(client,
@ -49,9 +49,9 @@ async def test_referred_events(client, event_id, kinds=None):
kinds = []
if len(kinds) > 0:
job_id_filter = Filter().kinds(kinds).event(EventId.from_hex(event_id))
job_id_filter = Filter().kinds(kinds).event(EventId.parse(event_id))
else:
job_id_filter = Filter().event(EventId.from_hex(event_id))
job_id_filter = Filter().event(EventId.parse(event_id))
event_struct = await client.fetch_events([job_id_filter], relay_timeout)
events = event_struct.to_vec()

View File

@ -11,7 +11,7 @@ from nostr_dvm.utils.print_utils import bcolors
import dotenv
from nostr_sdk import Keys, Client, Tag, EventBuilder, Filter, HandleNotification, Timestamp, nip04_decrypt, \
NostrSigner, Event, Kind, PublicKey
from nostr_dvm.utils.nostr_utils import send_event, check_and_set_private_key
from nostr_dvm.utils.nostr_utils import send_event, check_and_set_private_key, print_send_result
from nostr_dvm.utils.definitions import EventDefinitions
@ -46,8 +46,8 @@ async def nostr_client_generic_test(ptag):
# We connect the client
await client.connect()
# and send the Event.
result = await send_event(event, client=client, dvm_config=DVMConfig())
print(result)
response_status = await send_event(event, client=client, dvm_config=DVMConfig())
print_send_result(response_status)
async def nostr_client(target_dvm_npub):

View File

@ -14,7 +14,7 @@ from nostr_sdk import PublicKey, Client, NostrSigner, EventBuilder, Kind, Tag, K
import asyncio
from nostr_dvm.utils.definitions import EventDefinitions
from nostr_dvm.utils.dvmconfig import DVMConfig
from nostr_dvm.utils.nostr_utils import send_event, check_and_set_private_key
from nostr_dvm.utils.nostr_utils import send_event, check_and_set_private_key, print_send_result
from nostr_dvm.utils.nut_wallet_utils import NutZapWallet
from nostr_dvm.utils.print_utils import bcolors
@ -36,8 +36,8 @@ async def nostr_client_generic_test(ptag):
for relay in relay_list:
await client.add_relay(relay)
await client.connect()
result = await send_event(event, client=client, dvm_config=DVMConfig())
print(result)
response_status = await send_event(event, client=client, dvm_config=DVMConfig())
print_send_result(response_status)
async def nostr_client(target_dvm_npub):