mirror of
https://github.com/believethehype/nostrdvm.git
synced 2025-11-20 11:46:30 +01:00
refactor db access
This commit is contained in:
24
dvm.py
24
dvm.py
@@ -3,8 +3,6 @@ from nostr_sdk import PublicKey, Keys, Client, Tag, Event, EventBuilder, Filter,
|
|||||||
import time
|
import time
|
||||||
import emoji
|
import emoji
|
||||||
|
|
||||||
from tasks.textextractionPDF import TextExtractionPDF
|
|
||||||
from tasks.translation import Translation
|
|
||||||
from utils.definitions import EventDefinitions, DVMConfig, RequiredJobToWatch, JobToWatch
|
from utils.definitions import EventDefinitions, DVMConfig, RequiredJobToWatch, JobToWatch
|
||||||
from utils.admin_utils import admin_make_database_updates
|
from utils.admin_utils import admin_make_database_updates
|
||||||
from utils.backend_utils import get_amount_per_task, check_task_is_supported, get_task
|
from utils.backend_utils import get_amount_per_task, check_task_is_supported, get_task
|
||||||
@@ -62,15 +60,12 @@ def dvm(config):
|
|||||||
|
|
||||||
def handle_nip90_job_event(event, dvm_config):
|
def handle_nip90_job_event(event, dvm_config):
|
||||||
user = get_or_add_user(event.pubkey().to_hex())
|
user = get_or_add_user(event.pubkey().to_hex())
|
||||||
is_whitelisted = user[2]
|
|
||||||
is_blacklisted = user[3]
|
|
||||||
|
|
||||||
task_supported, task, duration = check_task_is_supported(event, client=client,
|
task_supported, task, duration = check_task_is_supported(event, client=client,
|
||||||
get_duration=(not is_whitelisted),
|
get_duration=(not user.iswhitelisted),
|
||||||
config=dvm_config)
|
config=dvm_config)
|
||||||
print(task)
|
print(task)
|
||||||
|
|
||||||
if is_blacklisted:
|
if user.isblacklisted:
|
||||||
send_job_status_reaction(event, "error", client=client, config=dvm_config)
|
send_job_status_reaction(event, "error", client=client, config=dvm_config)
|
||||||
print("[Nostr] Request by blacklisted user, skipped")
|
print("[Nostr] Request by blacklisted user, skipped")
|
||||||
|
|
||||||
@@ -86,7 +81,7 @@ def dvm(config):
|
|||||||
if dvm.TASK == task and dvm.COST == 0:
|
if dvm.TASK == task and dvm.COST == 0:
|
||||||
task_is_free = True
|
task_is_free = True
|
||||||
|
|
||||||
if is_whitelisted or task_is_free:
|
if user.iswhitelisted or task_is_free:
|
||||||
print("[Nostr] Free or Whitelisted for task " + task + ". Starting processing..")
|
print("[Nostr] Free or Whitelisted for task " + task + ". Starting processing..")
|
||||||
send_job_status_reaction(event, "processing", True, 0, client=client, config=dvm_config)
|
send_job_status_reaction(event, "processing", True, 0, client=client, config=dvm_config)
|
||||||
do_work(event, is_from_bot=False)
|
do_work(event, is_from_bot=False)
|
||||||
@@ -151,7 +146,7 @@ def dvm(config):
|
|||||||
if zapped_event.kind() == EventDefinitions.KIND_FEEDBACK: # if a reaction by us got zapped
|
if zapped_event.kind() == EventDefinitions.KIND_FEEDBACK: # if a reaction by us got zapped
|
||||||
if not dvm_config.IS_BOT:
|
if not dvm_config.IS_BOT:
|
||||||
print("Zap received for NIP90 task: " + str(invoice_amount) + " Sats from " + str(
|
print("Zap received for NIP90 task: " + str(invoice_amount) + " Sats from " + str(
|
||||||
user[6]))
|
user.name))
|
||||||
amount = 0
|
amount = 0
|
||||||
job_event = None
|
job_event = None
|
||||||
for tag in zapped_event.tags():
|
for tag in zapped_event.tags():
|
||||||
@@ -195,13 +190,13 @@ def dvm(config):
|
|||||||
print("Someone zapped the result of an exisiting Task. Nice")
|
print("Someone zapped the result of an exisiting Task. Nice")
|
||||||
elif not anon and not dvm_config.PASSIVE_MODE:
|
elif not anon and not dvm_config.PASSIVE_MODE:
|
||||||
print("Note Zap received for Bot balance: " + str(invoice_amount) + " Sats from " + str(
|
print("Note Zap received for Bot balance: " + str(invoice_amount) + " Sats from " + str(
|
||||||
user[6]))
|
user.name))
|
||||||
update_user_balance(sender, invoice_amount, config=dvm_config)
|
update_user_balance(sender, invoice_amount, config=dvm_config)
|
||||||
|
|
||||||
# a regular note
|
# a regular note
|
||||||
elif not anon and not dvm_config.PASSIVE_MODE:
|
elif not anon and not dvm_config.PASSIVE_MODE:
|
||||||
print("Profile Zap received for Bot balance: " + str(invoice_amount) + " Sats from " + str(
|
print("Profile Zap received for Bot balance: " + str(invoice_amount) + " Sats from " + str(
|
||||||
user[6]))
|
user.name))
|
||||||
update_user_balance(sender, invoice_amount, config=dvm_config)
|
update_user_balance(sender, invoice_amount, config=dvm_config)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -410,10 +405,9 @@ def dvm(config):
|
|||||||
task = tag.as_vec()[1]
|
task = tag.as_vec()[1]
|
||||||
|
|
||||||
user = get_from_sql_table(sender)
|
user = get_from_sql_table(sender)
|
||||||
is_whitelisted = user[2]
|
if not user.iswhitelisted:
|
||||||
if not is_whitelisted:
|
amount = int(user.balance) + get_amount_per_task(task, dvm_config)
|
||||||
amount = int(user[1]) + get_amount_per_task(task, dvm_config)
|
update_sql_table(sender, amount, user.iswhitelisted, user.isblacklisted, user.nip05, user.lud16, user.name,
|
||||||
update_sql_table(sender, amount, user[2], user[3], user[4], user[5], user[6],
|
|
||||||
Timestamp.now().as_secs())
|
Timestamp.now().as_secs())
|
||||||
message = "There was the following error : " + content + ". Credits have been reimbursed"
|
message = "There was the following error : " + content + ". Credits have been reimbursed"
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ class Translation(DVMTaskInterface):
|
|||||||
text_part = options["text"][step:length]
|
text_part = options["text"][step:length]
|
||||||
try:
|
try:
|
||||||
translated_text_part = str(gtranslate.translate(text_part, options["translation_lang"]))
|
translated_text_part = str(gtranslate.translate(text_part, options["translation_lang"]))
|
||||||
print("Translated Text part:\n\n " + translated_text_part)
|
print("Translated Text part:\n " + translated_text_part)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise Exception(e)
|
raise Exception(e)
|
||||||
|
|
||||||
|
|||||||
@@ -30,25 +30,24 @@ def admin_make_database_updates(config=None, client=None):
|
|||||||
|
|
||||||
if whitelistuser:
|
if whitelistuser:
|
||||||
user = get_or_add_user(publickey)
|
user = get_or_add_user(publickey)
|
||||||
update_sql_table(user[0], user[1], True, False, user[4], user[5], user[6], user[7])
|
update_sql_table(user.npub, user.balance, True, False, user.nip05, user.lud16, user.name, user.lastactive)
|
||||||
user = get_from_sql_table(publickey)
|
user = get_from_sql_table(publickey)
|
||||||
print(str(user[6]) + " is whitelisted: " + str(user[2]))
|
print(str(user.name) + " is whitelisted: " + str(user.iswhitelisted))
|
||||||
|
|
||||||
if unwhitelistuser:
|
if unwhitelistuser:
|
||||||
user = get_from_sql_table(publickey)
|
user = get_from_sql_table(publickey)
|
||||||
update_sql_table(user[0], user[1], False, False, user[4], user[5], user[6], user[7])
|
update_sql_table(user.npub, user.balance, False, False, user.nip05, user.lud16, user.name, user.lastactive)
|
||||||
|
|
||||||
if blacklistuser:
|
if blacklistuser:
|
||||||
user = get_from_sql_table(publickey)
|
user = get_from_sql_table(publickey)
|
||||||
update_sql_table(user[0], user[1], False, True, user[4], user[5], user[6], user[7])
|
update_sql_table(user.npub, user.balance, False, True, user.nip05, user.lud16, user.name, user.lastactive)
|
||||||
|
|
||||||
if addbalance:
|
if addbalance:
|
||||||
user = get_from_sql_table(publickey)
|
user = get_from_sql_table(publickey)
|
||||||
update_sql_table(user[0], (int(user[1]) + additional_balance), user[2], user[3], user[4], user[5], user[6],
|
update_sql_table(user[0], (int(user.balance) + additional_balance), user.iswhitelisted, user.isblacklisted, user.nip05, user.lud16, user.name, user.lastactive)
|
||||||
user[7])
|
|
||||||
time.sleep(1.0)
|
time.sleep(1.0)
|
||||||
message = str(additional_balance) + " Sats have been added to your balance. Your new balance is " + str(
|
message = str(additional_balance) + " Sats have been added to your balance. Your new balance is " + str(
|
||||||
(int(user[1]) + additional_balance)) + " Sats."
|
(int(user.balance) + additional_balance)) + " Sats."
|
||||||
keys = Keys.from_sk_str(config.PRIVATE_KEY)
|
keys = Keys.from_sk_str(config.PRIVATE_KEY)
|
||||||
evt = EventBuilder.new_encrypted_direct_msg(keys, PublicKey.from_hex(publickey), message,
|
evt = EventBuilder.new_encrypted_direct_msg(keys, PublicKey.from_hex(publickey), message,
|
||||||
None).to_event(keys)
|
None).to_event(keys)
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import sqlite3
|
|||||||
import time
|
import time
|
||||||
|
|
||||||
from _sqlite3 import Error
|
from _sqlite3 import Error
|
||||||
|
from dataclasses import dataclass
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from logging import Filter
|
from logging import Filter
|
||||||
|
|
||||||
@@ -13,6 +14,19 @@ from utils import env
|
|||||||
from utils.definitions import NEW_USER_BALANCE
|
from utils.definitions import NEW_USER_BALANCE
|
||||||
from utils.nostr_utils import send_event
|
from utils.nostr_utils import send_event
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class User:
|
||||||
|
npub: str
|
||||||
|
balance: int
|
||||||
|
iswhitelisted: bool
|
||||||
|
isblacklisted: bool
|
||||||
|
name: str
|
||||||
|
nip05: str
|
||||||
|
lud16: str
|
||||||
|
lastactive: int
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def create_sql_table():
|
def create_sql_table():
|
||||||
try:
|
try:
|
||||||
con = sqlite3.connect(os.getenv(env.USER_DB_PATH))
|
con = sqlite3.connect(os.getenv(env.USER_DB_PATH))
|
||||||
@@ -84,7 +98,17 @@ def get_from_sql_table(npub):
|
|||||||
cur.execute("SELECT * FROM users WHERE npub=?", (npub,))
|
cur.execute("SELECT * FROM users WHERE npub=?", (npub,))
|
||||||
row = cur.fetchone()
|
row = cur.fetchone()
|
||||||
con.close()
|
con.close()
|
||||||
return row
|
user = User
|
||||||
|
user.npub = row[0]
|
||||||
|
user.balance = row[1]
|
||||||
|
user.iswhitelisted = row[2]
|
||||||
|
user.isblacklisted = row[3]
|
||||||
|
user.nip05 = row[4]
|
||||||
|
user.lud16 = row[5]
|
||||||
|
user.name = row[6]
|
||||||
|
user.lastactive = row[7]
|
||||||
|
|
||||||
|
return user
|
||||||
|
|
||||||
except Error as e:
|
except Error as e:
|
||||||
print(e)
|
print(e)
|
||||||
@@ -138,21 +162,19 @@ def update_user_balance(sender, sats, config=None):
|
|||||||
else:
|
else:
|
||||||
user = get_from_sql_table(sender)
|
user = get_from_sql_table(sender)
|
||||||
print(str(sats))
|
print(str(sats))
|
||||||
nip05 =user[4]
|
|
||||||
lud16 = user[5]
|
|
||||||
name = user[6]
|
|
||||||
|
|
||||||
if nip05 is None:
|
|
||||||
nip05 = ""
|
|
||||||
if lud16 is None:
|
|
||||||
lud16 = ""
|
|
||||||
if name is None:
|
|
||||||
name = ""
|
|
||||||
|
|
||||||
new_balance = int(user[1]) + int(sats)
|
if user.nip05 is None:
|
||||||
update_sql_table(sender, new_balance, user[2], user[3], nip05, lud16, name,
|
user.nip05 = ""
|
||||||
|
if user.lud16 is None:
|
||||||
|
user.lud16 = ""
|
||||||
|
if user.name is None:
|
||||||
|
user.name = ""
|
||||||
|
|
||||||
|
new_balance = int(user.balance) + int(sats)
|
||||||
|
update_sql_table(sender, new_balance, user.iswhitelisted, user.isblacklisted, user.nip05, user.lud16, user.name,
|
||||||
Timestamp.now().as_secs())
|
Timestamp.now().as_secs())
|
||||||
print("UPDATE USER BALANCE: " + str(name) + " Zap amount: " + str(sats) + " Sats.")
|
print("UPDATE USER BALANCE: " + str(user.name) + " Zap amount: " + str(sats) + " Sats.")
|
||||||
|
|
||||||
|
|
||||||
if config is not None:
|
if config is not None:
|
||||||
@@ -180,9 +202,6 @@ def get_or_add_user(sender):
|
|||||||
|
|
||||||
def update_user_metadata(sender, client):
|
def update_user_metadata(sender, client):
|
||||||
user = get_from_sql_table(sender)
|
user = get_from_sql_table(sender)
|
||||||
name = user[6]
|
|
||||||
lud16 = user[5]
|
|
||||||
nip05 = user[4]
|
|
||||||
try:
|
try:
|
||||||
profile_filter = Filter().kind(0).author(sender).limit(1)
|
profile_filter = Filter().kind(0).author(sender).limit(1)
|
||||||
events = client.get_events_of([profile_filter], timedelta(seconds=3))
|
events = client.get_events_of([profile_filter], timedelta(seconds=3))
|
||||||
@@ -191,12 +210,13 @@ def update_user_metadata(sender, client):
|
|||||||
metadata = Metadata.from_json(ev.content())
|
metadata = Metadata.from_json(ev.content())
|
||||||
name = metadata.get_display_name()
|
name = metadata.get_display_name()
|
||||||
if str(name) == "" or name is None:
|
if str(name) == "" or name is None:
|
||||||
name = metadata.get_name()
|
user.name = metadata.get_name()
|
||||||
nip05 = metadata.get_nip05()
|
user.nip05 = metadata.get_nip05()
|
||||||
lud16 = metadata.get_lud16()
|
user.lud16 = metadata.get_lud16()
|
||||||
except:
|
except:
|
||||||
print("Couldn't get meta information")
|
print("Couldn't get meta information")
|
||||||
update_sql_table(user[0], user[1], user[2], user[3], nip05, lud16,
|
update_sql_table(user.npub, user.balance, user.iswhitelisted, user.isblacklisted, user.nip05, user.lud16,
|
||||||
name, Timestamp.now().as_secs())
|
user.name, Timestamp.now().as_secs())
|
||||||
user = get_from_sql_table(user[0])
|
user = get_from_sql_table(user.npub)
|
||||||
return user
|
return user
|
||||||
|
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ def get_event_by_id(event_id, client=None, config=None):
|
|||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def get_referenced_event_by_id(event_id, kinds=None, client=None, config=None):
|
def get_referenced_event_by_id(event_id, kinds=None, client=None, config=None):
|
||||||
if kinds is None:
|
if kinds is None:
|
||||||
kinds = []
|
kinds = []
|
||||||
@@ -55,7 +56,8 @@ def get_referenced_event_by_id(event_id, kinds=None, client=None, config=None):
|
|||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def send_event(event, client=None, key=None, config=None):
|
|
||||||
|
def send_event(event, client=None, key=None):
|
||||||
relays = []
|
relays = []
|
||||||
is_new_client = False
|
is_new_client = False
|
||||||
|
|
||||||
@@ -64,21 +66,16 @@ def send_event(event, client=None, key=None, config=None):
|
|||||||
relays = tag.as_vec()[1].split(',')
|
relays = tag.as_vec()[1].split(',')
|
||||||
|
|
||||||
if client is None:
|
if client is None:
|
||||||
print(key.secret_key().to_hex())
|
|
||||||
|
|
||||||
opts = Options().wait_for_send(False).send_timeout(timedelta(seconds=5)).skip_disconnected_relays(True)
|
opts = Options().wait_for_send(False).send_timeout(timedelta(seconds=5)).skip_disconnected_relays(True)
|
||||||
client = Client.with_opts(key, opts)
|
client = Client.with_opts(key, opts)
|
||||||
for relay in RELAY_LIST:
|
for relay in RELAY_LIST:
|
||||||
client.add_relay(relay)
|
client.add_relay(relay)
|
||||||
|
|
||||||
client.connect()
|
client.connect()
|
||||||
is_new_client = True
|
is_new_client = True
|
||||||
|
|
||||||
for relay in relays:
|
for relay in relays:
|
||||||
if relay not in RELAY_LIST:
|
if relay not in RELAY_LIST:
|
||||||
client.add_relay(relay)
|
client.add_relay(relay)
|
||||||
client.connect()
|
|
||||||
|
|
||||||
|
|
||||||
event_id = client.send_event(event)
|
event_id = client.send_event(event)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user