mirror of
https://github.com/believethehype/nostrdvm.git
synced 2025-11-20 01:46:27 +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 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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user