From 3cc7fd11a81ea285998cd9418982187d15cead59 Mon Sep 17 00:00:00 2001 From: Believethehype <1097224+believethehype@users.noreply.github.com> Date: Sat, 16 Nov 2024 11:57:45 +0100 Subject: [PATCH] update to sdk 036.1 / 0.37? --- nostr_dvm/bot.py | 68 +++++++++++-------- nostr_dvm/dvm.py | 9 +-- nostr_dvm/subscription.py | 14 ++-- ...ent_discovery_currently_latest_longform.py | 4 +- ...content_discovery_currently_latest_wiki.py | 4 +- .../content_discovery_currently_popular.py | 8 +-- ...discovery_currently_popular_by_top_zaps.py | 8 +-- ...t_discovery_currently_popular_followers.py | 8 +-- ...ent_discovery_currently_popular_gallery.py | 14 ++-- ...ntent_discovery_currently_popular_mostr.py | 8 +-- ...iscovery_currently_popular_nonfollowers.py | 8 +-- ...ntent_discovery_currently_popular_topic.py | 8 +-- ...ntent_discovery_latest_one_per_follower.py | 4 +- nostr_dvm/tasks/discovery_bot_farms.py | 6 +- nostr_dvm/tasks/discovery_censor_wot.py | 4 +- nostr_dvm/tasks/discovery_inactive_follows.py | 4 +- nostr_dvm/tasks/discovery_nonfollowers.py | 5 +- nostr_dvm/tasks/people_discovery_mywot.py | 4 +- nostr_dvm/tasks/people_discovery_wot.py | 4 +- nostr_dvm/tasks/search_users.py | 6 +- nostr_dvm/utils/database_utils.py | 6 +- nostr_dvm/utils/gallery_utils.py | 2 +- nostr_dvm/utils/nip65_utils.py | 8 +-- nostr_dvm/utils/nip88_utils.py | 4 +- nostr_dvm/utils/nip89_utils.py | 6 +- nostr_dvm/utils/nip98_utils.py | 2 +- nostr_dvm/utils/nostr_utils.py | 35 ++++------ nostr_dvm/utils/nut_wallet_utils.py | 12 ++-- nostr_dvm/utils/outbox_utils.py | 18 ++--- nostr_dvm/utils/output_utils.py | 2 +- nostr_dvm/utils/reaction_utils.py | 4 +- nostr_dvm/utils/zap_utils.py | 6 +- tests/db.py | 2 +- tests/generic_dvm_autotopic_feed.py | 8 +-- tests/wot.py | 4 +- 35 files changed, 165 insertions(+), 152 deletions(-) diff --git a/nostr_dvm/bot.py b/nostr_dvm/bot.py index 0c79be8..4c87397 100644 --- a/nostr_dvm/bot.py +++ b/nostr_dvm/bot.py @@ -2,11 +2,11 @@ import asyncio import json import os import signal -from datetime import timedelta +from multiprocessing.connection import Connection -from nostr_sdk import (Keys, Client, Timestamp, Filter, nip04_decrypt, HandleNotification, EventBuilder, PublicKey, - Options, Tag, Event, nip04_encrypt, NostrSigner, EventId, Nip19Event, Kind, KindEnum, - UnsignedEvent, UnwrappedGift, uniffi_set_event_loop) +from nostr_sdk import (Keys, Timestamp, Filter, nip04_decrypt, HandleNotification, EventBuilder, PublicKey, + Options, Tag, Event, nip04_encrypt, EventId, Nip19Event, Kind, KindEnum, + UnsignedEvent, UnwrappedGift, uniffi_set_event_loop, ClientBuilder, make_private_msg) from nostr_dvm.utils.admin_utils import admin_make_database_updates from nostr_dvm.utils.cashu_utils import redeem_cashu @@ -44,8 +44,8 @@ class Bot: self.keys = Keys.parse(dvm_config.PRIVATE_KEY) self.CHATBOT = False - opts = (Options().gossip(True)) - self.client = Client.with_opts(self.keys, opts) + opts = Options().gossip(True) + self.client = ClientBuilder().signer(self.keys).opts(opts).build() self.invoice_list = [] pk = self.keys.public_key() @@ -63,9 +63,6 @@ class Bot: for relay in self.dvm_config.RELAY_LIST: await self.client.add_relay(relay) - await self.client.add_read_relay("wss://relay.nostr.band") - await self.client.add_read_relay("wss://relay.damus.io") - await self.client.connect() zap_filter = Filter().pubkey(pk).kinds([EventDefinitions.KIND_ZAP]).since(Timestamp.now()) @@ -124,7 +121,6 @@ class Bot: if giftwrap: try: # Extract rumor - unwrapped_gift = await UnwrappedGift.from_gift_wrap(self.keys, nostr_event) sender = unwrapped_gift.sender().to_hex() rumor: UnsignedEvent = unwrapped_gift.rumor() @@ -194,13 +190,13 @@ class Bot: encrypted_tag = Tag.parse(['encrypted']) # add the encrypted params to the content nip90request = (EventBuilder(self.dvm_config.SUPPORTED_DVMS[index].KIND, - encrypted_params, [p_tag, encrypted_tag]). + encrypted_params).tags([p_tag, encrypted_tag]). sign_with_keys(self.keys)) else: tags.append(p_tag) nip90request = (EventBuilder(self.dvm_config.SUPPORTED_DVMS[index].KIND, - "", tags). + "").tags(tags). sign_with_keys(self.keys)) # remember in the job_list that we have made an event, if anybody asks for payment, @@ -240,7 +236,10 @@ class Bot: else: message = invoice if giftwrap: - await self.client.send_private_msg(PublicKey.parse(sender), message, None) + event = await make_private_msg(self.keys, PublicKey.parse(sender), message, + None) + await self.client.send_event(event) + else: await send_nip04_dm(self.client, message, PublicKey.parse(sender), self.dvm_config) @@ -259,11 +258,11 @@ class Bot: "100 sats (or any other amount) " "to top up your balance") if giftwrap: - await self.client.send_private_msg(PublicKey.parse(sender), message, None) + event = await make_private_msg(self.keys, PublicKey.parse(sender), message, + None) + await self.client.send_event(event) else: await send_nip04_dm(self.client, message, PublicKey.parse(sender), self.dvm_config) - # await self.client.send_direct_msg(PublicKey.parse(sender), message, None) - # await self.client.send_private_msg(PublicKey.parse(sender), message, None) elif decrypted_text.startswith("cashuA"): print("Received Cashu token:" + decrypted_text) cashu_redeemed, cashu_message, total_amount, fees = await redeem_cashu(decrypted_text, @@ -278,14 +277,18 @@ class Bot: message = "Error: " + cashu_message + ". Token has not been redeemed." if giftwrap: - await self.client.send_private_msg(PublicKey.parse(sender), message, None) + event = await make_private_msg(self.keys, PublicKey.parse(sender), message, + None) + await self.client.send_event(event) else: await send_nip04_dm(self.client, message, PublicKey.parse(sender), self.dvm_config) elif decrypted_text.lower().startswith("what's the second best"): await asyncio.sleep(2.0) message = "No, there is no second best.\n\nhttps://cdn.nostr.build/p/mYLv.mp4" if giftwrap: - await self.client.send_private_msg(PublicKey.parse(sender), message, None) + event = await make_private_msg(self.keys, PublicKey.parse(sender), message, + None) + await self.client.send_event(event) else: await send_nip04_dm(self.client, message, PublicKey.parse(sender), self.dvm_config) else: @@ -313,7 +316,7 @@ class Bot: tags.append(p_tag) nip90request = (EventBuilder(Kind(kind), - "", tags). + "").tags(tags). sign_with_keys(self.keys)) entry = {"npub": user.npub, "event_id": nip90request.id().to_hex(), @@ -379,7 +382,9 @@ class Bot: client=self.client, config=self.dvm_config) await asyncio.sleep(2.0) if entry["giftwrap"]: - await self.client.send_private_msg(PublicKey.parse(entry["npub"]), content, None) + event = await make_private_msg(self.keys, PublicKey.parse(PublicKey.parse(entry["npub"])), content, + None) + await self.client.send_event(event) else: await send_nip04_dm(self.client, content, PublicKey.parse(entry['npub']), self.dvm_config) print(status + ": " + content) @@ -408,8 +413,9 @@ class Bot: amount) + " Sats from balance to DVM. New balance is " + str( balance) + " Sats.\n" if entry["giftwrap"]: - await self.client.send_private_msg(PublicKey.parse(entry["npub"]), message, - None) + event = await make_private_msg(self.keys, PublicKey.parse(PublicKey.parse(entry["npub"])), message, + None) + await self.client.send_event(event) else: await send_nip04_dm(self.client, content, PublicKey.parse(entry['npub']), self.dvm_config) @@ -424,8 +430,9 @@ class Bot: int(amount - user.balance)) + " Sats, then try again." if entry["giftwrap"]: - await self.client.send_private_msg(PublicKey.parse(entry["npub"]), message, - None) + event = await make_private_msg(self.keys, PublicKey.parse(PublicKey.parse((entry["npub"]))), message, + None) + await self.client.send_event(event) else: await send_nip04_dm(self.client, message, PublicKey.parse(entry['npub']), self.dvm_config) @@ -502,7 +509,9 @@ class Bot: print("[" + self.NAME + "] Received results, message to orignal sender " + user.name) await asyncio.sleep(2.0) if entry["giftwrap"]: - await self.client.send_private_msg(PublicKey.parse(user.npub), content, None) + event = await make_private_msg(self.keys, PublicKey.parse(user.npub), content, + None) + await self.client.send_event(event) else: await send_nip04_dm(self.client, content, PublicKey.parse(user.npub), self.dvm_config) @@ -568,14 +577,16 @@ class Bot: text = 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 Type \"balance\" to see your current balance" if giftwrap: - await self.client.send_private_msg(PublicKey.parse(sender), text, nostr_event.id()) + event = await make_private_msg(self.keys, PublicKey.parse(sender), text) + await self.client.send_event(event) else: await send_nip04_dm(self.client, text, PublicKey.parse(sender), self.dvm_config) async def answer_blacklisted(nostr_event, giftwrap, sender): message = "Your are currently blocked from this service." if giftwrap: - await self.client.send_private_msg(PublicKey.parse(sender), message, None) + event = await make_private_msg(self.keys, PublicKey.parse(sender), message) + await self.client.send_event(event) else: await send_nip04_dm(self.client, message, PublicKey.parse(sender), self.dvm_config) @@ -586,7 +597,8 @@ class Bot: await asyncio.sleep(2.0) if giftwrap: - await self.client.send_private_msg(PublicKey.parse(sender), info, None) + event = await make_private_msg(self.keys, PublicKey.parse(sender), info) + await self.client.send_event(event) else: await send_nip04_dm(self.client, info, PublicKey.parse(sender), self.dvm_config) diff --git a/nostr_dvm/dvm.py b/nostr_dvm/dvm.py index 27b3bfb..9a5c620 100644 --- a/nostr_dvm/dvm.py +++ b/nostr_dvm/dvm.py @@ -4,7 +4,7 @@ import os from sys import platform from nostr_sdk import PublicKey, Keys, Client, Tag, Event, EventBuilder, Filter, HandleNotification, Timestamp, \ - LogLevel, Options, nip04_encrypt, Kind, RelayLimits, uniffi_set_event_loop + LogLevel, Options, nip04_encrypt, Kind, RelayLimits, uniffi_set_event_loop, ClientBuilder from nostr_dvm.utils.admin_utils import admin_make_database_updates, AdminConfig from nostr_dvm.utils.backend_utils import get_amount_per_task, check_task_is_supported, get_task @@ -47,7 +47,8 @@ class DVM: opts = ( Options().relay_limits(relaylimits)) #.difficulty(28) - self.client = Client.with_opts(self.keys, opts) + #self.client = Client(self.keys) + self.client = ClientBuilder().signer(self.keys).opts(opts).build() self.job_list = [] self.jobs_on_hold_list = [] pk = self.keys.public_key() @@ -611,7 +612,7 @@ class DVM: content = nip04_encrypt(self.keys.secret_key(), PublicKey.from_hex(original_event.author().to_hex()), content) - reply_event = EventBuilder(Kind(original_event.kind().as_u16() + 1000), str(content), reply_tags).sign_with_keys( + reply_event = EventBuilder(Kind(original_event.kind().as_u16() + 1000), str(content)).tags(reply_tags).sign_with_keys( self.keys) # send_event(reply_event, client=self.client, dvm_config=self.dvm_config) @@ -727,7 +728,7 @@ class DVM: content = reaction keys = Keys.parse(dvm_config.PRIVATE_KEY) - reaction_event = EventBuilder(EventDefinitions.KIND_FEEDBACK, str(content), reply_tags).sign_with_keys(keys) + 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) diff --git a/nostr_dvm/subscription.py b/nostr_dvm/subscription.py index 7dd7e15..a64ec5d 100644 --- a/nostr_dvm/subscription.py +++ b/nostr_dvm/subscription.py @@ -6,7 +6,7 @@ import signal from datetime import timedelta from nostr_sdk import (Keys, Client, Timestamp, Filter, nip04_decrypt, HandleNotification, EventBuilder, PublicKey, - Options, Tag, Event, nip04_encrypt, NostrSigner, EventId, uniffi_set_event_loop) + Options, Tag, Event, nip04_encrypt, NostrSigner, EventId, uniffi_set_event_loop, make_private_msg) from nostr_dvm.utils.database_utils import fetch_user_metadata from nostr_dvm.utils.definitions import EventDefinitions, relay_timeout @@ -151,7 +151,7 @@ class Subscription: reply_tags = encryption_tags keys = Keys.parse(dvm_config.PRIVATE_KEY) - reaction_event = EventBuilder(EventDefinitions.KIND_FEEDBACK, str(content), reply_tags).sign_with_keys(keys) + reaction_event = EventBuilder(EventDefinitions.KIND_FEEDBACK, str(content)).tags(reply_tags).sign_with_keys(keys) await send_event(reaction_event, client=self.client, dvm_config=self.dvm_config) print("[" + self.dvm_config.NIP89.NAME + "]" + ": Sent Kind " + str( EventDefinitions.KIND_FEEDBACK.as_u16()) + " Reaction: " + "success" + " " + reaction_event.as_json()) @@ -209,7 +209,7 @@ class Subscription: tags = [pTag, PTag, eTag, validTag, tierTag, alttag] event = EventBuilder(EventDefinitions.KIND_NIP88_PAYMENT_RECIPE, - message, tags).sign_with_keys(self.keys) + message).tags(tags).sign_with_keys(self.keys) dvmconfig = DVMConfig() client = Client(self.keys) @@ -348,7 +348,9 @@ class Subscription: Timestamp.from_secs(end).to_human_datetime().replace("Z", " ").replace("T", " ") + " GMT")) - self.client.send_private_msg(PublicKey.parse(subscriber), message, None) + event = await make_private_msg(self.keys, PublicKey.parse(subscriber), message, + None) + await self.client.send_event(event) @@ -407,7 +409,9 @@ class Subscription: Timestamp.from_secs(end).to_human_datetime().replace("Z", " ").replace("T", " "))) # await self.client.send_direct_msg(PublicKey.parse(subscription.subscriber), message, None) - await self.client.send_private_msg(PublicKey.parse(subscription.subscriber), message, None) + event = await make_private_msg(self.keys, PublicKey.parse(subscription.subscriber), message, + None) + await self.client.send_event(event) async def check_subscriptions(): try: diff --git a/nostr_dvm/tasks/content_discovery_currently_latest_longform.py b/nostr_dvm/tasks/content_discovery_currently_latest_longform.py index a1207a1..6d28e16 100644 --- a/nostr_dvm/tasks/content_discovery_currently_latest_longform.py +++ b/nostr_dvm/tasks/content_discovery_currently_latest_longform.py @@ -123,10 +123,10 @@ class DicoverContentLatestLongForm(DVMTaskInterface): filter1 = Filter().kind(definitions.EventDefinitions.KIND_LONGFORM).since(since) events = await cli.database().query([filter1]) if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value: - print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events)) + " Events") + print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events") ns.finallist = {} index = options["max_results"] - for event in events: + for event in events.to_vec(): if event.created_at().as_secs() > timestamp_hour_ago: ns.finallist[event.id().to_hex()] = index index = index - 1 diff --git a/nostr_dvm/tasks/content_discovery_currently_latest_wiki.py b/nostr_dvm/tasks/content_discovery_currently_latest_wiki.py index 68ed059..e8c9e32 100644 --- a/nostr_dvm/tasks/content_discovery_currently_latest_wiki.py +++ b/nostr_dvm/tasks/content_discovery_currently_latest_wiki.py @@ -123,10 +123,10 @@ class DicoverContentLatestWiki(DVMTaskInterface): filter1 = Filter().kind(definitions.EventDefinitions.KIND_WIKI).since(since) events = await cli.database().query([filter1]) if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value: - print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events)) + " Events") + print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events") ns.finallist = {} index = options["max_results"] - for event in events: + for event in events.to_vec(): if event.created_at().as_secs() > timestamp_hour_ago: ns.finallist[event.id().to_hex()] = index index = index - 1 diff --git a/nostr_dvm/tasks/content_discovery_currently_popular.py b/nostr_dvm/tasks/content_discovery_currently_popular.py index ac09e91..22c76b6 100644 --- a/nostr_dvm/tasks/content_discovery_currently_popular.py +++ b/nostr_dvm/tasks/content_discovery_currently_popular.py @@ -117,17 +117,17 @@ class DicoverContentCurrentlyPopular(DVMTaskInterface): events = await database.query([filter1]) if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value: - print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events)) + " Events") + print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events") ns.finallist = {} - for event in events: + for event in events.to_vec(): if event.created_at().as_secs() > timestamp_since: filt = Filter().kinds([definitions.EventDefinitions.KIND_ZAP, definitions.EventDefinitions.KIND_REPOST, definitions.EventDefinitions.KIND_REACTION, definitions.EventDefinitions.KIND_NOTE]).event(event.id()).since(since) reactions = await database.query([filt]) - if len(reactions) >= self.min_reactions: - ns.finallist[event.id().to_hex()] = len(reactions) + if len(reactions.to_vec()) >= self.min_reactions: + ns.finallist[event.id().to_hex()] = len(reactions.to_vec()) if len(ns.finallist) == 0: return self.result diff --git a/nostr_dvm/tasks/content_discovery_currently_popular_by_top_zaps.py b/nostr_dvm/tasks/content_discovery_currently_popular_by_top_zaps.py index 1b0a56c..e7c9f30 100644 --- a/nostr_dvm/tasks/content_discovery_currently_popular_by_top_zaps.py +++ b/nostr_dvm/tasks/content_discovery_currently_popular_by_top_zaps.py @@ -115,20 +115,20 @@ class DicoverContentCurrentlyPopularZaps(DVMTaskInterface): filter1 = Filter().kind(definitions.EventDefinitions.KIND_NOTE).since(since) events = await database.query([filter1]) if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value: - print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events)) + " Events") + print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events") ns.finallist = {} - for event in events: + for event in events.to_vec(): if event.created_at().as_secs() > timestamp_hour_ago: filt = Filter().kinds([definitions.EventDefinitions.KIND_ZAP]).event(event.id()).since(since) zaps = await database.query([filt]) invoice_amount = 0 event_author = event.author().to_hex() - if len(zaps) >= self.min_reactions: + if len(zaps.to_vec()) >= self.min_reactions: has_preimage = False has_amount = False overall_amount = 0 - for zap in zaps: + for zap in zaps.to_vec(): if event_author == zap.author().to_hex(): continue # Skip self zaps.. invoice_amount = 0 diff --git a/nostr_dvm/tasks/content_discovery_currently_popular_followers.py b/nostr_dvm/tasks/content_discovery_currently_popular_followers.py index afa7f8b..6f3bcf6 100644 --- a/nostr_dvm/tasks/content_discovery_currently_popular_followers.py +++ b/nostr_dvm/tasks/content_discovery_currently_popular_followers.py @@ -137,18 +137,18 @@ class DicoverContentCurrentlyPopularFollowers(DVMTaskInterface): filter1 = Filter().kind(definitions.EventDefinitions.KIND_NOTE).authors(followings).since(since) events = await cli.database().query([filter1]) if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value: - print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events)) + " Events") + print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events") ns.finallist = {} - for event in events: + for event in events.to_vec(): # if event.created_at().as_secs() > timestamp_since: filt = Filter().kinds( [definitions.EventDefinitions.KIND_ZAP, definitions.EventDefinitions.KIND_REACTION, definitions.EventDefinitions.KIND_REPOST, definitions.EventDefinitions.KIND_NOTE]).event(event.id()).since(since) reactions = await cli.database().query([filt]) - if len(reactions) >= self.min_reactions: - ns.finallist[event.id().to_hex()] = len(reactions) + if len(reactions.to_vec()) >= self.min_reactions: + ns.finallist[event.id().to_hex()] = len(reactions.to_vec()) finallist_sorted = sorted(ns.finallist.items(), key=lambda x: x[1], reverse=True)[ :int(options["max_results"])] diff --git a/nostr_dvm/tasks/content_discovery_currently_popular_gallery.py b/nostr_dvm/tasks/content_discovery_currently_popular_gallery.py index 3bc1857..9a717f8 100644 --- a/nostr_dvm/tasks/content_discovery_currently_popular_gallery.py +++ b/nostr_dvm/tasks/content_discovery_currently_popular_gallery.py @@ -121,16 +121,16 @@ class DicoverContentCurrentlyPopularGallery(DVMTaskInterface): ge_events = await databasegallery.query([filter1]) if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value: - print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(ge_events)) + " Events") + print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(ge_events.to_vec())) + " Events") ns.finallist = {} ids = [] relays = [] - if len(ge_events) == 0: + if len(ge_events.to_vec()) == 0: return [] - for ge_event in ge_events: + for ge_event in ge_events.to_vec(): id = None for tag in ge_event.tags().to_vec(): @@ -176,7 +176,7 @@ class DicoverContentCurrentlyPopularGallery(DVMTaskInterface): if event.created_at().as_secs() > timestamp_since: filt1 = Filter().kinds([definitions.EventDefinitions.KIND_DELETION]).event(event.id()).limit(1) deletions = await databasegallery.query([filt1]) - if len(deletions) > 0: + if len(deletions.to_vec()) > 0: print("Deleted event, skipping") continue @@ -185,13 +185,13 @@ class DicoverContentCurrentlyPopularGallery(DVMTaskInterface): definitions.EventDefinitions.KIND_NOTE]).event(event.id()).since(since) reactions = await databasegallery.query([filt]) - if len(reactions) >= self.min_reactions: + if len(reactions.to_vec()) >= self.min_reactions: found = False - for ge_event in ge_events: + for ge_event in ge_events.to_vec(): for tag in ge_event.tags().to_vec(): if tag.as_vec()[0] == "e": if event.id().to_hex() == tag.as_vec()[1]: - ns.finallist[ge_event.id().to_hex()] = len(reactions) + ns.finallist[ge_event.id().to_hex()] = len(reactions.to_vec()) found = True break if found: diff --git a/nostr_dvm/tasks/content_discovery_currently_popular_mostr.py b/nostr_dvm/tasks/content_discovery_currently_popular_mostr.py index 5de007e..1e46d56 100644 --- a/nostr_dvm/tasks/content_discovery_currently_popular_mostr.py +++ b/nostr_dvm/tasks/content_discovery_currently_popular_mostr.py @@ -121,10 +121,10 @@ class DicoverContentCurrentlyPopularMostr(DVMTaskInterface): events = await database.query([filter1]) if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value: - print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events)) + " Events") + print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events") ns.finallist = {} - for event in events: + for event in events.to_vec(): if event.created_at().as_secs() > timestamp_since: filt = Filter().kinds( @@ -133,8 +133,8 @@ class DicoverContentCurrentlyPopularMostr(DVMTaskInterface): EventDefinitions.KIND_NOTE]).event(event.id()).since(since) reactions = await database.query([filt]) - if len(reactions) >= self.min_reactions: - ns.finallist[event.id().to_hex()] = len(reactions) + if len(reactions.to_vec()) >= self.min_reactions: + ns.finallist[event.id().to_hex()] = len(reactions.to_vec()) if len(ns.finallist) == 0: return self.result diff --git a/nostr_dvm/tasks/content_discovery_currently_popular_nonfollowers.py b/nostr_dvm/tasks/content_discovery_currently_popular_nonfollowers.py index 829c77e..4a44715 100644 --- a/nostr_dvm/tasks/content_discovery_currently_popular_nonfollowers.py +++ b/nostr_dvm/tasks/content_discovery_currently_popular_nonfollowers.py @@ -185,10 +185,10 @@ class DicoverContentCurrentlyPopularNonFollowers(DVMTaskInterface): events = await self.database.query([filter1]) - print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events)) + " Events") + print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events") ns.finallist = {} - for event in events: + for event in events.to_vec(): if event.author().to_hex() in followings: continue @@ -197,8 +197,8 @@ class DicoverContentCurrentlyPopularNonFollowers(DVMTaskInterface): definitions.EventDefinitions.KIND_REPOST, definitions.EventDefinitions.KIND_NOTE]).event(event.id()).since(since) reactions = await self.database.query([filt]) - if len(reactions) >= self.min_reactions: - ns.finallist[event.id().to_hex()] = len(reactions) + if len(reactions.to_vec()) >= self.min_reactions: + ns.finallist[event.id().to_hex()] = len(reactions.to_vec()) print(len(ns.finallist)) result_list = [] diff --git a/nostr_dvm/tasks/content_discovery_currently_popular_topic.py b/nostr_dvm/tasks/content_discovery_currently_popular_topic.py index 91c1d73..5a7758d 100644 --- a/nostr_dvm/tasks/content_discovery_currently_popular_topic.py +++ b/nostr_dvm/tasks/content_discovery_currently_popular_topic.py @@ -161,10 +161,10 @@ class DicoverContentCurrentlyPopularbyTopic(DVMTaskInterface): events = await self.database.query(filters) if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value: - print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events)) + " Events") + print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events") ns.finallist = {} - for event in events: + for event in events.to_vec(): if all(ele in event.content().lower() for ele in self.must_list): # if any(ele in event.content().lower() for ele in self.search_list): if not any(ele in event.content().lower() for ele in self.avoid_list): @@ -173,8 +173,8 @@ class DicoverContentCurrentlyPopularbyTopic(DVMTaskInterface): definitions.EventDefinitions.KIND_REPOST, definitions.EventDefinitions.KIND_NOTE]).event(event.id()).since(since) reactions = await self.database.query([filt]) - if len(reactions) >= self.min_reactions: - ns.finallist[event.id().to_hex()] = len(reactions) + if len(reactions.to_vec()) >= self.min_reactions: + ns.finallist[event.id().to_hex()] = len(reactions.to_vec()) result_list = [] finallist_sorted = sorted(ns.finallist.items(), key=lambda x: x[1], reverse=True)[:int(options["max_results"])] diff --git a/nostr_dvm/tasks/content_discovery_latest_one_per_follower.py b/nostr_dvm/tasks/content_discovery_latest_one_per_follower.py index a43400f..11ef815 100644 --- a/nostr_dvm/tasks/content_discovery_latest_one_per_follower.py +++ b/nostr_dvm/tasks/content_discovery_latest_one_per_follower.py @@ -4,7 +4,7 @@ import os from datetime import timedelta from threading import Thread -from nostr_sdk import Client, Timestamp, PublicKey, Tag, Keys, Options, SecretKey, NostrSigner, Kind, RelayLimits +from nostr_sdk import Client, Timestamp, PublicKey, Tag, Keys, Options, SecretKey, NostrSigner, Kind, RelayLimits, ClientBuilder from nostr_dvm.interfaces.dvmtaskinterface import DVMTaskInterface, process_venv from nostr_dvm.utils.admin_utils import AdminConfig @@ -76,7 +76,7 @@ class Discoverlatestperfollower(DVMTaskInterface): opts = (Options().relay_limits(relaylimits)) - cli = Client.with_opts(keys, opts) + cli = ClientBuilder().signer(keys).opts(opts).build() for relay in self.dvm_config.RELAY_LIST: await cli.add_relay(relay) # ropts = RelayOptions().ping(False) diff --git a/nostr_dvm/tasks/discovery_bot_farms.py b/nostr_dvm/tasks/discovery_bot_farms.py index 60a199b..2ee8f8e 100644 --- a/nostr_dvm/tasks/discovery_bot_farms.py +++ b/nostr_dvm/tasks/discovery_bot_farms.py @@ -91,13 +91,13 @@ class DiscoveryBotFarms(DVMTaskInterface): filter1 = Filter().kind(Kind(0)) events = await cli.database().query([filter1]) result_list = [] - print("Events: " + str(len(events))) + print("Events: " + str(len(events.to_vec()))) searchterms = str(options["search"]).split(";") index = 0 - if len(events) > 0: + if len(events.to_vec()) > 0: - for event in events: + for event in events.to_vec(): if index < options["max_results"]: try: if any(ext in event.content().lower() for ext in searchterms): diff --git a/nostr_dvm/tasks/discovery_censor_wot.py b/nostr_dvm/tasks/discovery_censor_wot.py index 2bd81c8..9dcbe12 100644 --- a/nostr_dvm/tasks/discovery_censor_wot.py +++ b/nostr_dvm/tasks/discovery_censor_wot.py @@ -2,7 +2,7 @@ import json import os from datetime import timedelta -from nostr_sdk import Client, Timestamp, PublicKey, Tag, Keys, Options, SecretKey, NostrSigner, Kind, RelayLimits +from nostr_sdk import Client, Timestamp, PublicKey, Tag, Keys, Options, SecretKey, NostrSigner, Kind, RelayLimits, ClientBuilder from nostr_dvm.interfaces.dvmtaskinterface import DVMTaskInterface, process_venv from nostr_dvm.utils.admin_utils import AdminConfig @@ -73,7 +73,7 @@ class DiscoverReports(DVMTaskInterface): Options().relay_limits(relaylimits)) sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY) keys = Keys.parse(sk.to_hex()) - cli = Client.with_opts(keys, opts) + cli = ClientBuilder().signer(keys).opts(opts).build() # cli.add_relay("wss://relay.nostr.band") for relay in self.dvm_config.RELAY_LIST: await cli.add_relay(relay) diff --git a/nostr_dvm/tasks/discovery_inactive_follows.py b/nostr_dvm/tasks/discovery_inactive_follows.py index 35e0fc1..02f4527 100644 --- a/nostr_dvm/tasks/discovery_inactive_follows.py +++ b/nostr_dvm/tasks/discovery_inactive_follows.py @@ -5,7 +5,7 @@ from datetime import timedelta from threading import Thread from nostr_sdk import Client, Timestamp, PublicKey, Tag, Keys, Options, SecretKey, NostrSigner, Kind, RelayOptions, \ - RelayLimits + RelayLimits, ClientBuilder from nostr_dvm.interfaces.dvmtaskinterface import DVMTaskInterface, process_venv from nostr_dvm.utils.admin_utils import AdminConfig @@ -76,7 +76,7 @@ class DiscoverInactiveFollows(DVMTaskInterface): opts = (Options().relay_limits(relaylimits)) - cli = Client.with_opts(keys, opts) + cli = ClientBuilder().signer(keys).opts(opts).build() for relay in self.dvm_config.RELAY_LIST: await cli.add_relay(relay) await cli.add_relay("wss://nostr.band") diff --git a/nostr_dvm/tasks/discovery_nonfollowers.py b/nostr_dvm/tasks/discovery_nonfollowers.py index 34e42b3..a9bff5e 100644 --- a/nostr_dvm/tasks/discovery_nonfollowers.py +++ b/nostr_dvm/tasks/discovery_nonfollowers.py @@ -5,7 +5,7 @@ from datetime import timedelta from threading import Thread from nostr_sdk import Client, PublicKey, Tag, Keys, Options, SecretKey, NostrSigner, Kind, RelayOptions, \ - RelayLimits + RelayLimits, ClientBuilder from nostr_dvm.interfaces.dvmtaskinterface import DVMTaskInterface, process_venv from nostr_dvm.utils.admin_utils import AdminConfig @@ -68,7 +68,8 @@ class DiscoverNonFollowers(DVMTaskInterface): relaylimits)) sk = SecretKey.from_hex(self.dvm_config.PRIVATE_KEY) keys = Keys.parse(sk.to_hex()) - cli = Client.with_opts(keys, opts) + cli= ClientBuilder().signer(keys).opts(opts).build() + # cli.add_relay("wss://relay.nostr.band") for relay in self.dvm_config.RELAY_LIST: await cli.add_relay(relay) diff --git a/nostr_dvm/tasks/people_discovery_mywot.py b/nostr_dvm/tasks/people_discovery_mywot.py index 0c1d9f5..1cc353e 100644 --- a/nostr_dvm/tasks/people_discovery_mywot.py +++ b/nostr_dvm/tasks/people_discovery_mywot.py @@ -248,8 +248,8 @@ async def analyse_users(user_ids=None, dunbar=100000000): followers_filter = Filter().authors(user_keys).kind(Kind(3)) followers = await database.query([followers_filter]) allfriends = [] - if len(followers) > 0: - for follower in followers: + if len(followers.to_vec()) > 0: + for follower in followers.to_vec(): frens = [] if len(follower.tags().to_vec()) < dunbar: for tag in follower.tags().to_vec(): diff --git a/nostr_dvm/tasks/people_discovery_wot.py b/nostr_dvm/tasks/people_discovery_wot.py index 591afdc..61af031 100644 --- a/nostr_dvm/tasks/people_discovery_wot.py +++ b/nostr_dvm/tasks/people_discovery_wot.py @@ -253,8 +253,8 @@ async def analyse_users(user_ids=None, dunbar=100000000): followers_filter = Filter().authors(user_keys).kind(Kind(3)) followers = await database.query([followers_filter]) allfriends = [] - if len(followers) > 0: - for follower in followers: + if len(followers.to_vec()) > 0: + for follower in followers.to_vec(): frens = [] if len(follower.tags().to_vec()) < dunbar: for tag in follower.tags().to_vec(): diff --git a/nostr_dvm/tasks/search_users.py b/nostr_dvm/tasks/search_users.py index 05cac30..932ca69 100644 --- a/nostr_dvm/tasks/search_users.py +++ b/nostr_dvm/tasks/search_users.py @@ -95,11 +95,11 @@ class SearchUser(DVMTaskInterface): events = await cli.database().query([filter1]) result_list = [] - print("Events: " + str(len(events))) + print("Events: " + str(len(events.to_vec()))) index = 0 - if len(events) > 0: + if len(events.to_vec()) > 0: - for event in events: + for event in events.to_vec(): if index < options["max_results"]: try: if options["search"].lower() in event.content().lower(): diff --git a/nostr_dvm/utils/database_utils.py b/nostr_dvm/utils/database_utils.py index a9abad0..ae96b79 100644 --- a/nostr_dvm/utils/database_utils.py +++ b/nostr_dvm/utils/database_utils.py @@ -5,7 +5,7 @@ from dataclasses import dataclass from logging import Filter from sqlite3 import Error -from nostr_sdk import Timestamp, Keys, PublicKey, Filter, Kind +from nostr_sdk import Timestamp, Keys, PublicKey, Filter, Kind, make_private_msg from nostr_dvm.utils.definitions import relay_timeout from nostr_dvm.utils.nostr_utils import send_nip04_dm @@ -192,7 +192,9 @@ async def update_user_balance(db, npub, additional_sats, client, config, giftwra # always send giftwrapped. sorry not sorry. #if giftwrap: - await client.send_private_msg(PublicKey.parse(npub), message, None) + event = await make_private_msg(keys, PublicKey.parse(npub), message, + None) + await client.send_event(event) #else: # await send_nip04_dm(client, message, PublicKey.parse(npub), config) diff --git a/nostr_dvm/utils/gallery_utils.py b/nostr_dvm/utils/gallery_utils.py index 8147431..6bb25eb 100644 --- a/nostr_dvm/utils/gallery_utils.py +++ b/nostr_dvm/utils/gallery_utils.py @@ -7,7 +7,7 @@ from nostr_dvm.utils.print_utils import bcolors async def gallery_announce_list(tags, dvm_config, client): keys = Keys.parse(dvm_config.NIP89.PK) content = "" - event = EventBuilder(Kind(10011), content, tags).sign_with_keys(keys) + event = EventBuilder(Kind(10011), content).tags(tags).sign_with_keys(keys) eventid = await send_event(event, client=client, dvm_config=dvm_config) print( diff --git a/nostr_dvm/utils/nip65_utils.py b/nostr_dvm/utils/nip65_utils.py index 8797651..55c4791 100644 --- a/nostr_dvm/utils/nip65_utils.py +++ b/nostr_dvm/utils/nip65_utils.py @@ -15,9 +15,9 @@ async def announce_dm_relays(dvm_config, client): keys = Keys.parse(dvm_config.NIP89.PK) content = "" - event = EventBuilder(Kind(10050), content, tags).sign_with_keys(keys) + event = EventBuilder(Kind(10050), content).tags(tags).sign_with_keys(keys) eventid = await send_event(event, client=client, dvm_config=dvm_config) - if (eventid is not None): + if eventid 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) @@ -39,9 +39,9 @@ async def nip65_announce_relays(dvm_config, client): keys = Keys.parse(dvm_config.NIP89.PK) content = "" - event = EventBuilder(EventDefinitions.KIND_RELAY_ANNOUNCEMENT, content, tags).sign_with_keys(keys) + event = EventBuilder(EventDefinitions.KIND_RELAY_ANNOUNCEMENT, content).tags(tags).sign_with_keys(keys) eventid = await send_event(event, client=client, dvm_config=dvm_config) - if (eventid is not None): + if eventid 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) diff --git a/nostr_dvm/utils/nip88_utils.py b/nostr_dvm/utils/nip88_utils.py index 199dda2..1b8c63c 100644 --- a/nostr_dvm/utils/nip88_utils.py +++ b/nostr_dvm/utils/nip88_utils.py @@ -83,7 +83,7 @@ async def nip88_delete_announcement(eid: str, keys: Keys, dtag: str, client: Cli e_tag = Tag.parse(["e", eid]) a_tag = Tag.parse( ["a", str(EventDefinitions.KIND_NIP88_TIER_EVENT) + ":" + keys.public_key().to_hex() + ":" + dtag]) - event = EventBuilder(Kind(5), "", [e_tag, a_tag]).sign_with_keys(keys) + event = EventBuilder(Kind(5), "").tags([e_tag, a_tag]).sign_with_keys(keys) await send_event(event, client, config) @@ -176,7 +176,7 @@ async def nip88_announce_tier(dvm_config, client): keys = Keys.parse(dvm_config.NIP89.PK) content = dvm_config.NIP88.CONTENT - event = EventBuilder(EventDefinitions.KIND_NIP88_TIER_EVENT, content, tags).sign_with_keys(keys) + event = EventBuilder(EventDefinitions.KIND_NIP88_TIER_EVENT, content).tags(tags).sign_with_keys(keys) annotier_id = await send_event(event, client=client, dvm_config=dvm_config) if dvm_config.NIP89 is not None: diff --git a/nostr_dvm/utils/nip89_utils.py b/nostr_dvm/utils/nip89_utils.py index 3234c47..9dd92da 100644 --- a/nostr_dvm/utils/nip89_utils.py +++ b/nostr_dvm/utils/nip89_utils.py @@ -29,7 +29,7 @@ async def nip89_announce_tasks(dvm_config, client): d_tag = Tag.parse(["d", dvm_config.NIP89.DTAG]) keys = Keys.parse(dvm_config.NIP89.PK) content = dvm_config.NIP89.CONTENT - event = EventBuilder(EventDefinitions.KIND_ANNOUNCEMENT, content, [k_tag, d_tag]).sign_with_keys(keys) + 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) print( @@ -65,7 +65,7 @@ async def nip89_delete_announcement(eid: str, keys: Keys, dtag: str, client: Cli e_tag = Tag.parse(["e", eid]) a_tag = Tag.parse( ["a", str(EventDefinitions.KIND_ANNOUNCEMENT.as_u16()) + ":" + keys.public_key().to_hex() + ":" + dtag]) - event = EventBuilder(Kind(5), "", [e_tag, a_tag]).sign_with_keys(keys) + event = EventBuilder(Kind(5), "").tags([e_tag, a_tag]).sign_with_keys(keys) print(f"POW event: {event.as_json()}") await send_event(event, client, config) @@ -74,7 +74,7 @@ async def nip89_delete_announcement_pow(eid: str, keys: Keys, dtag: str, client: e_tag = Tag.parse(["e", eid]) a_tag = Tag.parse( ["a", str(EventDefinitions.KIND_ANNOUNCEMENT.as_u16()) + ":" + keys.public_key().to_hex() + ":" + dtag]) - event = EventBuilder(Kind(5), "", [e_tag, a_tag]).pow(28).sign_with_keys(keys) + event = EventBuilder(Kind(5), "").tags([e_tag, a_tag]).pow(28).sign_with_keys(keys) print(f"POW event: {event.as_json()}") await send_event(event, client, config) diff --git a/nostr_dvm/utils/nip98_utils.py b/nostr_dvm/utils/nip98_utils.py index d1f3cf3..ed0c7eb 100644 --- a/nostr_dvm/utils/nip98_utils.py +++ b/nostr_dvm/utils/nip98_utils.py @@ -17,7 +17,7 @@ async def generate_nip98_header(pkeys_hex, url="", kind="POST", filepath=""): if kind == "POST": payloadtag = Tag.parse(["payload", sha256sum(filepath)]) tags.append(payloadtag) - eb = EventBuilder(Kind(27235), "", tags) + eb = EventBuilder(Kind(27235), "").tags(tags) event = eb.sign_with_keys(keys) encoded_nip98_event = base64.b64encode(event.as_json().encode('utf-8')).decode('utf-8') diff --git a/nostr_dvm/utils/nostr_utils.py b/nostr_dvm/utils/nostr_utils.py index 9b432de..dc4c40c 100644 --- a/nostr_dvm/utils/nostr_utils.py +++ b/nostr_dvm/utils/nostr_utils.py @@ -6,8 +6,8 @@ from typing import List import dotenv from nostr_sdk import Filter, Client, Alphabet, EventId, Event, PublicKey, Tag, Keys, nip04_decrypt, Metadata, Options, \ - Nip19Event, SingleLetterTag, RelayLimits, SecretKey, NostrSigner, Connection, ConnectionTarget, \ - EventSource, EventBuilder, Kind + Nip19Event, SingleLetterTag, RelayLimits, SecretKey, Connection, ConnectionTarget, \ + EventBuilder, Kind, ClientBuilder, SendEventOutput from nostr_dvm.utils.definitions import EventDefinitions, relay_timeout @@ -33,8 +33,7 @@ async def get_event_by_id(event_id_str: str, client: Client, config=None) -> Eve async def get_events_async(client, filter, timeout): - source_l = EventSource.relays(timedelta(seconds=timeout)) - events = await client.fetch_events([filter], source_l) + events = await client.fetch_events([filter], timedelta(seconds=timeout)) return events.to_vec() @@ -183,7 +182,7 @@ async def get_main_relays(event_to_send: Event, client: Client, dvm_config): return [] -async def send_event_outbox(event: Event, client, dvm_config) -> EventId: +async def send_event_outbox(event: Event, client, dvm_config) -> SendEventOutput | None: # 1. OK, Let's overcomplicate things. # 2. If our event has a relays tag, we just send the event to these relay in the classical way. relays = [] @@ -208,6 +207,9 @@ async def send_event_outbox(event: Event, client, dvm_config) -> EventId: print("[" + dvm_config.NIP89.NAME + "] No Inbox found, replying to generic relays") relays = await get_main_relays(event, client, dvm_config) + + if len(relays) == 0: + return # eventid = await send_event(event, client, dvm_config) # return eventid @@ -215,10 +217,10 @@ async def send_event_outbox(event: Event, client, dvm_config) -> EventId: relaylimits = RelayLimits.disable() connection = Connection().embedded_tor().target(ConnectionTarget.ONION) # connection = Connection().addr("127.0.0.1:9050").target(ConnectionTarget.ONION) - opts = Options().relay_limits(relaylimits).connection(connection).connection_timeout(timedelta(seconds=30)) + opts = Options().relay_limits(relaylimits).connection(connection).timeout(timedelta(seconds=5)) sk = SecretKey.from_hex(dvm_config.PRIVATE_KEY) keys = Keys.parse(sk.to_hex()) - outboxclient = Client.with_opts(keys, opts) + outboxclient = ClientBuilder().signer(keys).opts(opts).build() print("[" + dvm_config.NIP89.NAME + "] Receiver Inbox relays: " + str(relays)) for relay in relays[:5]: @@ -236,32 +238,23 @@ async def send_event_outbox(event: Event, client, dvm_config) -> EventId: event_id = None print(e) - for relay in relays[:5]: - try: - await outboxclient.force_remove_relay(relay) - except: - print("Error removing relay: " + relay) - # 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: relays = await get_main_relays(event, client, dvm_config) + if len(relays) == 0: + return None for relay in relays: await outboxclient.add_relay(relay) try: await outboxclient.connect() event_id = await outboxclient.send_event(event) - for relay in relays: - try: - await outboxclient.force_remove_relay(relay) - except: - print("Error removing relay: " + relay) except Exception as e: # Love yourself then. event_id = None print(e) - await outboxclient.remove_all_relays() - await outboxclient.disconnect() + await outboxclient.shutdown() + return event_id @@ -413,7 +406,7 @@ async def send_nip04_dm(client: Client, msg, receiver: PublicKey, dvm_config): keys = Keys.parse(dvm_config.PRIVATE_KEY) content = await keys.nip04_encrypt(receiver, msg) ptag = Tag.parse(["p", receiver.to_hex()]) - event = EventBuilder(Kind(4), content, [ptag]).sign_with_keys(Keys.parse(dvm_config.PRIVATE_KEY)) + event = EventBuilder(Kind(4), content).tags([ptag]).sign_with_keys(Keys.parse(dvm_config.PRIVATE_KEY)) await client.send_event(event) # relays = await get_dm_relays(event, client, dvm_config) diff --git a/nostr_dvm/utils/nut_wallet_utils.py b/nostr_dvm/utils/nut_wallet_utils.py index 240a47f..3c2fe76 100644 --- a/nostr_dvm/utils/nut_wallet_utils.py +++ b/nostr_dvm/utils/nut_wallet_utils.py @@ -9,7 +9,7 @@ from nostr_sdk import Tag, Keys, nip44_encrypt, nip44_decrypt, Nip44Version, Eve EventId, nip04_decrypt, nip04_encrypt, PublicKey, Metadata from nostr_dvm.utils.database_utils import fetch_user_metadata -from nostr_dvm.utils.definitions import EventDefinitions, relay_timeout, relay_timeout_long +from nostr_dvm.utils.definitions import EventDefinitions from nostr_dvm.utils.dvmconfig import DVMConfig from nostr_dvm.utils.nostr_utils import check_and_set_private_key from nostr_dvm.utils.print_utils import bcolors @@ -103,7 +103,7 @@ class NutZapWallet: relay_tag = Tag.parse(["relay", relay]) tags.append(relay_tag) - event = EventBuilder(EventDefinitions.KIND_NUT_WALLET, content, tags).sign_with_keys(keys) + event = EventBuilder(EventDefinitions.KIND_NUT_WALLET, content).tags(tags).sign_with_keys(keys) send_response = await client.send_event(event) print( @@ -327,7 +327,7 @@ class NutZapWallet: p_tag = Tag.parse(["p", sender_hex]) tags.append(p_tag) - event = EventBuilder(Kind(7376), content, tags).sign_with_keys(keys) + event = EventBuilder(Kind(7376), content).tags(tags).sign_with_keys(keys) eventid = await client.send_event(event) async def create_unspent_proof_event(self, nut_wallet: NutWallet, mint_proofs, mint_url, amount, direction, marker, @@ -373,7 +373,7 @@ class NutZapWallet: else: content = nip44_encrypt(keys.secret_key(), keys.public_key(), message, Nip44Version.V2) - event = EventBuilder(Kind(7375), content, tags).sign_with_keys(keys) + event = EventBuilder(Kind(7375), content).tags(tags).sign_with_keys(keys) eventid = await client.send_event(event) await self.create_transaction_history_event(nut_wallet, amount, nut_wallet.unit, old_event_id, eventid.id, direction, marker, sender_hex, event_hex, client, keys) @@ -436,7 +436,7 @@ class NutZapWallet: pubkey = Keys.parse(nut_wallet.privkey).public_key().to_hex() tags.append(Tag.parse(["pubkey", pubkey])) - event = EventBuilder(Kind(10019), "", tags).sign_with_keys(keys) + event = EventBuilder(Kind(10019), "").tags(tags).sign_with_keys(keys) eventid = await client.send_event(event) print( bcolors.CYAN + "[" + nut_wallet.name + "] Announced mint preferences info event (" + eventid.id.to_hex() + ")" + bcolors.ENDC) @@ -624,7 +624,7 @@ class NutZapWallet: } tags.append(Tag.parse(["proof", json.dumps(nut_proof)])) - event = EventBuilder(Kind(9321), comment, tags).sign_with_keys(keys) + event = EventBuilder(Kind(9321), comment).tags(tags).sign_with_keys(keys) response = await client.send_event(event) await self.update_spend_mint_proof_event(nut_wallet, proofs, mint_url, "zapped", keys.public_key().to_hex(), diff --git a/nostr_dvm/utils/outbox_utils.py b/nostr_dvm/utils/outbox_utils.py index 4627d91..373bda1 100644 --- a/nostr_dvm/utils/outbox_utils.py +++ b/nostr_dvm/utils/outbox_utils.py @@ -2,14 +2,17 @@ # even trying to send to them, avoiding potential errors or delays on the way. -AVOID_OUTBOX_RELAY_LIST = ["wss://nos.lol", "wss://relay.primal.net", - "wss://nostrelay.yeghro.site", "wss://nostr.wine", "wss://filter.nostr.wine", +AVOID_OUTBOX_RELAY_LIST = ["wss://nos.lol", "wss://nostrelay.yeghro.site", "wss://nostr.wine", + "wss://filter.nostr.wine", "wss://relay.lightwork.space", "wss://onchain.pub", "wss://nostr21.com", "wss://nostr.bitcoiner.social", "wss://nostr.orangepill.dev", - "wss://brb.io", + "wss://brb.io", "wss://relay.nostr.ch", "wss://nostr.rock", "wss://nostr.sandwich.farm", + "wss://nostr.onsats.org", "wss://nostr-pub.semisol.dev", "wss://no.str.cr", + "wss://nostr.zebedee.cloud", + "wss://nostr.600.wtf", "wss://relay.lnpay.me", "wss://relay.snort.social", "wss://relay.minds.com/nostr/v1/ws", "ws://elitedesk:4848", "wss://nostr-pub.semisol.dev", "wss://mostr.mostr.pub", "wss://relay.mostr.pub", - "wss://minds.com", + "wss://minds.com", "wss://nostr.leximaster.com", "wss://yabu.me", "wss://relay.yozora.world", "wss://filter.nostr.wine/?global=all", "wss://eden.nostr.land", "wss://relay.orangepill.ovh", "wss://nostr.jcloud.es", "wss://af.purplerelay.com", @@ -48,14 +51,14 @@ AVOID_OUTBOX_RELAY_LIST = ["wss://nos.lol", "wss://relay.primal.net", "wss://relay.nostreggs.io", "wss://relay.blackbyte.nl", "ws://localhost:8080", "wss://127.0.0.1:4869", "wss://sendit.nosflare.io", "wss://astral.ninja", "wss://nostr.libertasprimordium.com", "wss://relay.shitforce.one", - "wss://nostr.cro.social", + "wss://nostr.cro.social", "wss://datagrave.wild-vibes.ts.net/nostr", "wss://nostr01.sharkshake.net", "wss://relay.nostreggs.io", "wss://nostr.rocks", "wss://groups.0xchat.com", "wss://bostr.lecturify.net", "wss://dave.st.germa.in/nostr", "wss://dvms.f7z.io", "wss://nostr.social", "wss://i.nostr.build", - "wss://teemie1-relay.duckdns.org", + "wss://teemie1-relay.duckdns.org", "wss://newperspectives.duckdns.org", "wss://nostrs.build", "wss://relay.hllo.live", "wss://relay-pub.deschooling.us", "wss://nostr.sandwich.farm", "wss://nostr.lol", "wss://nostr.developer.li", - "wss://paid.spore.ws", + "wss://paid.spore.ws", "ws://relay.damus.io", "ws://ofotwjuiv7t6q4azt2fjx3qo7esglmxdeqmh2qvdsdnxw5eqgza24iyd.onion", "wss://r.kojira.io", "wss://nostr-relay.h3z.jp", "wss://relay.yozora.world", "wss://nostr.0xtr.dev", "wss://purplepeg.es", "wss://nostr.mutinywallet.com", @@ -73,5 +76,4 @@ AVOID_OUTBOX_RELAY_LIST = ["wss://nos.lol", "wss://relay.primal.net", "wss://pablof7z.nostr1.com", "wss://nostr.beckmeyer.us", "wss://pow.hzrd149.com", "wss://relay.nostrss.re", "wss://relay.nostr.bg", "ws://bugman.mguy.net:4848" - ] diff --git a/nostr_dvm/utils/output_utils.py b/nostr_dvm/utils/output_utils.py index 6a2f9dc..c91b0cb 100644 --- a/nostr_dvm/utils/output_utils.py +++ b/nostr_dvm/utils/output_utils.py @@ -318,7 +318,7 @@ async def send_job_status_reaction(original_event_id_hex, original_event_author_ content = reaction keys = Keys.parse(dvm_config.PRIVATE_KEY) - reaction_event = EventBuilder(EventDefinitions.KIND_FEEDBACK, str(content), reply_tags).sign_with_keys(keys) + reaction_event = EventBuilder(EventDefinitions.KIND_FEEDBACK, str(content)).tags(reply_tags).sign_with_keys(keys) await send_event_outbox(reaction_event, client=client, dvm_config=dvm_config) if dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value: diff --git a/nostr_dvm/utils/reaction_utils.py b/nostr_dvm/utils/reaction_utils.py index 94cd038..52af6fb 100644 --- a/nostr_dvm/utils/reaction_utils.py +++ b/nostr_dvm/utils/reaction_utils.py @@ -21,7 +21,7 @@ async def create_reaction(keys, title, dtag): keys = Keys.parse(keys) content = "" - event = EventBuilder(Kind(30030), content, [d_tag, title_tag] + emoji_tags).sign_with_keys(keys) + event = EventBuilder(Kind(30030), content).tags([d_tag, title_tag] + emoji_tags).sign_with_keys(keys) client = Client(keys) # We add the relays we defined above and told our DVM we would want to receive events to. @@ -42,7 +42,7 @@ async def delete_reaction(keys, eid: str, dtag: str): e_tag = Tag.parse(["e", eid]) a_tag = Tag.parse( ["a", "30030:" + keys.public_key().to_hex() + ":" + dtag]) - event = EventBuilder(Kind(5), "", [e_tag, a_tag]).sign_with_keys(keys) + event = EventBuilder(Kind(5), "").tags([e_tag, a_tag]).sign_with_keys(keys) client = Client(keys) # We add the relays we defined above and told our DVM we would want to receive events to. diff --git a/nostr_dvm/utils/zap_utils.py b/nostr_dvm/utils/zap_utils.py index 50dcf94..06b6cd5 100644 --- a/nostr_dvm/utils/zap_utils.py +++ b/nostr_dvm/utils/zap_utils.py @@ -304,8 +304,7 @@ def zaprequest(lud16: str, amount: int, content, zapped_event, zapped_user, keys tags = [p_tag] if zapped_event is not None: tags.append(e_tag) - zap_request = EventBuilder(Kind(9733), content, - tags).sign_with_keys(keys).as_json() + zap_request = EventBuilder(Kind(9733), content).tags(tags).sign_with_keys(keys).as_json() keys = Keys.parse(encryption_key) if zapped_event is not None: encrypted_content = enrypt_private_zap_message(zap_request, keys.secret_key(), zapped_event.author()) @@ -316,8 +315,7 @@ def zaprequest(lud16: str, amount: int, content, zapped_event, zapped_user, keys tags.append(anon_tag) content = "" - zap_request = EventBuilder(Kind(9734), content, - tags).sign_with_keys(keys).as_json() + zap_request = EventBuilder(Kind(9734), content).tags(tags).sign_with_keys(keys).as_json() response = requests.get(callback + "?amount=" + str(int(amount) * 1000) + "&nostr=" + urllib.parse.quote_plus( zap_request) + "&lnurl=" + encoded_lnurl) diff --git a/tests/db.py b/tests/db.py index 1fea844..93a663e 100644 --- a/tests/db.py +++ b/tests/db.py @@ -32,7 +32,7 @@ async def do_some_work(): f = Filter().author(keys.public_key()).limit(10) events = await database.query([f]) - for event in events: + for event in events.to_vec(): print(event.as_json()) nostr_dvm_thread = Thread(target=reconcile_db) diff --git a/tests/generic_dvm_autotopic_feed.py b/tests/generic_dvm_autotopic_feed.py index 656f2c6..5e6585a 100644 --- a/tests/generic_dvm_autotopic_feed.py +++ b/tests/generic_dvm_autotopic_feed.py @@ -183,11 +183,11 @@ def playground(announce=False): events = await database.query(filters) if dvm.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value: - print("[" + dvm.dvm_config.NIP89.NAME + "] Considering " + str(len(events)) + " Events") + print("[" + dvm.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events") ns.finallist = {} #search_list = result.split(',') - for event in events: + for event in events.to_vec(): #if all(ele in event.content().lower() for ele in []): #if not any(ele in event.content().lower() for ele in []): filt = Filter().kinds( @@ -195,8 +195,8 @@ def playground(announce=False): definitions.EventDefinitions.KIND_REPOST, definitions.EventDefinitions.KIND_NOTE]).event(event.id()).since(since) reactions = await database.query([filt]) - if len(reactions) >= 1: - ns.finallist[event.id().to_hex()] = len(reactions) + if len(reactions.to_vec()) >= 1: + ns.finallist[event.id().to_hex()] = len(reactions.to_vec()) result_list = [] finallist_sorted = sorted(ns.finallist.items(), key=lambda x: x[1], reverse=True)[:int(200)] diff --git a/tests/wot.py b/tests/wot.py index 4eba286..6d29219 100644 --- a/tests/wot.py +++ b/tests/wot.py @@ -86,8 +86,8 @@ async def analyse_users(user_ids=None): followers_filter = Filter().authors(user_keys).kind(Kind(3)) followers = await database.query([followers_filter]) allfriends = [] - if len(followers) > 0: - for follower in followers: + if len(followers.to_vec()) > 0: + for follower in followers.to_vec(): frens = [] for tag in follower.tags().to_vec(): if tag.as_vec()[0] == "p":