refactor db access

This commit is contained in:
Believethehype
2023-11-19 21:14:25 +01:00
parent ecf1ab3d2e
commit b201384c02
5 changed files with 62 additions and 52 deletions

24
dvm.py
View File

@@ -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:

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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)