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 emoji
from tasks.textextractionPDF import TextExtractionPDF
from tasks.translation import Translation
from utils.definitions import EventDefinitions, DVMConfig, RequiredJobToWatch, JobToWatch
from utils.admin_utils import admin_make_database_updates
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):
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,
get_duration=(not is_whitelisted),
get_duration=(not user.iswhitelisted),
config=dvm_config)
print(task)
if is_blacklisted:
if user.isblacklisted:
send_job_status_reaction(event, "error", client=client, config=dvm_config)
print("[Nostr] Request by blacklisted user, skipped")
@@ -86,7 +81,7 @@ def dvm(config):
if dvm.TASK == task and dvm.COST == 0:
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..")
send_job_status_reaction(event, "processing", True, 0, client=client, config=dvm_config)
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 not dvm_config.IS_BOT:
print("Zap received for NIP90 task: " + str(invoice_amount) + " Sats from " + str(
user[6]))
user.name))
amount = 0
job_event = None
for tag in zapped_event.tags():
@@ -195,13 +190,13 @@ def dvm(config):
print("Someone zapped the result of an exisiting Task. Nice")
elif not anon and not dvm_config.PASSIVE_MODE:
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)
# a regular note
elif not anon and not dvm_config.PASSIVE_MODE:
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)
except Exception as e:
@@ -410,10 +405,9 @@ def dvm(config):
task = tag.as_vec()[1]
user = get_from_sql_table(sender)
is_whitelisted = user[2]
if not is_whitelisted:
amount = int(user[1]) + get_amount_per_task(task, dvm_config)
update_sql_table(sender, amount, user[2], user[3], user[4], user[5], user[6],
if not user.iswhitelisted:
amount = int(user.balance) + get_amount_per_task(task, dvm_config)
update_sql_table(sender, amount, user.iswhitelisted, user.isblacklisted, user.nip05, user.lud16, user.name,
Timestamp.now().as_secs())
message = "There was the following error : " + content + ". Credits have been reimbursed"
else:

View File

@@ -100,7 +100,7 @@ class Translation(DVMTaskInterface):
text_part = options["text"][step:length]
try:
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:
raise Exception(e)

View File

@@ -30,25 +30,24 @@ def admin_make_database_updates(config=None, client=None):
if whitelistuser:
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)
print(str(user[6]) + " is whitelisted: " + str(user[2]))
print(str(user.name) + " is whitelisted: " + str(user.iswhitelisted))
if unwhitelistuser:
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:
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:
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],
user[7])
update_sql_table(user[0], (int(user.balance) + additional_balance), user.iswhitelisted, user.isblacklisted, user.nip05, user.lud16, user.name, user.lastactive)
time.sleep(1.0)
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)
evt = EventBuilder.new_encrypted_direct_msg(keys, PublicKey.from_hex(publickey), message,
None).to_event(keys)

View File

@@ -4,6 +4,7 @@ import sqlite3
import time
from _sqlite3 import Error
from dataclasses import dataclass
from datetime import timedelta
from logging import Filter
@@ -13,6 +14,19 @@ from utils import env
from utils.definitions import NEW_USER_BALANCE
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():
try:
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,))
row = cur.fetchone()
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:
print(e)
@@ -138,21 +162,19 @@ def update_user_balance(sender, sats, config=None):
else:
user = get_from_sql_table(sender)
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)
update_sql_table(sender, new_balance, user[2], user[3], nip05, lud16, name,
if user.nip05 is None:
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())
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:
@@ -180,9 +202,6 @@ def get_or_add_user(sender):
def update_user_metadata(sender, client):
user = get_from_sql_table(sender)
name = user[6]
lud16 = user[5]
nip05 = user[4]
try:
profile_filter = Filter().kind(0).author(sender).limit(1)
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())
name = metadata.get_display_name()
if str(name) == "" or name is None:
name = metadata.get_name()
nip05 = metadata.get_nip05()
lud16 = metadata.get_lud16()
user.name = metadata.get_name()
user.nip05 = metadata.get_nip05()
user.lud16 = metadata.get_lud16()
except:
print("Couldn't get meta information")
update_sql_table(user[0], user[1], user[2], user[3], nip05, lud16,
name, Timestamp.now().as_secs())
user = get_from_sql_table(user[0])
update_sql_table(user.npub, user.balance, user.iswhitelisted, user.isblacklisted, user.nip05, user.lud16,
user.name, Timestamp.now().as_secs())
user = get_from_sql_table(user.npub)
return user

View File

@@ -28,6 +28,7 @@ def get_event_by_id(event_id, client=None, config=None):
else:
return None
def get_referenced_event_by_id(event_id, kinds=None, client=None, config=None):
if kinds is None:
kinds = []
@@ -55,7 +56,8 @@ def get_referenced_event_by_id(event_id, kinds=None, client=None, config=None):
else:
return None
def send_event(event, client=None, key=None, config=None):
def send_event(event, client=None, key=None):
relays = []
is_new_client = False
@@ -64,21 +66,16 @@ def send_event(event, client=None, key=None, config=None):
relays = tag.as_vec()[1].split(',')
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)
client = Client.with_opts(key, opts)
for relay in RELAY_LIST:
client.add_relay(relay)
client.connect()
is_new_client = True
for relay in relays:
if relay not in RELAY_LIST:
client.add_relay(relay)
client.connect()
event_id = client.send_event(event)