2021-05-05 09:50:54 +01:00
|
|
|
import pickle
|
|
|
|
from os import path, remove
|
|
|
|
from datetime import datetime, timedelta
|
2020-12-14 06:28:23 +00:00
|
|
|
from requests import post as r_post
|
|
|
|
from json import dumps
|
|
|
|
from flask import session, current_app
|
2021-04-30 04:55:34 +01:00
|
|
|
from suchwow.models import Moderator, Post
|
|
|
|
from suchwow.wownero import Wallet
|
2020-12-14 06:28:23 +00:00
|
|
|
from suchwow import config
|
2020-07-29 01:24:59 +01:00
|
|
|
|
|
|
|
|
|
|
|
def allowed_file(filename):
|
|
|
|
return "." in filename and \
|
2020-12-14 06:28:23 +00:00
|
|
|
filename.rsplit(".", 1)[1].lower() in config.ALLOWED_EXTENSIONS
|
2020-12-04 07:17:58 +00:00
|
|
|
|
|
|
|
def is_moderator(username):
|
|
|
|
m = Moderator.filter(username=username)
|
|
|
|
if m:
|
|
|
|
return True
|
|
|
|
else:
|
|
|
|
return False
|
|
|
|
|
|
|
|
def get_session_user():
|
|
|
|
if "auth" not in session or not session["auth"]:
|
|
|
|
return None
|
|
|
|
return session["auth"]["preferred_username"]
|
2020-12-14 06:28:23 +00:00
|
|
|
|
|
|
|
def post_webhook(msg):
|
|
|
|
try:
|
|
|
|
if current_app.config["DEBUG"]:
|
|
|
|
msg = "[DEBUG] " + msg
|
|
|
|
data = {
|
|
|
|
"text": msg,
|
|
|
|
"channel": config.MM_CHANNEL,
|
|
|
|
"username": config.MM_USERNAME,
|
|
|
|
"icon_url": config.MM_ICON
|
|
|
|
}
|
|
|
|
res = r_post(config.MM_ENDPOINT, data=dumps(data))
|
|
|
|
res.raise_for_status()
|
|
|
|
return True
|
|
|
|
except:
|
|
|
|
return False
|
2021-04-30 04:55:34 +01:00
|
|
|
|
|
|
|
def get_activity():
|
|
|
|
posts = Post.select()
|
|
|
|
w = Wallet()
|
|
|
|
data = {}
|
|
|
|
for p in posts:
|
|
|
|
data[p.timestamp] = {'type': 'post', 'post': p}
|
|
|
|
for tx in w.incoming_transfers(p.account_index):
|
|
|
|
if 'timestamp' in tx:
|
|
|
|
data[tx['timestamp']] = {'type': 'tx', 'post': p}
|
|
|
|
|
|
|
|
dates = sorted(data, reverse=True)
|
|
|
|
new_data = []
|
|
|
|
for d in dates:
|
|
|
|
new_data.append(data[d]['post'])
|
|
|
|
|
|
|
|
return new_data[0:20]
|
2021-05-05 09:50:54 +01:00
|
|
|
|
|
|
|
|
|
|
|
# Use hacky filesystem cache since i dont feel like shipping redis
|
|
|
|
def rw_cache(key_name, data=None):
|
|
|
|
pickle_file = path.join(config.DATA_FOLDER, f'{key_name}.pkl')
|
|
|
|
try:
|
|
|
|
if path.isfile(pickle_file):
|
|
|
|
mtime_ts = path.getmtime(pickle_file)
|
|
|
|
mtime = datetime.fromtimestamp(mtime_ts)
|
|
|
|
now = datetime.now()
|
|
|
|
diff = now - mtime
|
|
|
|
# If pickled data file is less than an hour old, load it and render page
|
|
|
|
# Otherwise, determine balances, build json, store pickled data, and render page
|
|
|
|
if diff.seconds < 3600:
|
|
|
|
print(f'unpickling {key_name}')
|
|
|
|
with open(pickle_file, 'rb') as f:
|
|
|
|
pickled_data = pickle.load(f)
|
|
|
|
return pickled_data
|
|
|
|
else:
|
|
|
|
if data:
|
|
|
|
print(f'pickling {key_name}')
|
|
|
|
with open(pickle_file, 'wb') as f:
|
|
|
|
f.write(pickle.dumps(data))
|
|
|
|
return data
|
|
|
|
else:
|
|
|
|
return None
|
|
|
|
else:
|
|
|
|
if data:
|
|
|
|
print(f'pickling {key_name}')
|
|
|
|
with open(pickle_file, 'wb') as f:
|
|
|
|
f.write(pickle.dumps(data))
|
|
|
|
return data
|
|
|
|
else:
|
|
|
|
return None
|
|
|
|
except:
|
|
|
|
return None
|