mirror of
https://github.com/believethehype/nostrdvm.git
synced 2025-06-25 12:00:54 +02:00
adjustments for nostrsdk 0.39
This commit is contained in:
parent
86d96a4772
commit
f9b68d3b6d
1
.gitignore
vendored
1
.gitignore
vendored
@ -199,3 +199,4 @@ tests/cat4.png
|
|||||||
tests/gifs/data.mdb
|
tests/gifs/data.mdb
|
||||||
tests/gifs/lock.mdb
|
tests/gifs/lock.mdb
|
||||||
tests/gif_library.py
|
tests/gif_library.py
|
||||||
|
/.idea
|
||||||
|
@ -51,7 +51,8 @@ async def nostr_client():
|
|||||||
Timestamp.now()) # events to us specific
|
Timestamp.now()) # events to us specific
|
||||||
dvm_filter = (Filter().kinds([EventDefinitions.KIND_NIP90_RESULT_GENERATE_TEXT,
|
dvm_filter = (Filter().kinds([EventDefinitions.KIND_NIP90_RESULT_GENERATE_TEXT,
|
||||||
EventDefinitions.KIND_FEEDBACK]).since(Timestamp.now())) # public events
|
EventDefinitions.KIND_FEEDBACK]).since(Timestamp.now())) # public events
|
||||||
await client.subscribe([dm_zap_filter, dvm_filter])
|
await client.subscribe(dm_zap_filter)
|
||||||
|
await client.subscribe(dvm_filter)
|
||||||
|
|
||||||
|
|
||||||
await nostr_client_test_llm("Tell me a joke about a purple Ostrich!")
|
await nostr_client_test_llm("Tell me a joke about a purple Ostrich!")
|
||||||
|
@ -56,7 +56,8 @@ async def nostr_client():
|
|||||||
Timestamp.now()) # events to us specific
|
Timestamp.now()) # events to us specific
|
||||||
dvm_filter = (Filter().kinds([EventDefinitions.KIND_NIP90_RESULT_TEXT_TO_SPEECH,
|
dvm_filter = (Filter().kinds([EventDefinitions.KIND_NIP90_RESULT_TEXT_TO_SPEECH,
|
||||||
EventDefinitions.KIND_FEEDBACK]).since(Timestamp.now())) # public events
|
EventDefinitions.KIND_FEEDBACK]).since(Timestamp.now())) # public events
|
||||||
await client.subscribe([dm_zap_filter, dvm_filter])
|
await client.subscribe(dm_zap_filter)
|
||||||
|
await client.subscribe(dvm_filter)
|
||||||
|
|
||||||
|
|
||||||
await nostr_client_test_tts("Hello, this is a test. Mic check one, two.")
|
await nostr_client_test_tts("Hello, this is a test. Mic check one, two.")
|
||||||
|
@ -54,7 +54,8 @@ async def nostr_client():
|
|||||||
Timestamp.now()) # events to us specific
|
Timestamp.now()) # events to us specific
|
||||||
dvm_filter = (Filter().kinds([EventDefinitions.KIND_NIP90_RESULT_GENERATE_TEXT,
|
dvm_filter = (Filter().kinds([EventDefinitions.KIND_NIP90_RESULT_GENERATE_TEXT,
|
||||||
EventDefinitions.KIND_FEEDBACK]).since(Timestamp.now())) # public events
|
EventDefinitions.KIND_FEEDBACK]).since(Timestamp.now())) # public events
|
||||||
await client.subscribe([dm_zap_filter, dvm_filter])
|
await client.subscribe(dm_zap_filter)
|
||||||
|
await client.subscribe(dvm_filter)
|
||||||
|
|
||||||
|
|
||||||
#nostr_client_test("What has Pablo been up to?")
|
#nostr_client_test("What has Pablo been up to?")
|
||||||
|
@ -2,10 +2,9 @@ import asyncio
|
|||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import signal
|
import signal
|
||||||
from multiprocessing.connection import Connection
|
|
||||||
|
|
||||||
from nostr_sdk import (Keys, Timestamp, Filter, nip04_decrypt, nip44_decrypt, HandleNotification, EventBuilder, PublicKey,
|
from nostr_sdk import (Keys, Timestamp, Filter, nip04_decrypt, nip44_decrypt, HandleNotification, EventBuilder, PublicKey,
|
||||||
Options, Tag, Event, EventId, Nip19Event, Kind, KindEnum, NostrSigner, nip44_encrypt, Nip44Version,
|
Options, Tag, Event, EventId, Nip19Event, Kind, NostrSigner, nip44_encrypt, Nip44Version,
|
||||||
UnsignedEvent, UnwrappedGift, uniffi_set_event_loop, ClientBuilder, make_private_msg)
|
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.admin_utils import admin_make_database_updates
|
||||||
@ -35,7 +34,7 @@ class Bot:
|
|||||||
|
|
||||||
self.client = None
|
self.client = None
|
||||||
asyncio.run(self.run_bot(dvm_config, admin_config))
|
asyncio.run(self.run_bot(dvm_config, admin_config))
|
||||||
uniffi_set_event_loop(asyncio.get_running_loop())
|
#uniffi_set_event_loop(asyncio.get_running_loop())
|
||||||
|
|
||||||
# add_sql_table_column(dvm_config.DB)
|
# add_sql_table_column(dvm_config.DB)
|
||||||
|
|
||||||
@ -74,7 +73,7 @@ class Bot:
|
|||||||
|
|
||||||
zap_filter = Filter().pubkey(pk).kinds([EventDefinitions.KIND_ZAP]).since(Timestamp.now())
|
zap_filter = Filter().pubkey(pk).kinds([EventDefinitions.KIND_ZAP]).since(Timestamp.now())
|
||||||
dm_filter = Filter().pubkey(pk).kinds([EventDefinitions.KIND_DM]).since(Timestamp.now())
|
dm_filter = Filter().pubkey(pk).kinds([EventDefinitions.KIND_DM]).since(Timestamp.now())
|
||||||
nip17_filter = Filter().pubkey(pk).kinds([Kind.from_enum(KindEnum.GIFT_WRAP())]).limit(0)
|
nip17_filter = Filter().pubkey(pk).kinds([EventDefinitions.KIND_GIFTWRAP]).limit(0)
|
||||||
kinds = [EventDefinitions.KIND_NIP90_GENERIC, EventDefinitions.KIND_FEEDBACK]
|
kinds = [EventDefinitions.KIND_NIP90_GENERIC, EventDefinitions.KIND_FEEDBACK]
|
||||||
for dvm in self.dvm_config.SUPPORTED_DVMS:
|
for dvm in self.dvm_config.SUPPORTED_DVMS:
|
||||||
if dvm.KIND not in kinds:
|
if dvm.KIND not in kinds:
|
||||||
@ -83,7 +82,10 @@ class Bot:
|
|||||||
kinds.append(Kind(6050))
|
kinds.append(Kind(6050))
|
||||||
dvm_filter = (Filter().kinds(kinds).since(Timestamp.now()))
|
dvm_filter = (Filter().kinds(kinds).since(Timestamp.now()))
|
||||||
|
|
||||||
await self.client.subscribe([zap_filter, dm_filter, nip17_filter, dvm_filter], None)
|
await self.client.subscribe(zap_filter, None)
|
||||||
|
await self.client.subscribe(dm_filter, None)
|
||||||
|
await self.client.subscribe(nip17_filter, None)
|
||||||
|
await self.client.subscribe(dvm_filter, None)
|
||||||
|
|
||||||
create_sql_table(self.dvm_config.DB)
|
create_sql_table(self.dvm_config.DB)
|
||||||
await admin_make_database_updates(adminconfig=self.admin_config, dvmconfig=self.dvm_config, client=self.client)
|
await admin_make_database_updates(adminconfig=self.admin_config, dvmconfig=self.dvm_config, client=self.client)
|
||||||
@ -108,7 +110,7 @@ class Bot:
|
|||||||
await handle_dm(nostr_event, False)
|
await handle_dm(nostr_event, False)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Error during content NIP04 decryption: {e}")
|
print(f"Error during content NIP04 decryption: {e}")
|
||||||
elif nostr_event.kind().as_enum() == KindEnum.GIFT_WRAP():
|
elif nostr_event.kind().as_u16() == EventDefinitions.KIND_GIFTWRAP.as_u16():
|
||||||
try:
|
try:
|
||||||
await handle_dm(nostr_event, True)
|
await handle_dm(nostr_event, True)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@ -133,7 +135,7 @@ class Bot:
|
|||||||
rumor: UnsignedEvent = unwrapped_gift.rumor()
|
rumor: UnsignedEvent = unwrapped_gift.rumor()
|
||||||
|
|
||||||
if rumor.created_at().as_secs() >= Timestamp.now().as_secs():
|
if rumor.created_at().as_secs() >= Timestamp.now().as_secs():
|
||||||
if rumor.kind().as_enum() == KindEnum.PRIVATE_DIRECT_MESSAGE():
|
if rumor.kind().as_u16() == EventDefinitions.KIND_PRIVATE_DM.as_u16():
|
||||||
print(f"Received new msg [sealed]: {decrypted_text}")
|
print(f"Received new msg [sealed]: {decrypted_text}")
|
||||||
decrypted_text = rumor.content()
|
decrypted_text = rumor.content()
|
||||||
sealed = " [sealed] "
|
sealed = " [sealed] "
|
||||||
@ -637,7 +639,7 @@ class Bot:
|
|||||||
if param == "user":
|
if param == "user":
|
||||||
if value.startswith("@") or value.startswith("nostr:") or value.startswith(
|
if value.startswith("@") or value.startswith("nostr:") or value.startswith(
|
||||||
"npub"):
|
"npub"):
|
||||||
value = PublicKey.from_bech32(
|
value = PublicKey.parse(
|
||||||
value.replace("@", "").replace("nostr:", "")).to_hex()
|
value.replace("@", "").replace("nostr:", "")).to_hex()
|
||||||
tag = Tag.parse(["param", param, value])
|
tag = Tag.parse(["param", param, value])
|
||||||
tags.append(tag)
|
tags.append(tag)
|
||||||
@ -718,7 +720,7 @@ class Bot:
|
|||||||
else:
|
else:
|
||||||
if param == "user":
|
if param == "user":
|
||||||
if value.startswith("@") or value.startswith("nostr:") or value.startswith("npub"):
|
if value.startswith("@") or value.startswith("nostr:") or value.startswith("npub"):
|
||||||
value = PublicKey.from_bech32(
|
value = PublicKey.parse(
|
||||||
value.replace("@", "").replace("nostr:", "")).to_hex()
|
value.replace("@", "").replace("nostr:", "")).to_hex()
|
||||||
tag = Tag.parse(["param", param, value])
|
tag = Tag.parse(["param", param, value])
|
||||||
tags.append(tag)
|
tags.append(tag)
|
||||||
@ -766,6 +768,8 @@ class Bot:
|
|||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
asyncio.create_task(self.client.handle_notifications(NotificationHandler()))
|
asyncio.create_task(self.client.handle_notifications(NotificationHandler()))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -793,3 +797,6 @@ class Bot:
|
|||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
print('Stay weird!')
|
print('Stay weird!')
|
||||||
os.kill(os.getpid(), signal.SIGTERM)
|
os.kill(os.getpid(), signal.SIGTERM)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -78,7 +78,8 @@ class DVM:
|
|||||||
dvm_filter = (Filter().kinds(kinds).since(Timestamp.now()))
|
dvm_filter = (Filter().kinds(kinds).since(Timestamp.now()))
|
||||||
create_sql_table(self.dvm_config.DB)
|
create_sql_table(self.dvm_config.DB)
|
||||||
await admin_make_database_updates(adminconfig=self.admin_config, dvmconfig=self.dvm_config, client=self.client)
|
await admin_make_database_updates(adminconfig=self.admin_config, dvmconfig=self.dvm_config, client=self.client)
|
||||||
await self.client.subscribe([dvm_filter, zap_filter], None)
|
await self.client.subscribe(dvm_filter, None)
|
||||||
|
await self.client.subscribe(zap_filter, None)
|
||||||
|
|
||||||
if self.dvm_config.ENABLE_NUTZAP:
|
if self.dvm_config.ENABLE_NUTZAP:
|
||||||
nutzap_wallet = NutZapWallet()
|
nutzap_wallet = NutZapWallet()
|
||||||
@ -232,7 +233,7 @@ class DVM:
|
|||||||
await send_job_status_reaction(nip90_event, "error", False, amount, self.client, cashu_message,
|
await send_job_status_reaction(nip90_event, "error", False, amount, self.client, cashu_message,
|
||||||
self.dvm_config)
|
self.dvm_config)
|
||||||
return
|
return
|
||||||
# if user is whitelisted or task is free, just do the job
|
# if user is whitelisted or task is free, just dxo the job
|
||||||
if (user.iswhitelisted or task_is_free or cashu_redeemed) and (
|
if (user.iswhitelisted or task_is_free or cashu_redeemed) and (
|
||||||
p_tag_str == "" or p_tag_str ==
|
p_tag_str == "" or p_tag_str ==
|
||||||
self.dvm_config.PUBLIC_KEY):
|
self.dvm_config.PUBLIC_KEY):
|
||||||
|
@ -70,7 +70,9 @@ class Subscription:
|
|||||||
[EventDefinitions.KIND_NIP90_DVM_SUBSCRIPTION]).since(
|
[EventDefinitions.KIND_NIP90_DVM_SUBSCRIPTION]).since(
|
||||||
Timestamp.now())
|
Timestamp.now())
|
||||||
|
|
||||||
await self.client.subscribe([zap_filter, dvm_filter, cancel_subscription_filter], None)
|
await self.client.subscribe(zap_filter, None)
|
||||||
|
await self.client.subscribe(dvm_filter, None)
|
||||||
|
await self.client.subscribe(cancel_subscription_filter, None)
|
||||||
|
|
||||||
create_subscription_sql_table(dvm_config.DB)
|
create_subscription_sql_table(dvm_config.DB)
|
||||||
|
|
||||||
@ -248,7 +250,7 @@ class Subscription:
|
|||||||
|
|
||||||
subscriptionfilter = Filter().kind(EventDefinitions.KIND_NIP88_SUBSCRIBE_EVENT).author(
|
subscriptionfilter = Filter().kind(EventDefinitions.KIND_NIP88_SUBSCRIBE_EVENT).author(
|
||||||
PublicKey.parse(subscriber)).limit(1)
|
PublicKey.parse(subscriber)).limit(1)
|
||||||
evts = await self.client.fetch_events([subscriptionfilter], relay_timeout)
|
evts = await self.client.fetch_events(subscriptionfilter, relay_timeout)
|
||||||
if len(evts.to_vec()) > 0:
|
if len(evts.to_vec()) > 0:
|
||||||
event7001id = evts.to_vec()[0].id().to_hex()
|
event7001id = evts.to_vec()[0].id().to_hex()
|
||||||
print(evts.to_vec()[0].as_json())
|
print(evts.to_vec()[0].as_json())
|
||||||
@ -285,7 +287,7 @@ class Subscription:
|
|||||||
|
|
||||||
if tier_dtag == "" or len(zaps) == 0:
|
if tier_dtag == "" or len(zaps) == 0:
|
||||||
tierfilter = Filter().id(EventId.parse(subscription_event_id))
|
tierfilter = Filter().id(EventId.parse(subscription_event_id))
|
||||||
evts = await self.client.fetch_events([tierfilter], relay_timeout)
|
evts = await self.client.fetch_events(tierfilter, relay_timeout)
|
||||||
if len(evts.to_vec()) > 0:
|
if len(evts.to_vec()) > 0:
|
||||||
for tag in evts[0].tags().to_vec():
|
for tag in evts[0].tags().to_vec():
|
||||||
if tag.as_vec()[0] == "d":
|
if tag.as_vec()[0] == "d":
|
||||||
|
@ -124,7 +124,7 @@ class AdvancedSearch(DVMTaskInterface):
|
|||||||
notes_filter = Filter().kind(Kind(1)).authors(userkeys).search(options["search"]).since(
|
notes_filter = Filter().kind(Kind(1)).authors(userkeys).search(options["search"]).since(
|
||||||
search_since).until(search_until).limit(options["max_results"])
|
search_since).until(search_until).limit(options["max_results"])
|
||||||
|
|
||||||
events = await cli.fetch_events([notes_filter], relay_timeout)
|
events = await cli.fetch_events(notes_filter, relay_timeout)
|
||||||
|
|
||||||
result_list = []
|
result_list = []
|
||||||
if len(events.to_vec()) > 0:
|
if len(events.to_vec()) > 0:
|
||||||
|
@ -121,7 +121,7 @@ class DicoverContentLatestLongForm(DVMTaskInterface):
|
|||||||
since = Timestamp.from_secs(timestamp_hour_ago)
|
since = Timestamp.from_secs(timestamp_hour_ago)
|
||||||
|
|
||||||
filter1 = Filter().kind(definitions.EventDefinitions.KIND_LONGFORM).since(since)
|
filter1 = Filter().kind(definitions.EventDefinitions.KIND_LONGFORM).since(since)
|
||||||
events = await cli.database().query([filter1])
|
events = await cli.database().query(filter1)
|
||||||
if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value:
|
if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value:
|
||||||
print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events")
|
print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events")
|
||||||
ns.finallist = {}
|
ns.finallist = {}
|
||||||
|
@ -121,7 +121,7 @@ class DicoverContentLatestWiki(DVMTaskInterface):
|
|||||||
since = Timestamp.from_secs(timestamp_hour_ago)
|
since = Timestamp.from_secs(timestamp_hour_ago)
|
||||||
|
|
||||||
filter1 = Filter().kind(definitions.EventDefinitions.KIND_WIKI).since(since)
|
filter1 = Filter().kind(definitions.EventDefinitions.KIND_WIKI).since(since)
|
||||||
events = await cli.database().query([filter1])
|
events = await cli.database().query(filter1)
|
||||||
if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value:
|
if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value:
|
||||||
print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events")
|
print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events")
|
||||||
ns.finallist = {}
|
ns.finallist = {}
|
||||||
|
@ -116,7 +116,7 @@ class DicoverContentCurrentlyPopular(DVMTaskInterface):
|
|||||||
|
|
||||||
filter1 = Filter().kind(definitions.EventDefinitions.KIND_NOTE).since(since)
|
filter1 = Filter().kind(definitions.EventDefinitions.KIND_NOTE).since(since)
|
||||||
|
|
||||||
events = await database.query([filter1])
|
events = await database.query(filter1)
|
||||||
if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value:
|
if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value:
|
||||||
print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events")
|
print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events")
|
||||||
ns.finallist = {}
|
ns.finallist = {}
|
||||||
@ -125,7 +125,7 @@ class DicoverContentCurrentlyPopular(DVMTaskInterface):
|
|||||||
filt = Filter().kinds([definitions.EventDefinitions.KIND_ZAP, definitions.EventDefinitions.KIND_REPOST,
|
filt = Filter().kinds([definitions.EventDefinitions.KIND_ZAP, definitions.EventDefinitions.KIND_REPOST,
|
||||||
definitions.EventDefinitions.KIND_REACTION,
|
definitions.EventDefinitions.KIND_REACTION,
|
||||||
definitions.EventDefinitions.KIND_NOTE]).event(event.id()).since(since)
|
definitions.EventDefinitions.KIND_NOTE]).event(event.id()).since(since)
|
||||||
reactions = await database.query([filt])
|
reactions = await database.query(filt)
|
||||||
|
|
||||||
if len(reactions.to_vec()) >= self.min_reactions:
|
if len(reactions.to_vec()) >= self.min_reactions:
|
||||||
ns.finallist[event.id().to_hex()] = len(reactions.to_vec())
|
ns.finallist[event.id().to_hex()] = len(reactions.to_vec())
|
||||||
|
@ -113,7 +113,7 @@ class DicoverContentCurrentlyPopularZaps(DVMTaskInterface):
|
|||||||
since = Timestamp.from_secs(timestamp_hour_ago)
|
since = Timestamp.from_secs(timestamp_hour_ago)
|
||||||
|
|
||||||
filter1 = Filter().kind(definitions.EventDefinitions.KIND_NOTE).since(since)
|
filter1 = Filter().kind(definitions.EventDefinitions.KIND_NOTE).since(since)
|
||||||
events = await database.query([filter1])
|
events = await database.query(filter1)
|
||||||
if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value:
|
if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value:
|
||||||
print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events")
|
print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events")
|
||||||
|
|
||||||
@ -121,7 +121,7 @@ class DicoverContentCurrentlyPopularZaps(DVMTaskInterface):
|
|||||||
for event in events.to_vec():
|
for event in events.to_vec():
|
||||||
if event.created_at().as_secs() > timestamp_hour_ago:
|
if event.created_at().as_secs() > timestamp_hour_ago:
|
||||||
filt = Filter().kinds([definitions.EventDefinitions.KIND_ZAP]).event(event.id()).since(since)
|
filt = Filter().kinds([definitions.EventDefinitions.KIND_ZAP]).event(event.id()).since(since)
|
||||||
zaps = await database.query([filt])
|
zaps = await database.query(filt)
|
||||||
invoice_amount = 0
|
invoice_amount = 0
|
||||||
event_author = event.author().to_hex()
|
event_author = event.author().to_hex()
|
||||||
if len(zaps.to_vec()) >= self.min_reactions:
|
if len(zaps.to_vec()) >= self.min_reactions:
|
||||||
|
@ -109,7 +109,7 @@ class DicoverContentCurrentlyPopularFollowers(DVMTaskInterface):
|
|||||||
|
|
||||||
user = PublicKey.parse(options["user"])
|
user = PublicKey.parse(options["user"])
|
||||||
followers_filter = Filter().author(user).kinds([Kind(3)])
|
followers_filter = Filter().author(user).kinds([Kind(3)])
|
||||||
followers = await cli.fetch_events([followers_filter], relay_timeout)
|
followers = await cli.fetch_events(followers_filter, relay_timeout)
|
||||||
# print(followers)
|
# print(followers)
|
||||||
|
|
||||||
# Negentropy reconciliation
|
# Negentropy reconciliation
|
||||||
@ -135,7 +135,7 @@ class DicoverContentCurrentlyPopularFollowers(DVMTaskInterface):
|
|||||||
followings.append(following)
|
followings.append(following)
|
||||||
|
|
||||||
filter1 = Filter().kind(definitions.EventDefinitions.KIND_NOTE).authors(followings).since(since)
|
filter1 = Filter().kind(definitions.EventDefinitions.KIND_NOTE).authors(followings).since(since)
|
||||||
events = await cli.database().query([filter1])
|
events = await cli.database().query(filter1)
|
||||||
if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value:
|
if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value:
|
||||||
print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events")
|
print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events")
|
||||||
|
|
||||||
@ -146,7 +146,7 @@ class DicoverContentCurrentlyPopularFollowers(DVMTaskInterface):
|
|||||||
[definitions.EventDefinitions.KIND_ZAP, definitions.EventDefinitions.KIND_REACTION,
|
[definitions.EventDefinitions.KIND_ZAP, definitions.EventDefinitions.KIND_REACTION,
|
||||||
definitions.EventDefinitions.KIND_REPOST,
|
definitions.EventDefinitions.KIND_REPOST,
|
||||||
definitions.EventDefinitions.KIND_NOTE]).event(event.id()).since(since)
|
definitions.EventDefinitions.KIND_NOTE]).event(event.id()).since(since)
|
||||||
reactions = await cli.database().query([filt])
|
reactions = await cli.database().query(filt)
|
||||||
if len(reactions.to_vec()) >= self.min_reactions:
|
if len(reactions.to_vec()) >= self.min_reactions:
|
||||||
ns.finallist[event.id().to_hex()] = len(reactions.to_vec())
|
ns.finallist[event.id().to_hex()] = len(reactions.to_vec())
|
||||||
|
|
||||||
|
@ -116,7 +116,7 @@ class DicoverContentCurrentlyPopularGallery(DVMTaskInterface):
|
|||||||
|
|
||||||
filter1 = Filter().kind(definitions.EventDefinitions.KIND_NIP68_IMAGEEVENT).since(since)
|
filter1 = Filter().kind(definitions.EventDefinitions.KIND_NIP68_IMAGEEVENT).since(since)
|
||||||
|
|
||||||
ge_events = await databasegallery.query([filter1])
|
ge_events = await databasegallery.query(filter1)
|
||||||
|
|
||||||
if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value:
|
if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value:
|
||||||
print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(ge_events.to_vec())) + " Events")
|
print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(ge_events.to_vec())) + " Events")
|
||||||
@ -155,7 +155,7 @@ class DicoverContentCurrentlyPopularGallery(DVMTaskInterface):
|
|||||||
for id in ids:
|
for id in ids:
|
||||||
ids_str.append(id.to_hex())
|
ids_str.append(id.to_hex())
|
||||||
|
|
||||||
filter_nip22 = Filter().kinds([definitions.EventDefinitions.KIND_NIP22_COMMENT]).custom_tag(SingleLetterTag.uppercase(Alphabet.E),
|
filter_nip22 = Filter().kinds([definitions.EventDefinitions.KIND_NIP22_COMMENT]).custom_tags(SingleLetterTag.uppercase(Alphabet.E),
|
||||||
ids_str).since(since)
|
ids_str).since(since)
|
||||||
|
|
||||||
dbopts = SyncOptions().direction(SyncDirection.DOWN)
|
dbopts = SyncOptions().direction(SyncDirection.DOWN)
|
||||||
@ -163,14 +163,14 @@ class DicoverContentCurrentlyPopularGallery(DVMTaskInterface):
|
|||||||
await cli.sync(filter_nip22, dbopts)
|
await cli.sync(filter_nip22, dbopts)
|
||||||
|
|
||||||
filter2 = Filter().ids(ids)
|
filter2 = Filter().ids(ids)
|
||||||
events = await cli.fetch_events([filter2], relay_timeout)
|
events = await cli.fetch_events(filter2, relay_timeout)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
for event in events.to_vec():
|
for event in events.to_vec():
|
||||||
if event.created_at().as_secs() > timestamp_since:
|
if event.created_at().as_secs() > timestamp_since:
|
||||||
filt1 = Filter().kinds([definitions.EventDefinitions.KIND_DELETION]).event(event.id()).limit(1)
|
filt1 = Filter().kinds([definitions.EventDefinitions.KIND_DELETION]).event(event.id()).limit(1)
|
||||||
deletions = await databasegallery.query([filt1])
|
deletions = await databasegallery.query(filt1)
|
||||||
if len(deletions.to_vec()) > 0:
|
if len(deletions.to_vec()) > 0:
|
||||||
print("Deleted event, skipping")
|
print("Deleted event, skipping")
|
||||||
continue
|
continue
|
||||||
@ -179,11 +179,14 @@ class DicoverContentCurrentlyPopularGallery(DVMTaskInterface):
|
|||||||
definitions.EventDefinitions.KIND_REACTION,
|
definitions.EventDefinitions.KIND_REACTION,
|
||||||
definitions.EventDefinitions.KIND_NOTE]).event(event.id()).since(since)
|
definitions.EventDefinitions.KIND_NOTE]).event(event.id()).since(since)
|
||||||
|
|
||||||
filter_nip22 = Filter().kinds([definitions.EventDefinitions.KIND_NIP22_COMMENT]).custom_tag(
|
filter_nip22 = Filter().kinds([definitions.EventDefinitions.KIND_NIP22_COMMENT]).custom_tags(
|
||||||
SingleLetterTag.uppercase(Alphabet.E),
|
SingleLetterTag.uppercase(Alphabet.E),
|
||||||
[event.id().to_hex()])
|
[event.id().to_hex()])
|
||||||
|
|
||||||
reactions = await databasegallery.query([filt, filter_nip22])
|
reactions = await databasegallery.query(filt)
|
||||||
|
reactions2 = await databasegallery.query(filter_nip22)
|
||||||
|
reactions.merge(reactions2)
|
||||||
|
|
||||||
|
|
||||||
#print("Reactions:" + str(len(reactions.to_vec())))
|
#print("Reactions:" + str(len(reactions.to_vec())))
|
||||||
if len(reactions.to_vec()) >= self.min_reactions:
|
if len(reactions.to_vec()) >= self.min_reactions:
|
||||||
|
@ -119,7 +119,7 @@ class DicoverContentCurrentlyPopularMostr(DVMTaskInterface):
|
|||||||
|
|
||||||
filter1 = Filter().kind(definitions.EventDefinitions.KIND_NOTE).since(since)
|
filter1 = Filter().kind(definitions.EventDefinitions.KIND_NOTE).since(since)
|
||||||
|
|
||||||
events = await database.query([filter1])
|
events = await database.query(filter1)
|
||||||
if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value:
|
if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value:
|
||||||
print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events")
|
print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events")
|
||||||
ns.finallist = {}
|
ns.finallist = {}
|
||||||
@ -131,7 +131,7 @@ class DicoverContentCurrentlyPopularMostr(DVMTaskInterface):
|
|||||||
[EventDefinitions.KIND_ZAP, EventDefinitions.KIND_REPOST,
|
[EventDefinitions.KIND_ZAP, EventDefinitions.KIND_REPOST,
|
||||||
EventDefinitions.KIND_REACTION,
|
EventDefinitions.KIND_REACTION,
|
||||||
EventDefinitions.KIND_NOTE]).event(event.id()).since(since)
|
EventDefinitions.KIND_NOTE]).event(event.id()).since(since)
|
||||||
reactions = await database.query([filt])
|
reactions = await database.query(filt)
|
||||||
|
|
||||||
if len(reactions.to_vec()) >= self.min_reactions:
|
if len(reactions.to_vec()) >= self.min_reactions:
|
||||||
ns.finallist[event.id().to_hex()] = len(reactions.to_vec())
|
ns.finallist[event.id().to_hex()] = len(reactions.to_vec())
|
||||||
@ -209,7 +209,10 @@ class DicoverContentCurrentlyPopularMostr(DVMTaskInterface):
|
|||||||
|
|
||||||
# RECONCOILE NOT POSSIBLE ON THESE RELAYS SO WE FETCH AB BUNCH (will be stored in db)
|
# RECONCOILE NOT POSSIBLE ON THESE RELAYS SO WE FETCH AB BUNCH (will be stored in db)
|
||||||
try:
|
try:
|
||||||
events = await cli.fetch_events([filter1, filter2, filter3], relay_timeout_long)
|
events1 = await cli.fetch_events(filter1, relay_timeout_long)
|
||||||
|
events2 = await cli.fetch_events(filter2, relay_timeout_long)
|
||||||
|
events3 = await cli.fetch_events(filter3, relay_timeout_long)
|
||||||
|
events = events1.merge(events2).merge(events3)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(e)
|
print(e)
|
||||||
# Do not delete profiles
|
# Do not delete profiles
|
||||||
|
@ -157,7 +157,7 @@ class DicoverContentCurrentlyPopularNonFollowers(DVMTaskInterface):
|
|||||||
await cli.connect()
|
await cli.connect()
|
||||||
user = PublicKey.parse(options["user"])
|
user = PublicKey.parse(options["user"])
|
||||||
followers_filter = Filter().author(user).kinds([Kind(3)])
|
followers_filter = Filter().author(user).kinds([Kind(3)])
|
||||||
followers = await cli.fetch_events([followers_filter], relay_timeout)
|
followers = await cli.fetch_events(followers_filter, relay_timeout)
|
||||||
if len(followers.to_vec()) > 0:
|
if len(followers.to_vec()) > 0:
|
||||||
newest = 0
|
newest = 0
|
||||||
best_entry = followers.to_vec()[0]
|
best_entry = followers.to_vec()[0]
|
||||||
@ -183,7 +183,7 @@ class DicoverContentCurrentlyPopularNonFollowers(DVMTaskInterface):
|
|||||||
|
|
||||||
filter1 = Filter().kind(definitions.EventDefinitions.KIND_NOTE).since(since)
|
filter1 = Filter().kind(definitions.EventDefinitions.KIND_NOTE).since(since)
|
||||||
|
|
||||||
events = await self.database.query([filter1])
|
events = await self.database.query(filter1)
|
||||||
|
|
||||||
print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events")
|
print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events")
|
||||||
ns.finallist = {}
|
ns.finallist = {}
|
||||||
@ -196,7 +196,7 @@ class DicoverContentCurrentlyPopularNonFollowers(DVMTaskInterface):
|
|||||||
[definitions.EventDefinitions.KIND_ZAP, definitions.EventDefinitions.KIND_REACTION,
|
[definitions.EventDefinitions.KIND_ZAP, definitions.EventDefinitions.KIND_REACTION,
|
||||||
definitions.EventDefinitions.KIND_REPOST,
|
definitions.EventDefinitions.KIND_REPOST,
|
||||||
definitions.EventDefinitions.KIND_NOTE]).event(event.id()).since(since)
|
definitions.EventDefinitions.KIND_NOTE]).event(event.id()).since(since)
|
||||||
reactions = await self.database.query([filt])
|
reactions = await self.database.query(filt)
|
||||||
if len(reactions.to_vec()) >= self.min_reactions:
|
if len(reactions.to_vec()) >= self.min_reactions:
|
||||||
ns.finallist[event.id().to_hex()] = len(reactions.to_vec())
|
ns.finallist[event.id().to_hex()] = len(reactions.to_vec())
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ import os
|
|||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
|
||||||
from nostr_sdk import Timestamp, Tag, Keys, Options, SecretKey, NostrSigner, NostrDatabase, \
|
from nostr_sdk import Timestamp, Tag, Keys, Options, SecretKey, NostrSigner, NostrDatabase, \
|
||||||
ClientBuilder, Filter, SyncOptions, SyncDirection, init_logger, LogLevel, Kind
|
ClientBuilder, Filter, SyncOptions, SyncDirection, init_logger, LogLevel, Kind, Events
|
||||||
|
|
||||||
from nostr_dvm.interfaces.dvmtaskinterface import DVMTaskInterface, process_venv
|
from nostr_dvm.interfaces.dvmtaskinterface import DVMTaskInterface, process_venv
|
||||||
from nostr_dvm.utils import definitions
|
from nostr_dvm.utils import definitions
|
||||||
@ -154,12 +154,19 @@ class DicoverContentCurrentlyPopularbyTopic(DVMTaskInterface):
|
|||||||
timestamp_since = Timestamp.now().as_secs() - self.db_since
|
timestamp_since = Timestamp.now().as_secs() - self.db_since
|
||||||
since = Timestamp.from_secs(timestamp_since)
|
since = Timestamp.from_secs(timestamp_since)
|
||||||
|
|
||||||
filters = []
|
if len(self.search_list) == 0:
|
||||||
for word in self.search_list:
|
print("Search List empty")
|
||||||
filter = Filter().kind(definitions.EventDefinitions.KIND_NOTE).since(since).search(word)
|
return {}
|
||||||
filters.append(filter)
|
|
||||||
|
filter = Filter().kind(definitions.EventDefinitions.KIND_NOTE).since(since).search(self.search_list[0])
|
||||||
|
events = await self.database.query(filter)
|
||||||
|
for word in self.search_list[1:]:
|
||||||
|
filter = Filter().kind(definitions.EventDefinitions.KIND_NOTE).since(since).search(word)
|
||||||
|
evts = await self.database.query(filter)
|
||||||
|
events.merge(evts)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
events = await self.database.query(filters)
|
|
||||||
if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value:
|
if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value:
|
||||||
print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events")
|
print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events")
|
||||||
ns.finallist = {}
|
ns.finallist = {}
|
||||||
@ -172,7 +179,7 @@ class DicoverContentCurrentlyPopularbyTopic(DVMTaskInterface):
|
|||||||
[definitions.EventDefinitions.KIND_ZAP, definitions.EventDefinitions.KIND_REACTION,
|
[definitions.EventDefinitions.KIND_ZAP, definitions.EventDefinitions.KIND_REACTION,
|
||||||
definitions.EventDefinitions.KIND_REPOST,
|
definitions.EventDefinitions.KIND_REPOST,
|
||||||
definitions.EventDefinitions.KIND_NOTE]).event(event.id()).since(since)
|
definitions.EventDefinitions.KIND_NOTE]).event(event.id()).since(since)
|
||||||
reactions = await self.database.query([filt])
|
reactions = await self.database.query(filt)
|
||||||
if len(reactions.to_vec()) >= self.min_reactions:
|
if len(reactions.to_vec()) >= self.min_reactions:
|
||||||
ns.finallist[event.id().to_hex()] = len(reactions.to_vec())
|
ns.finallist[event.id().to_hex()] = len(reactions.to_vec())
|
||||||
|
|
||||||
|
@ -141,7 +141,7 @@ class DicoverContentCurrentlyPopularTweets(DVMTaskInterface):
|
|||||||
|
|
||||||
|
|
||||||
filter1 = Filter().kind(definitions.EventDefinitions.KIND_NOTE).since(since)
|
filter1 = Filter().kind(definitions.EventDefinitions.KIND_NOTE).since(since)
|
||||||
events = await self.database.query([filter1])
|
events = await self.database.query(filter1)
|
||||||
if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value:
|
if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value:
|
||||||
print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events")
|
print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events")
|
||||||
ns.finallist = {}
|
ns.finallist = {}
|
||||||
@ -161,7 +161,7 @@ class DicoverContentCurrentlyPopularTweets(DVMTaskInterface):
|
|||||||
[definitions.EventDefinitions.KIND_ZAP, definitions.EventDefinitions.KIND_REACTION,
|
[definitions.EventDefinitions.KIND_ZAP, definitions.EventDefinitions.KIND_REACTION,
|
||||||
definitions.EventDefinitions.KIND_REPOST,
|
definitions.EventDefinitions.KIND_REPOST,
|
||||||
definitions.EventDefinitions.KIND_NOTE]).event(event.id()).since(since)
|
definitions.EventDefinitions.KIND_NOTE]).event(event.id()).since(since)
|
||||||
reactions = await self.database.query([filt])
|
reactions = await self.database.query(filt)
|
||||||
if len(reactions.to_vec()) >= self.min_reactions:
|
if len(reactions.to_vec()) >= self.min_reactions:
|
||||||
ns.finallist[event.id().to_hex()] = len(reactions.to_vec())
|
ns.finallist[event.id().to_hex()] = len(reactions.to_vec())
|
||||||
|
|
||||||
|
@ -88,7 +88,7 @@ class Discoverlatestperfollower(DVMTaskInterface):
|
|||||||
step = 20
|
step = 20
|
||||||
|
|
||||||
followers_filter = Filter().author(PublicKey.parse(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)
|
followers = await cli.fetch_events(followers_filter, relay_timeout)
|
||||||
|
|
||||||
if len(followers.to_vec()) > 0:
|
if len(followers.to_vec()) > 0:
|
||||||
result_list = []
|
result_list = []
|
||||||
@ -128,17 +128,21 @@ class Discoverlatestperfollower(DVMTaskInterface):
|
|||||||
await cli.add_relay(relay)
|
await cli.add_relay(relay)
|
||||||
await cli.connect()
|
await cli.connect()
|
||||||
|
|
||||||
filters = []
|
user = PublicKey.parse(users[i])
|
||||||
for i in range(i, i + st):
|
filter1 = (Filter().author(user).kind(Kind(1))
|
||||||
|
.limit(1))
|
||||||
|
event_from_authors = await cli.fetch_events(filter1, relay_timeout_long)
|
||||||
|
|
||||||
|
for i in range(i+1, i + st):
|
||||||
try:
|
try:
|
||||||
user = PublicKey.parse(users[i])
|
user = PublicKey.parse(users[i])
|
||||||
filter1 = (Filter().author(user).kind(Kind(1))
|
filter1 = (Filter().author(user).kind(Kind(1))
|
||||||
.limit(1))
|
.limit(1))
|
||||||
filters.append(filter1)
|
events = await cli.fetch_events(filter1, relay_timeout_long)
|
||||||
|
event_from_authors.merge(events)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(e)
|
print(e)
|
||||||
|
|
||||||
event_from_authors = await cli.fetch_events(filters, relay_timeout_long)
|
|
||||||
for author in event_from_authors.to_vec():
|
for author in event_from_authors.to_vec():
|
||||||
if instance.dic[author.author().to_hex()] is None:
|
if instance.dic[author.author().to_hex()] is None:
|
||||||
instance.dic[author.author().to_hex()] = author
|
instance.dic[author.author().to_hex()] = author
|
||||||
|
@ -113,7 +113,7 @@ class DicoverContentOnThisDay(DVMTaskInterface):
|
|||||||
|
|
||||||
filter1 = Filter().kind(definitions.EventDefinitions.KIND_NOTE).since(since).until(until)
|
filter1 = Filter().kind(definitions.EventDefinitions.KIND_NOTE).since(since).until(until)
|
||||||
|
|
||||||
events = await database.query([filter1])
|
events = await database.query(filter1)
|
||||||
print(len(events.to_vec()))
|
print(len(events.to_vec()))
|
||||||
if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value:
|
if self.dvm_config.LOGLEVEL.value >= LogLevel.DEBUG.value:
|
||||||
print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events")
|
print("[" + self.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events")
|
||||||
@ -123,7 +123,7 @@ class DicoverContentOnThisDay(DVMTaskInterface):
|
|||||||
filt = Filter().kinds([definitions.EventDefinitions.KIND_ZAP, definitions.EventDefinitions.KIND_REPOST,
|
filt = Filter().kinds([definitions.EventDefinitions.KIND_ZAP, definitions.EventDefinitions.KIND_REPOST,
|
||||||
definitions.EventDefinitions.KIND_REACTION,
|
definitions.EventDefinitions.KIND_REACTION,
|
||||||
definitions.EventDefinitions.KIND_NOTE]).event(event.id()).since(since)
|
definitions.EventDefinitions.KIND_NOTE]).event(event.id()).since(since)
|
||||||
reactions = await database.query([filt])
|
reactions = await database.query(filt)
|
||||||
|
|
||||||
if len(reactions.to_vec()) >= self.min_reactions:
|
if len(reactions.to_vec()) >= self.min_reactions:
|
||||||
ns.finallist[event.id().to_hex()] = len(reactions.to_vec())
|
ns.finallist[event.id().to_hex()] = len(reactions.to_vec())
|
||||||
|
@ -89,7 +89,7 @@ class DiscoveryBotFarms(DVMTaskInterface):
|
|||||||
# Query events from database
|
# Query events from database
|
||||||
|
|
||||||
filter1 = Filter().kind(Kind(0))
|
filter1 = Filter().kind(Kind(0))
|
||||||
events = await cli.database().query([filter1])
|
events = await cli.database().query(filter1)
|
||||||
result_list = []
|
result_list = []
|
||||||
print("Events: " + str(len(events.to_vec())))
|
print("Events: " + str(len(events.to_vec())))
|
||||||
|
|
||||||
|
@ -92,7 +92,7 @@ class DiscoverReports(DVMTaskInterface):
|
|||||||
# if we don't add users, e.g. by a wot, we check all our followers.
|
# if we don't add users, e.g. by a wot, we check all our followers.
|
||||||
if len(pubkeys) == 0:
|
if len(pubkeys) == 0:
|
||||||
followers_filter = Filter().author(PublicKey.parse(options["sender"])).kind(Kind(3))
|
followers_filter = Filter().author(PublicKey.parse(options["sender"])).kind(Kind(3))
|
||||||
followers = await cli.fetch_events([followers_filter], relay_timeout)
|
followers = await cli.fetch_events(followers_filter, relay_timeout)
|
||||||
|
|
||||||
if len(followers.to_vec()) > 0:
|
if len(followers.to_vec()) > 0:
|
||||||
result_list = []
|
result_list = []
|
||||||
@ -113,7 +113,7 @@ class DiscoverReports(DVMTaskInterface):
|
|||||||
options["since_days"]) # TODO make this an option, 180 days for now
|
options["since_days"]) # TODO make this an option, 180 days for now
|
||||||
since = Timestamp.from_secs(ago)
|
since = Timestamp.from_secs(ago)
|
||||||
kind1984_filter = Filter().authors(pubkeys).kind(Kind(1984)).since(since)
|
kind1984_filter = Filter().authors(pubkeys).kind(Kind(1984)).since(since)
|
||||||
reports = await cli.fetch_events([kind1984_filter], relay_timeout)
|
reports = await cli.fetch_events(kind1984_filter, relay_timeout)
|
||||||
|
|
||||||
bad_actors = []
|
bad_actors = []
|
||||||
ns.dic = {}
|
ns.dic = {}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
from datetime import timedelta
|
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
|
|
||||||
from nostr_sdk import Client, Timestamp, PublicKey, Tag, Keys, Options, SecretKey, NostrSigner, Kind, RelayOptions, \
|
from nostr_sdk import Client, Timestamp, PublicKey, Tag, Keys, Options, SecretKey, NostrSigner, Kind, RelayOptions, \
|
||||||
@ -77,7 +76,7 @@ class DiscoverInactiveFollows(DVMTaskInterface):
|
|||||||
opts = (Options().relay_limits(relaylimits))
|
opts = (Options().relay_limits(relaylimits))
|
||||||
|
|
||||||
cli = ClientBuilder().signer(NostrSigner.keys(keys)).opts(opts).build()
|
cli = ClientBuilder().signer(NostrSigner.keys(keys)).opts(opts).build()
|
||||||
for relay in self.dvm_config.RELAY_LIST:
|
for relay in self.dvm_config.SYNC_DB_RELAY_LIST:
|
||||||
await cli.add_relay(relay)
|
await cli.add_relay(relay)
|
||||||
await cli.add_relay("wss://nostr.band")
|
await cli.add_relay("wss://nostr.band")
|
||||||
|
|
||||||
@ -87,8 +86,7 @@ class DiscoverInactiveFollows(DVMTaskInterface):
|
|||||||
step = 20
|
step = 20
|
||||||
|
|
||||||
followers_filter = Filter().author(PublicKey.parse(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)
|
followers = await cli.fetch_events(followers_filter, relay_timeout)
|
||||||
|
|
||||||
if len(followers.to_vec()) > 0:
|
if len(followers.to_vec()) > 0:
|
||||||
result_list = []
|
result_list = []
|
||||||
newest = 0
|
newest = 0
|
||||||
@ -100,10 +98,6 @@ class DiscoverInactiveFollows(DVMTaskInterface):
|
|||||||
newest = entry.created_at().as_secs()
|
newest = entry.created_at().as_secs()
|
||||||
best_entry = entry
|
best_entry = entry
|
||||||
|
|
||||||
print(best_entry.as_json())
|
|
||||||
print(len(best_entry.tags().to_vec()))
|
|
||||||
print(best_entry.created_at().as_secs())
|
|
||||||
print(Timestamp.now().as_secs())
|
|
||||||
followings = []
|
followings = []
|
||||||
ns.dic = {}
|
ns.dic = {}
|
||||||
tagcount = 0
|
tagcount = 0
|
||||||
@ -124,15 +118,16 @@ class DiscoverInactiveFollows(DVMTaskInterface):
|
|||||||
|
|
||||||
keys = Keys.parse(self.dvm_config.PRIVATE_KEY)
|
keys = Keys.parse(self.dvm_config.PRIVATE_KEY)
|
||||||
cli = Client(NostrSigner.keys(keys))
|
cli = Client(NostrSigner.keys(keys))
|
||||||
for relay in self.dvm_config.RELAY_LIST:
|
for relay in self.dvm_config.SYNC_DB_RELAY_LIST:
|
||||||
await cli.add_relay(relay)
|
await cli.add_relay(relay)
|
||||||
await cli.connect()
|
await cli.connect()
|
||||||
|
|
||||||
filters = []
|
|
||||||
for i in range(i, i + st):
|
|
||||||
filter1 = Filter().author(PublicKey.parse(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(filter1, relay_timeout_long)
|
||||||
event_from_authors = await cli.fetch_events(filters, relay_timeout_long)
|
for j in range(i+1, i + st):
|
||||||
|
filter1 = Filter().author(PublicKey.parse(users[j])).since(notactivesince).limit(1)
|
||||||
|
events = await cli.fetch_events(filter1, relay_timeout_long)
|
||||||
|
event_from_authors.merge(events)
|
||||||
|
|
||||||
for author in event_from_authors.to_vec():
|
for author in event_from_authors.to_vec():
|
||||||
instance.dic[author.author().to_hex()] = "True"
|
instance.dic[author.author().to_hex()] = "True"
|
||||||
print(str(i) + "/" + str(len(users)))
|
print(str(i) + "/" + str(len(users)))
|
||||||
|
@ -82,7 +82,7 @@ class DiscoverNonFollowers(DVMTaskInterface):
|
|||||||
step = 20
|
step = 20
|
||||||
|
|
||||||
followers_filter = Filter().author(PublicKey.parse(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)
|
followers = await cli.fetch_events(followers_filter, relay_timeout)
|
||||||
|
|
||||||
if len(followers.to_vec()) > 0:
|
if len(followers.to_vec()) > 0:
|
||||||
result_list = []
|
result_list = []
|
||||||
@ -111,11 +111,12 @@ class DiscoverNonFollowers(DVMTaskInterface):
|
|||||||
await cli.add_relay(relay)
|
await cli.add_relay(relay)
|
||||||
await cli.connect()
|
await cli.connect()
|
||||||
|
|
||||||
for i in range(i, i + st):
|
|
||||||
filters = []
|
|
||||||
filter1 = Filter().author(PublicKey.parse(users[i])).kind(Kind(3))
|
filter1 = Filter().author(PublicKey.parse(users[i])).kind(Kind(3))
|
||||||
filters.append(filter1)
|
followers = await cli.fetch_events(filter1, relay_timeout)
|
||||||
followers = await cli.fetch_events(filters, relay_timeout)
|
for i in range(i+1, i + st):
|
||||||
|
filter1 = Filter().author(PublicKey.parse(users[i])).kind(Kind(3))
|
||||||
|
follower = await cli.fetch_events(filter1, relay_timeout)
|
||||||
|
followers.merge(follower)
|
||||||
|
|
||||||
if len(followers.to_vec()) > 0:
|
if len(followers.to_vec()) > 0:
|
||||||
result_list = []
|
result_list = []
|
||||||
|
@ -79,10 +79,10 @@ class TrendingNotesGleasonator(DVMTaskInterface):
|
|||||||
|
|
||||||
ltags = ["#e", "pub.ditto.trends"]
|
ltags = ["#e", "pub.ditto.trends"]
|
||||||
authors = [PublicKey.parse("db0e60d10b9555a39050c258d460c5c461f6d18f467aa9f62de1a728b8a891a4")]
|
authors = [PublicKey.parse("db0e60d10b9555a39050c258d460c5c461f6d18f467aa9f62de1a728b8a891a4")]
|
||||||
notes_filter = Filter().authors(authors).kind(Kind(1985)).custom_tag(SingleLetterTag.lowercase(Alphabet.L),
|
notes_filter = Filter().authors(authors).kind(Kind(1985)).custom_tags(SingleLetterTag.lowercase(Alphabet.L),
|
||||||
ltags)
|
ltags)
|
||||||
|
|
||||||
events = await cli.fetch_events([notes_filter], relay_timeout_long)
|
events = await cli.fetch_events(notes_filter, relay_timeout_long)
|
||||||
|
|
||||||
result_list = []
|
result_list = []
|
||||||
if len(events.to_vec()) > 0:
|
if len(events.to_vec()) > 0:
|
||||||
|
@ -247,7 +247,7 @@ async def analyse_users(user_ids=None, dunbar=100000000):
|
|||||||
|
|
||||||
database = NostrDatabase.lmdb("db/nostr_followlists.db")
|
database = NostrDatabase.lmdb("db/nostr_followlists.db")
|
||||||
followers_filter = Filter().authors(user_keys).kind(Kind(3))
|
followers_filter = Filter().authors(user_keys).kind(Kind(3))
|
||||||
followers = await database.query([followers_filter])
|
followers = await database.query(followers_filter)
|
||||||
allfriends = []
|
allfriends = []
|
||||||
if len(followers.to_vec()) > 0:
|
if len(followers.to_vec()) > 0:
|
||||||
for follower in followers.to_vec():
|
for follower in followers.to_vec():
|
||||||
|
@ -251,7 +251,7 @@ async def analyse_users(user_ids=None, dunbar=100000000):
|
|||||||
|
|
||||||
database = NostrDatabase.lmdb("db/nostr_followlists.db")
|
database = NostrDatabase.lmdb("db/nostr_followlists.db")
|
||||||
followers_filter = Filter().authors(user_keys).kind(Kind(3))
|
followers_filter = Filter().authors(user_keys).kind(Kind(3))
|
||||||
followers = await database.query([followers_filter])
|
followers = await database.query(followers_filter)
|
||||||
allfriends = []
|
allfriends = []
|
||||||
if len(followers.to_vec()) > 0:
|
if len(followers.to_vec()) > 0:
|
||||||
for follower in followers.to_vec():
|
for follower in followers.to_vec():
|
||||||
|
@ -94,7 +94,7 @@ class SearchUser(DVMTaskInterface):
|
|||||||
# Query events from database
|
# Query events from database
|
||||||
|
|
||||||
filter1 = Filter().kind(Kind(0))
|
filter1 = Filter().kind(Kind(0))
|
||||||
events = await cli.database().query([filter1])
|
events = await cli.database().query(filter1)
|
||||||
|
|
||||||
result_list = []
|
result_list = []
|
||||||
print("Events: " + str(len(events.to_vec())))
|
print("Events: " + str(len(events.to_vec())))
|
||||||
|
@ -279,7 +279,7 @@ async def fetch_user_metadata(npub, client):
|
|||||||
pk = PublicKey.parse(npub)
|
pk = PublicKey.parse(npub)
|
||||||
print(f"\nGetting profile metadata for {pk.to_bech32()}...")
|
print(f"\nGetting profile metadata for {pk.to_bech32()}...")
|
||||||
profile_filter = Filter().kind(Kind(0)).author(pk).limit(1)
|
profile_filter = Filter().kind(Kind(0)).author(pk).limit(1)
|
||||||
events = await client.fetch_events([profile_filter], relay_timeout)
|
events = await client.fetch_events(profile_filter, relay_timeout)
|
||||||
if len(events.to_vec()) > 0:
|
if len(events.to_vec()) > 0:
|
||||||
latest_entry = events.to_vec()[0]
|
latest_entry = events.to_vec()[0]
|
||||||
latest_time = 0
|
latest_time = 0
|
||||||
|
@ -13,6 +13,8 @@ class EventDefinitions:
|
|||||||
KIND_REPOST = Kind(6)
|
KIND_REPOST = Kind(6)
|
||||||
KIND_REACTION = Kind(7)
|
KIND_REACTION = Kind(7)
|
||||||
KIND_NIP68_IMAGEEVENT = Kind(20)
|
KIND_NIP68_IMAGEEVENT = Kind(20)
|
||||||
|
KIND_GIFTWRAP = Kind(59)
|
||||||
|
KIND_PRIVATE_DM = Kind(60)
|
||||||
KIND_NIP94_METADATA = Kind(1063)
|
KIND_NIP94_METADATA = Kind(1063)
|
||||||
KIND_NIP22_COMMENT = Kind(1111)
|
KIND_NIP22_COMMENT = Kind(1111)
|
||||||
KIND_NIP93_GALLERYENTRY = Kind(1163)
|
KIND_NIP93_GALLERYENTRY = Kind(1163)
|
||||||
|
@ -43,7 +43,7 @@ async def convert_nip93_to_nip68(private_key, relay_list, user_to_import_npub=No
|
|||||||
|
|
||||||
nip93_filter = Filter().kind(Kind(1163)).author(PublicKey.parse(user_to_import_npub))
|
nip93_filter = Filter().kind(Kind(1163)).author(PublicKey.parse(user_to_import_npub))
|
||||||
|
|
||||||
events = await client.fetch_events([nip93_filter], timedelta(5))
|
events = await client.fetch_events(nip93_filter, timedelta(5))
|
||||||
|
|
||||||
events_vec = events.to_vec()
|
events_vec = events.to_vec()
|
||||||
reversed_events_vec = reversed(events_vec)
|
reversed_events_vec = reversed(events_vec)
|
||||||
@ -80,7 +80,7 @@ async def convert_nip93_to_nip68(private_key, relay_list, user_to_import_npub=No
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(relay_hint)
|
print(relay_hint)
|
||||||
e_filter = Filter().id(EventId.parse(eventid)).limit(1)
|
e_filter = Filter().id(EventId.parse(eventid)).limit(1)
|
||||||
content_events = await client.fetch_events([e_filter], timedelta(5))
|
content_events = await client.fetch_events(e_filter, timedelta(5))
|
||||||
if len(content_events.to_vec()) > 0:
|
if len(content_events.to_vec()) > 0:
|
||||||
content_event = content_events.to_vec()[0]
|
content_event = content_events.to_vec()[0]
|
||||||
content = re.sub(r'^https?:\/\/.*[\r\n]*', '', content_event.content(), flags=re.MULTILINE).rstrip()
|
content = re.sub(r'^https?:\/\/.*[\r\n]*', '', content_event.content(), flags=re.MULTILINE).rstrip()
|
||||||
|
@ -36,7 +36,7 @@ def nip88_create_d_tag(name, pubkey, image):
|
|||||||
|
|
||||||
async def fetch_nip88_parameters_for_deletion(keys, eventid, client, dvmconfig):
|
async def fetch_nip88_parameters_for_deletion(keys, eventid, client, dvmconfig):
|
||||||
idfilter = Filter().id(EventId.parse(eventid)).limit(1)
|
idfilter = Filter().id(EventId.parse(eventid)).limit(1)
|
||||||
nip88events = await client.fetch_events([idfilter], relay_timeout)
|
nip88events = await client.fetch_events(idfilter, relay_timeout)
|
||||||
d_tag = ""
|
d_tag = ""
|
||||||
if len(nip88events.to_vec()) == 0:
|
if len(nip88events.to_vec()) == 0:
|
||||||
print("Event not found. Potentially gone.")
|
print("Event not found. Potentially gone.")
|
||||||
@ -59,7 +59,7 @@ async def fetch_nip88_parameters_for_deletion(keys, eventid, client, dvmconfig):
|
|||||||
|
|
||||||
async def fetch_nip88_event(keys, eventid, client, dvmconfig):
|
async def fetch_nip88_event(keys, eventid, client, dvmconfig):
|
||||||
idfilter = Filter().id(EventId.parse(eventid)).limit(1)
|
idfilter = Filter().id(EventId.parse(eventid)).limit(1)
|
||||||
nip88events = await client.fetch_events([idfilter], relay_timeout)
|
nip88events = await client.fetch_events(idfilter, relay_timeout)
|
||||||
d_tag = ""
|
d_tag = ""
|
||||||
if len(nip88events.to_vec()) == 0:
|
if len(nip88events.to_vec()) == 0:
|
||||||
print("Event not found. Potentially gone.")
|
print("Event not found. Potentially gone.")
|
||||||
@ -97,9 +97,9 @@ async def nip88_has_active_subscription(user: PublicKey, tiereventdtag, client:
|
|||||||
}
|
}
|
||||||
|
|
||||||
subscriptionfilter = Filter().kind(definitions.EventDefinitions.KIND_NIP88_PAYMENT_RECIPE).pubkey(
|
subscriptionfilter = Filter().kind(definitions.EventDefinitions.KIND_NIP88_PAYMENT_RECIPE).pubkey(
|
||||||
PublicKey.parse(receiver_public_key_hex)).custom_tag(SingleLetterTag.uppercase(Alphabet.P),
|
PublicKey.parse(receiver_public_key_hex)).custom_tags(SingleLetterTag.uppercase(Alphabet.P),
|
||||||
[user.to_hex()]).limit(1)
|
[user.to_hex()]).limit(1)
|
||||||
evts = await client.fetch_events([subscriptionfilter], relay_timeout)
|
evts = await client.fetch_events(subscriptionfilter, relay_timeout)
|
||||||
if len(evts.to_vec()) > 0:
|
if len(evts.to_vec()) > 0:
|
||||||
print(evts.to_vec()[0].as_json())
|
print(evts.to_vec()[0].as_json())
|
||||||
matchesdtag = False
|
matchesdtag = False
|
||||||
@ -120,7 +120,7 @@ async def nip88_has_active_subscription(user: PublicKey, tiereventdtag, client:
|
|||||||
cancel_filter = Filter().kind(EventDefinitions.KIND_NIP88_STOP_SUBSCRIPTION_EVENT).author(
|
cancel_filter = Filter().kind(EventDefinitions.KIND_NIP88_STOP_SUBSCRIPTION_EVENT).author(
|
||||||
user).pubkey(PublicKey.parse(receiver_public_key_hex)).event(
|
user).pubkey(PublicKey.parse(receiver_public_key_hex)).event(
|
||||||
EventId.parse(subscription_status["subscriptionId"])).limit(1)
|
EventId.parse(subscription_status["subscriptionId"])).limit(1)
|
||||||
cancel_events = await client.fetch_events([cancel_filter], relay_timeout)
|
cancel_events = await client.fetch_events(cancel_filter, relay_timeout)
|
||||||
if len(cancel_events.to_vec()) > 0:
|
if len(cancel_events.to_vec()) > 0:
|
||||||
if cancel_events.to_vec()[0].created_at().as_secs() > evts[0].created_at().as_secs():
|
if cancel_events.to_vec()[0].created_at().as_secs() > evts[0].created_at().as_secs():
|
||||||
subscription_status["expires"] = True
|
subscription_status["expires"] = True
|
||||||
|
@ -41,7 +41,7 @@ async def nip89_announce_tasks(dvm_config, client):
|
|||||||
|
|
||||||
async def fetch_nip89_parameters_for_deletion(keys, eventid, client, dvmconfig, pow=False):
|
async def fetch_nip89_parameters_for_deletion(keys, eventid, client, dvmconfig, pow=False):
|
||||||
idfilter = Filter().id(EventId.parse(eventid)).limit(1)
|
idfilter = Filter().id(EventId.parse(eventid)).limit(1)
|
||||||
nip89events = await client.fetch_events([idfilter], relay_timeout)
|
nip89events = await client.fetch_events(idfilter, relay_timeout)
|
||||||
d_tag = ""
|
d_tag = ""
|
||||||
if len(nip89events.to_vec()) == 0:
|
if len(nip89events.to_vec()) == 0:
|
||||||
print("Event not found. Potentially gone.")
|
print("Event not found. Potentially gone.")
|
||||||
@ -92,8 +92,8 @@ async def nip89_fetch_all_dvms(client):
|
|||||||
for i in range(5000, 5999):
|
for i in range(5000, 5999):
|
||||||
ktags.append(str(i))
|
ktags.append(str(i))
|
||||||
|
|
||||||
filter = Filter().kind(EventDefinitions.KIND_ANNOUNCEMENT).custom_tag(SingleLetterTag.lowercase(Alphabet.K), ktags)
|
filter = Filter().kind(EventDefinitions.KIND_ANNOUNCEMENT).custom_tags(SingleLetterTag.lowercase(Alphabet.K), ktags)
|
||||||
events = await client.fetch_events([filter], relay_timeout)
|
events = await client.fetch_events(filter, relay_timeout)
|
||||||
for event in events.to_vec():
|
for event in events.to_vec():
|
||||||
print(event.as_json())
|
print(event.as_json())
|
||||||
|
|
||||||
@ -101,8 +101,8 @@ async def nip89_fetch_all_dvms(client):
|
|||||||
async def nip89_fetch_events_pubkey(client, pubkey, kind):
|
async def nip89_fetch_events_pubkey(client, pubkey, kind):
|
||||||
ktags = [str(kind.as_u16())]
|
ktags = [str(kind.as_u16())]
|
||||||
nip89filter = (Filter().kind(EventDefinitions.KIND_ANNOUNCEMENT).author(PublicKey.parse(pubkey)).
|
nip89filter = (Filter().kind(EventDefinitions.KIND_ANNOUNCEMENT).author(PublicKey.parse(pubkey)).
|
||||||
custom_tag(SingleLetterTag.lowercase(Alphabet.K), ktags))
|
custom_tags(SingleLetterTag.lowercase(Alphabet.K), ktags))
|
||||||
events = await client.fetch_events([nip89filter], relay_timeout)
|
events = await client.fetch_events(nip89filter, relay_timeout)
|
||||||
|
|
||||||
dvms = {}
|
dvms = {}
|
||||||
for event in events.to_vec():
|
for event in events.to_vec():
|
||||||
@ -152,7 +152,7 @@ async def delete_nip_89(dvm_config, pow=True):
|
|||||||
await client.add_relay(relay)
|
await client.add_relay(relay)
|
||||||
await client.connect()
|
await client.connect()
|
||||||
filter = Filter().kind(EventDefinitions.KIND_ANNOUNCEMENT).author(keys.public_key())
|
filter = Filter().kind(EventDefinitions.KIND_ANNOUNCEMENT).author(keys.public_key())
|
||||||
events = await client.fetch_events([filter], timedelta(seconds=5))
|
events = await client.fetch_events(filter, timedelta(seconds=5))
|
||||||
|
|
||||||
if len(events.to_vec()) == 0:
|
if len(events.to_vec()) == 0:
|
||||||
print("Couldn't find note on relays. Seems they are gone.")
|
print("Couldn't find note on relays. Seems they are gone.")
|
||||||
|
@ -16,14 +16,14 @@ async def get_event_by_id(event_id_str: str, client: Client, config=None) -> Eve
|
|||||||
split = event_id_str.split(":")
|
split = event_id_str.split(":")
|
||||||
if len(split) == 3:
|
if len(split) == 3:
|
||||||
pk = PublicKey.parse(split[1])
|
pk = PublicKey.parse(split[1])
|
||||||
id_filter = Filter().author(pk).custom_tag(SingleLetterTag.lowercase(Alphabet.D), [split[2]])
|
id_filter = Filter().author(pk).custom_tags(SingleLetterTag.lowercase(Alphabet.D), [split[2]])
|
||||||
events = await client.fetch_events([id_filter], relay_timeout)
|
events = await client.fetch_events(id_filter, relay_timeout)
|
||||||
else:
|
else:
|
||||||
event_id = EventId.parse(event_id_str)
|
event_id = EventId.parse(event_id_str)
|
||||||
|
|
||||||
id_filter = Filter().id(event_id).limit(1)
|
id_filter = Filter().id(event_id).limit(1)
|
||||||
|
|
||||||
events = await client.fetch_events([id_filter], relay_timeout)
|
events = await client.fetch_events(id_filter, relay_timeout)
|
||||||
|
|
||||||
if len(events.to_vec()) > 0:
|
if len(events.to_vec()) > 0:
|
||||||
return events.to_vec()[0]
|
return events.to_vec()[0]
|
||||||
@ -32,8 +32,8 @@ async def get_event_by_id(event_id_str: str, client: Client, config=None) -> Eve
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
async def get_events_async(client, filter, timeout):
|
async def get_events_async(client, filter1, timeout):
|
||||||
events = await client.fetch_events([filter], timedelta(seconds=timeout))
|
events = await client.fetch_events(filter1, timedelta(seconds=timeout))
|
||||||
return events.to_vec()
|
return events.to_vec()
|
||||||
|
|
||||||
|
|
||||||
@ -44,8 +44,8 @@ async def get_events_by_ids(event_ids, client: Client, config=None) -> List | No
|
|||||||
split = event_id.split(":")
|
split = event_id.split(":")
|
||||||
if len(split) == 3:
|
if len(split) == 3:
|
||||||
pk = PublicKey.parse(split[1])
|
pk = PublicKey.parse(split[1])
|
||||||
id_filter = Filter().author(pk).custom_tag(SingleLetterTag.lowercase(Alphabet.D), [split[2]])
|
id_filter = Filter().author(pk).custom_tags(SingleLetterTag.lowercase(Alphabet.D), [split[2]])
|
||||||
events = await client.fetch_events([id_filter], relay_timeout)
|
events = await client.fetch_events(id_filter, relay_timeout)
|
||||||
else:
|
else:
|
||||||
|
|
||||||
if str(event_id).startswith("nevent"):
|
if str(event_id).startswith("nevent"):
|
||||||
@ -57,7 +57,7 @@ async def get_events_by_ids(event_ids, client: Client, config=None) -> List | No
|
|||||||
search_ids.append(event_id)
|
search_ids.append(event_id)
|
||||||
|
|
||||||
id_filter = Filter().ids(search_ids)
|
id_filter = Filter().ids(search_ids)
|
||||||
events = await client.fetch_events([id_filter], relay_timeout)
|
events = await client.fetch_events(id_filter, relay_timeout)
|
||||||
|
|
||||||
if len(events.to_vec()) > 0:
|
if len(events.to_vec()) > 0:
|
||||||
return events.to_vec()
|
return events.to_vec()
|
||||||
@ -66,9 +66,10 @@ async def get_events_by_ids(event_ids, client: Client, config=None) -> List | No
|
|||||||
|
|
||||||
|
|
||||||
async def get_events_by_id(event_ids: list, client: Client, config=None) -> list[Event] | None:
|
async def get_events_by_id(event_ids: list, client: Client, config=None) -> list[Event] | None:
|
||||||
|
|
||||||
id_filter = Filter().ids(event_ids)
|
id_filter = Filter().ids(event_ids)
|
||||||
# events = asyncio.run(get_events_async(client, id_filter, config.RELAY_TIMEOUT))
|
# events = asyncio.run(get_events_async(client, id_filter, config.RELAY_TIMEOUT))
|
||||||
events = await client.fetch_events([id_filter], relay_timeout)
|
events = await client.fetch_events(id_filter, relay_timeout)
|
||||||
if len(events.to_vec()) > 0:
|
if len(events.to_vec()) > 0:
|
||||||
return events.to_vec()
|
return events.to_vec()
|
||||||
else:
|
else:
|
||||||
@ -89,7 +90,7 @@ async def get_referenced_event_by_id(event_id, client, dvm_config, kinds) -> Eve
|
|||||||
job_id_filter = Filter().kinds(kinds).event(event_id).limit(1)
|
job_id_filter = Filter().kinds(kinds).event(event_id).limit(1)
|
||||||
else:
|
else:
|
||||||
job_id_filter = Filter().event(event_id).limit(1)
|
job_id_filter = Filter().event(event_id).limit(1)
|
||||||
events = await client.fetch_events([job_id_filter], relay_timeout)
|
events = await client.fetch_events(job_id_filter, relay_timeout)
|
||||||
|
|
||||||
if len(events.to_vec()) > 0:
|
if len(events.to_vec()) > 0:
|
||||||
return events.to_vec()[0]
|
return events.to_vec()[0]
|
||||||
@ -104,8 +105,8 @@ async def get_inbox_relays(event_to_send: Event, client: Client, dvm_config):
|
|||||||
ptag = PublicKey.parse(tag.as_vec()[1])
|
ptag = PublicKey.parse(tag.as_vec()[1])
|
||||||
ptags.append(ptag)
|
ptags.append(ptag)
|
||||||
|
|
||||||
filter = Filter().kinds([EventDefinitions.KIND_RELAY_ANNOUNCEMENT]).authors(ptags)
|
filter1 = Filter().kinds([EventDefinitions.KIND_RELAY_ANNOUNCEMENT]).authors(ptags)
|
||||||
events = await client.fetch_events([filter], relay_timeout)
|
events = await client.fetch_events(filter1, relay_timeout)
|
||||||
if len(events.to_vec()) == 0:
|
if len(events.to_vec()) == 0:
|
||||||
return []
|
return []
|
||||||
else:
|
else:
|
||||||
@ -128,8 +129,8 @@ async def get_dm_relays(event_to_send: Event, client: Client, dvm_config):
|
|||||||
ptag = PublicKey.parse(tag.as_vec()[1])
|
ptag = PublicKey.parse(tag.as_vec()[1])
|
||||||
ptags.append(ptag)
|
ptags.append(ptag)
|
||||||
|
|
||||||
filter = Filter().kinds([Kind(10050)]).authors(ptags)
|
filter1 = Filter().kinds([Kind(10050)]).authors(ptags)
|
||||||
events = await client.fetch_events([filter], relay_timeout)
|
events = await client.fetch_events(filter1, relay_timeout)
|
||||||
if len(events.to_vec()) == 0:
|
if len(events.to_vec()) == 0:
|
||||||
return []
|
return []
|
||||||
else:
|
else:
|
||||||
@ -157,8 +158,8 @@ async def get_main_relays(event_to_send: Event, client: Client, dvm_config):
|
|||||||
await client.add_relay(relay)
|
await client.add_relay(relay)
|
||||||
|
|
||||||
await client.connect()
|
await client.connect()
|
||||||
filter = Filter().kinds([EventDefinitions.KIND_FOLLOW_LIST]).authors(ptags)
|
filter1 = Filter().kinds([EventDefinitions.KIND_FOLLOW_LIST]).authors(ptags)
|
||||||
events = await client.fetch_events([filter], relay_timeout)
|
events = await client.fetch_events(filter1, relay_timeout)
|
||||||
if len(events.to_vec()) == 0:
|
if len(events.to_vec()) == 0:
|
||||||
return []
|
return []
|
||||||
else:
|
else:
|
||||||
@ -207,9 +208,7 @@ async def send_event_outbox(event: Event, client, dvm_config) -> SendEventOutput
|
|||||||
|
|
||||||
# 5. Otherwise, we create a new Outbox client with the inbox relays and send the event there
|
# 5. Otherwise, we create a new Outbox client with the inbox relays and send the event there
|
||||||
relaylimits = RelayLimits.disable()
|
relaylimits = RelayLimits.disable()
|
||||||
connection = Connection().embedded_tor().target(ConnectionTarget.ONION)
|
connection = Connection().addr("127.0.0.1:9050").target(ConnectionTarget.ONION)
|
||||||
|
|
||||||
# connection = Connection().addr("127.0.0.1:9050").target(ConnectionTarget.ONION)
|
|
||||||
opts = Options().relay_limits(relaylimits).connection(connection)
|
opts = Options().relay_limits(relaylimits).connection(connection)
|
||||||
sk = SecretKey.parse(dvm_config.PRIVATE_KEY)
|
sk = SecretKey.parse(dvm_config.PRIVATE_KEY)
|
||||||
keys = Keys.parse(sk.to_hex())
|
keys = Keys.parse(sk.to_hex())
|
||||||
|
@ -116,7 +116,7 @@ class NutZapWallet:
|
|||||||
|
|
||||||
wallet_filter = Filter().kind(EventDefinitions.KIND_NUT_WALLET).author(keys.public_key())
|
wallet_filter = Filter().kind(EventDefinitions.KIND_NUT_WALLET).author(keys.public_key())
|
||||||
# relay_timeout = EventSource.relays(timedelta(seconds=10))
|
# relay_timeout = EventSource.relays(timedelta(seconds=10))
|
||||||
wallets = await client.fetch_events([wallet_filter], timedelta(seconds=10))
|
wallets = await client.fetch_events(wallet_filter, timedelta(seconds=10))
|
||||||
|
|
||||||
if len(wallets.to_vec()) > 0:
|
if len(wallets.to_vec()) > 0:
|
||||||
|
|
||||||
@ -190,7 +190,7 @@ class NutZapWallet:
|
|||||||
|
|
||||||
# Now all proof events
|
# Now all proof events
|
||||||
proof_filter = Filter().kind(Kind(7375)).author(keys.public_key())
|
proof_filter = Filter().kind(Kind(7375)).author(keys.public_key())
|
||||||
proof_events = await client.fetch_events([proof_filter], timedelta(seconds=5))
|
proof_events = await client.fetch_events(proof_filter, timedelta(seconds=5))
|
||||||
|
|
||||||
latest_proof_sec = 0
|
latest_proof_sec = 0
|
||||||
latest_proof_event_id = EventId
|
latest_proof_event_id = EventId
|
||||||
@ -443,7 +443,7 @@ class NutZapWallet:
|
|||||||
|
|
||||||
async def fetch_mint_info_event(self, pubkey, client):
|
async def fetch_mint_info_event(self, pubkey, client):
|
||||||
mint_info_filter = Filter().kind(Kind(10019)).author(PublicKey.parse(pubkey))
|
mint_info_filter = Filter().kind(Kind(10019)).author(PublicKey.parse(pubkey))
|
||||||
preferences = await client.fetch_events([mint_info_filter], timedelta(seconds=5))
|
preferences = await client.fetch_events(mint_info_filter, timedelta(seconds=5))
|
||||||
mints = []
|
mints = []
|
||||||
relays = []
|
relays = []
|
||||||
pubkey = ""
|
pubkey = ""
|
||||||
|
@ -70,7 +70,7 @@ async def nwc_test(nwc_server):
|
|||||||
keys = Keys.parse(check_and_set_private_key("test"))
|
keys = Keys.parse(check_and_set_private_key("test"))
|
||||||
|
|
||||||
# we zap npub1nxa4tywfz9nqp7z9zp7nr7d4nchhclsf58lcqt5y782rmf2hefjquaa6q8's profile 21 sats and say Cool stuff
|
# we zap npub1nxa4tywfz9nqp7z9zp7nr7d4nchhclsf58lcqt5y782rmf2hefjquaa6q8's profile 21 sats and say Cool stuff
|
||||||
pubkey = PublicKey.from_bech32("npub1nxa4tywfz9nqp7z9zp7nr7d4nchhclsf58lcqt5y782rmf2hefjquaa6q8")
|
pubkey = PublicKey.parse("npub1nxa4tywfz9nqp7z9zp7nr7d4nchhclsf58lcqt5y782rmf2hefjquaa6q8")
|
||||||
bolt11 = zaprequest("hype@bitcoinfixesthis.org", 21, "Cool Stuff", None,
|
bolt11 = zaprequest("hype@bitcoinfixesthis.org", 21, "Cool Stuff", None,
|
||||||
pubkey, keys, DVMConfig.RELAY_LIST)
|
pubkey, keys, DVMConfig.RELAY_LIST)
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ async def get_following(pks, max_time_request=10, newer_than_time=None, dvm_conf
|
|||||||
|
|
||||||
await cli.connect()
|
await cli.connect()
|
||||||
|
|
||||||
events = await cli.fetch_events([filter], relay_timeout)
|
events = await cli.fetch_events(filter, relay_timeout)
|
||||||
|
|
||||||
for relay in dvm_config.SYNC_DB_RELAY_LIST:
|
for relay in dvm_config.SYNC_DB_RELAY_LIST:
|
||||||
await cli.force_remove_relay(relay)
|
await cli.force_remove_relay(relay)
|
||||||
@ -596,7 +596,7 @@ async def get_metadata(npub):
|
|||||||
|
|
||||||
profile_filter = Filter().kind(Kind(0)).author(pk).limit(1)
|
profile_filter = Filter().kind(Kind(0)).author(pk).limit(1)
|
||||||
|
|
||||||
events_struct = await client.fetch_events([profile_filter], relay_timeout)
|
events_struct = await client.fetch_events(profile_filter, relay_timeout)
|
||||||
events = events_struct.to_vec()
|
events = events_struct.to_vec()
|
||||||
if len(events) > 0:
|
if len(events) > 0:
|
||||||
try:
|
try:
|
||||||
|
2
setup.py
2
setup.py
@ -14,7 +14,7 @@ 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.38.0",
|
install_requires=["nostr-sdk==0.39.0",
|
||||||
"bech32==1.2.0",
|
"bech32==1.2.0",
|
||||||
"pycryptodome==3.20.0",
|
"pycryptodome==3.20.0",
|
||||||
"yt-dlp==2024.11.04",
|
"yt-dlp==2024.11.04",
|
||||||
|
@ -70,18 +70,14 @@ def playground():
|
|||||||
bot_config.SUPPORTED_DVMS.append(translator) # We add translator to the bot
|
bot_config.SUPPORTED_DVMS.append(translator) # We add translator to the bot
|
||||||
framework.add(translator)
|
framework.add(translator)
|
||||||
|
|
||||||
|
|
||||||
framework.run()
|
|
||||||
|
|
||||||
admin_config = AdminConfig()
|
admin_config = AdminConfig()
|
||||||
admin_config.REBROADCAST_NIP65_RELAY_LIST = True
|
admin_config.REBROADCAST_NIP65_RELAY_LIST = True
|
||||||
admin_config.UPDATE_PROFILE = True
|
admin_config.UPDATE_PROFILE = True
|
||||||
x = threading.Thread(target=Bot, args=([bot_config, admin_config]))
|
x = threading.Thread(target=Bot, args=([bot_config, admin_config]))
|
||||||
x.start()
|
x.start()
|
||||||
|
|
||||||
# Keep the main function alive for libraries that require it, like openai
|
|
||||||
# keep_alive()
|
|
||||||
|
|
||||||
|
framework.run()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ async def reconcile_db():
|
|||||||
async def do_some_work():
|
async def do_some_work():
|
||||||
database = NostrDatabase.lmdb("nostr.db")
|
database = NostrDatabase.lmdb("nostr.db")
|
||||||
f = Filter().author(keys.public_key()).limit(10)
|
f = Filter().author(keys.public_key()).limit(10)
|
||||||
events = await database.query([f])
|
events = await database.query(f)
|
||||||
|
|
||||||
for event in events.to_vec():
|
for event in events.to_vec():
|
||||||
print(event.as_json())
|
print(event.as_json())
|
||||||
|
@ -24,9 +24,9 @@ async def main():
|
|||||||
ltags = ["#e", "pub.ditto.trends"]
|
ltags = ["#e", "pub.ditto.trends"]
|
||||||
itags = [str(SingleLetterTag.lowercase(Alphabet.E))]
|
itags = [str(SingleLetterTag.lowercase(Alphabet.E))]
|
||||||
authors = [PublicKey.parse("db0e60d10b9555a39050c258d460c5c461f6d18f467aa9f62de1a728b8a891a4")]
|
authors = [PublicKey.parse("db0e60d10b9555a39050c258d460c5c461f6d18f467aa9f62de1a728b8a891a4")]
|
||||||
notes_filter = Filter().authors(authors).custom_tag(SingleLetterTag.lowercase(Alphabet.L), ltags)
|
notes_filter = Filter().authors(authors).custom_tags(SingleLetterTag.lowercase(Alphabet.L), ltags)
|
||||||
|
|
||||||
events_struct = await cli.fetch_events([notes_filter], relay_timeout_long)
|
events_struct = await cli.fetch_events(notes_filter, relay_timeout_long)
|
||||||
events = events_struct.to_vec()
|
events = events_struct.to_vec()
|
||||||
|
|
||||||
|
|
||||||
|
@ -163,7 +163,7 @@ def playground(announce=False):
|
|||||||
print(options["request_event_author"])
|
print(options["request_event_author"])
|
||||||
filterauth = Filter().kind(definitions.EventDefinitions.KIND_NOTE).author(author).limit(100)
|
filterauth = Filter().kind(definitions.EventDefinitions.KIND_NOTE).author(author).limit(100)
|
||||||
|
|
||||||
event_struct = await cli.fetch_events([filterauth], relay_timeout)
|
event_struct = await cli.fetch_events(filterauth, relay_timeout)
|
||||||
text = ""
|
text = ""
|
||||||
|
|
||||||
if len(event_struct.to_vec()) == 0:
|
if len(event_struct.to_vec()) == 0:
|
||||||
@ -204,11 +204,16 @@ def playground(announce=False):
|
|||||||
if len(keywords) == 0:
|
if len(keywords) == 0:
|
||||||
return json.dumps([])
|
return json.dumps([])
|
||||||
|
|
||||||
filters = []
|
filter = Filter().kind(definitions.EventDefinitions.KIND_NOTE).since(since).search(
|
||||||
for keyword in keywords:
|
" " + keywords[0].lstrip().rstrip() + " ")
|
||||||
filters.append(Filter().kind(definitions.EventDefinitions.KIND_NOTE).since(since).search(" " + keyword.lstrip().rstrip() + " "))
|
events = await database.query(filter)
|
||||||
|
|
||||||
|
for keyword in keywords[1:]:
|
||||||
|
filter = Filter().kind(definitions.EventDefinitions.KIND_NOTE).since(since).search(" " + keyword.lstrip().rstrip() + " ")
|
||||||
|
evts = await database.query(filter)
|
||||||
|
events.merge(evts)
|
||||||
|
|
||||||
|
|
||||||
events = await database.query(filters)
|
|
||||||
|
|
||||||
print("[" + dvm.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events")
|
print("[" + dvm.dvm_config.NIP89.NAME + "] Considering " + str(len(events.to_vec())) + " Events")
|
||||||
ns.finallist = {}
|
ns.finallist = {}
|
||||||
@ -221,7 +226,7 @@ def playground(announce=False):
|
|||||||
[definitions.EventDefinitions.KIND_ZAP, definitions.EventDefinitions.KIND_REACTION,
|
[definitions.EventDefinitions.KIND_ZAP, definitions.EventDefinitions.KIND_REACTION,
|
||||||
definitions.EventDefinitions.KIND_REPOST,
|
definitions.EventDefinitions.KIND_REPOST,
|
||||||
definitions.EventDefinitions.KIND_NOTE]).event(event.id()).since(since)
|
definitions.EventDefinitions.KIND_NOTE]).event(event.id()).since(since)
|
||||||
reactions = await database.query([filt])
|
reactions = await database.query(filt)
|
||||||
if len(reactions.to_vec()) >= 1:
|
if len(reactions.to_vec()) >= 1:
|
||||||
ns.finallist[event.id().to_hex()] = len(reactions.to_vec())
|
ns.finallist[event.id().to_hex()] = len(reactions.to_vec())
|
||||||
|
|
||||||
|
@ -27,14 +27,15 @@ async def test():
|
|||||||
|
|
||||||
now = Timestamp.now()
|
now = Timestamp.now()
|
||||||
|
|
||||||
nip04_filter = Filter().pubkey(pk).kind(Kind.from_enum(KindEnum.ENCRYPTED_DIRECT_MESSAGE())).since(now)
|
nip04_filter = Filter().pubkey(pk).kind(Kind(KindEnum.ENCRYPTED_DIRECT_MESSAGE())).since(now)
|
||||||
nip59_filter = Filter().pubkey(pk).kind(Kind.from_enum(KindEnum.GIFT_WRAP())).limit(0)
|
nip59_filter = Filter().pubkey(pk).kind(Kind((KindEnum.GIFT_WRAP()))).limit(0)
|
||||||
await client.subscribe([nip04_filter, nip59_filter], None)
|
await client.subscribe(nip04_filter)
|
||||||
|
await client.subscribe(nip59_filter)
|
||||||
|
|
||||||
class NotificationHandler(HandleNotification):
|
class NotificationHandler(HandleNotification):
|
||||||
async def handle(self, relay_url, subscription_id, event: Event):
|
async def handle(self, relay_url, subscription_id, event: Event):
|
||||||
print(f"Received new event from {relay_url}: {event.as_json()}")
|
print(f"Received new event from {relay_url}: {event.as_json()}")
|
||||||
if event.kind().as_enum() == KindEnum.ENCRYPTED_DIRECT_MESSAGE():
|
if event.kind().as_u16() == KindEnum.ENCRYPTED_DIRECT_MESSAGE():
|
||||||
print("Decrypting NIP04 event")
|
print("Decrypting NIP04 event")
|
||||||
try:
|
try:
|
||||||
msg = nip04_decrypt(sk, event.author(), event.content())
|
msg = nip04_decrypt(sk, event.author(), event.content())
|
||||||
|
@ -414,7 +414,8 @@ async def nostr_client():
|
|||||||
if kind not in kinds:
|
if kind not in kinds:
|
||||||
kinds.append(Kind(kind))
|
kinds.append(Kind(kind))
|
||||||
dvm_filter = (Filter().kinds(kinds).since(Timestamp.now()).pubkey(pk))
|
dvm_filter = (Filter().kinds(kinds).since(Timestamp.now()).pubkey(pk))
|
||||||
await client.subscribe([dm_zap_filter, dvm_filter], None)
|
await client.subscribe(dm_zap_filter, None)
|
||||||
|
await client.subscribe(dvm_filter, None)
|
||||||
|
|
||||||
# await nostr_client_test_translation("This is the result of the DVM in spanish", "text", "es", 20, 20)
|
# await nostr_client_test_translation("This is the result of the DVM in spanish", "text", "es", 20, 20)
|
||||||
# await nostr_client_test_translation("note1p8cx2dz5ss5gnk7c59zjydcncx6a754c0hsyakjvnw8xwlm5hymsnc23rs", "event", "es", 20,20)
|
# await nostr_client_test_translation("note1p8cx2dz5ss5gnk7c59zjydcncx6a754c0hsyakjvnw8xwlm5hymsnc23rs", "event", "es", 20,20)
|
||||||
|
@ -53,7 +53,7 @@ async def test_referred_events(client, event_id, kinds=None):
|
|||||||
else:
|
else:
|
||||||
job_id_filter = Filter().event(EventId.parse(event_id))
|
job_id_filter = Filter().event(EventId.parse(event_id))
|
||||||
|
|
||||||
event_struct = await client.fetch_events([job_id_filter], relay_timeout)
|
event_struct = await client.fetch_events(job_id_filter, relay_timeout)
|
||||||
events = event_struct.to_vec()
|
events = event_struct.to_vec()
|
||||||
|
|
||||||
if len(events) > 0:
|
if len(events) > 0:
|
||||||
@ -129,7 +129,7 @@ async def test_search_by_user_since_days(client, pubkey, days, prompt):
|
|||||||
since = Timestamp.from_secs(dif)
|
since = Timestamp.from_secs(dif)
|
||||||
|
|
||||||
filterts = Filter().search(prompt).author(pubkey).kinds([Kind(1)]).since(since)
|
filterts = Filter().search(prompt).author(pubkey).kinds([Kind(1)]).since(since)
|
||||||
event_struct = await client.fetch_events([filterts], relay_timeout)
|
event_struct = await client.fetch_events(filterts, relay_timeout)
|
||||||
events = event_struct.to_vec()
|
events = event_struct.to_vec()
|
||||||
|
|
||||||
if len(events) > 0:
|
if len(events) > 0:
|
||||||
|
@ -32,7 +32,7 @@ async def getmetadata(npub):
|
|||||||
await client.connect()
|
await client.connect()
|
||||||
|
|
||||||
profile_filter = Filter().kind(Kind(0)).author(pk).limit(1)
|
profile_filter = Filter().kind(Kind(0)).author(pk).limit(1)
|
||||||
event_struct = await client.fetch_events([profile_filter], relay_timeout)
|
event_struct = await client.fetch_events(profile_filter, relay_timeout)
|
||||||
events = event_struct.to_vec()
|
events = event_struct.to_vec()
|
||||||
if len(events) > 0:
|
if len(events) > 0:
|
||||||
try:
|
try:
|
||||||
@ -82,7 +82,7 @@ async def analyse_users(user_ids=None):
|
|||||||
|
|
||||||
database = NostrDatabase.lmdb("db/nostr_followlists.db")
|
database = NostrDatabase.lmdb("db/nostr_followlists.db")
|
||||||
followers_filter = Filter().authors(user_keys).kind(Kind(3))
|
followers_filter = Filter().authors(user_keys).kind(Kind(3))
|
||||||
followers = await database.query([followers_filter])
|
followers = await database.query(followers_filter)
|
||||||
allfriends = []
|
allfriends = []
|
||||||
if len(followers.to_vec()) > 0:
|
if len(followers.to_vec()) > 0:
|
||||||
for follower in followers.to_vec():
|
for follower in followers.to_vec():
|
||||||
|
@ -72,7 +72,11 @@ async def nostr_client(target_dvm_npub):
|
|||||||
kinds.append(Kind(kind))
|
kinds.append(Kind(kind))
|
||||||
|
|
||||||
dvm_filter = (Filter().kinds(kinds).since(Timestamp.now()).pubkey(pk))
|
dvm_filter = (Filter().kinds(kinds).since(Timestamp.now()).pubkey(pk))
|
||||||
await client.subscribe([dm_zap_filter, dvm_filter], None)
|
await client.subscribe(dm_zap_filter, None)
|
||||||
|
await client.subscribe(dvm_filter, None)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# This will send a request to the DVM
|
# This will send a request to the DVM
|
||||||
await nostr_client_generic_test(target_dvm_npub)
|
await nostr_client_generic_test(target_dvm_npub)
|
||||||
|
@ -58,7 +58,7 @@ async def nostr_client(target_dvm_npub):
|
|||||||
kinds.append(Kind(kind))
|
kinds.append(Kind(kind))
|
||||||
|
|
||||||
dvm_filter = (Filter().kinds(kinds).since(Timestamp.now()).pubkey(pk))
|
dvm_filter = (Filter().kinds(kinds).since(Timestamp.now()).pubkey(pk))
|
||||||
await client.subscribe([dvm_filter], None)
|
await client.subscribe(dvm_filter, None)
|
||||||
|
|
||||||
# This will send a request to the DVM
|
# This will send a request to the DVM
|
||||||
await nostr_client_generic_test(target_dvm_npub)
|
await nostr_client_generic_test(target_dvm_npub)
|
||||||
|
@ -25,7 +25,7 @@ async def delete_nip_89(private_key, relay_list, pow=True):
|
|||||||
await client.add_relay(relay)
|
await client.add_relay(relay)
|
||||||
await client.connect()
|
await client.connect()
|
||||||
filter = Filter().kind(EventDefinitions.KIND_ANNOUNCEMENT).author(keys.public_key())
|
filter = Filter().kind(EventDefinitions.KIND_ANNOUNCEMENT).author(keys.public_key())
|
||||||
events = await client.fetch_events([filter], timedelta(seconds=5))
|
events = await client.fetch_events(filter, timedelta(seconds=5))
|
||||||
|
|
||||||
if len(events.to_vec()) == 0:
|
if len(events.to_vec()) == 0:
|
||||||
print("Couldn't find note on relays. Seems they are gone.")
|
print("Couldn't find note on relays. Seems they are gone.")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user