async def get_user_object(name): global user, posts, result, comments, cache replit = repltalk.Client() if(name in cache.keys()): cached = cache.get(name) print('used cache') user = cached.get('user') posts = cached.get('posts') comments = cached.get('comments') else: try: user = await replit.get_user(name) print('requested info') except Exception as e: user = None ex_type, ex, tb = sys.exc_info() log_error(e, ex_type, ex, tb, cur_time) try: posts = await user.get_posts(limit=5, order='new') except Exception as e: posts = None ex_type, ex, tb = sys.exc_info() log_error(e, ex_type, ex, tb, cur_time) try: comments = await user.get_comments(limit=5, order='new') except Exception as e: comments = None ex_type, ex, tb = sys.exc_info() log_error(e, ex_type, ex, tb, cur_time) temp = {'user':user,'posts':posts,'comments':comments} cache[name]=temp threading.Thread(None,remove_key,args=(name,0)).start()
async def get_post_by_query(query): global posts_res posts_res = [] replit = repltalk.Client() async for post in replit.boards.all.get_posts(sort='top', search=str(query)): posts_res.append(post)
async def replit_bio_get(name=None): if (name == None): exit("ERROR: Please fill out the name parameter!") else: try: client = repltalk.Client() user = await client.get_user(name) return user.bio except: exit(f"ERROR: Cannot load {name}'s bio!")
async def get_user_object(name): global user, posts, result, comments replit = repltalk.Client() try: user = await replit.get_user(name) except Exception as e: user = None ex_type, ex, tb = sys.exc_info() log_error(e, ex_type, ex, tb) try: posts = await user.get_posts(limit=5, order='new') except Exception as e: posts = None ex_type, ex, tb = sys.exc_info() log_error(e, ex_type, ex, tb) try: comments = await user.get_comments(limit=5, order='new') except Exception as e: comments = None ex_type, ex, tb = sys.exc_info() log_error(e, ex_type, ex, tb)
from PIL import Image import cloudinary import cloudinary.api import cloudinary.uploader from pymongo import MongoClient from flask import Flask from flask import abort from flask import request from flask import redirect from flask import render_template client = repltalk.Client() myclient = MongoClient(os.getenv("mongouri")) mydb = myclient["classrooms"] user_db = mydb["users"] classroom_db = mydb["classrooms"] assignment_db = mydb["assignments"] invitelinks_db = mydb["invitelinks"] invitecodes_db = mydb["invitecodes"] cloudinary.config(cloud_name=os.getenv("CLOUDINARY_CLOUD_NAME"), api_key=os.getenv("CLOUDINARY_API_KEY"), api_secret=os.getenv("CLOUDINARY_API_SECRET")) app = Flask(__name__) app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024
async def replit_leaderboard_get(): #try: client = repltalk.Client() leaderboard = await client.get_leaderboard(limit=10) return leaderboard #, sep="\n"
def setUp(self): self.client = repltalk.Client() self.loop = asyncio.get_event_loop() self.run_async = self.loop.run_until_complete
from flask_login import login_user from flask_login import logout_user from flask_login import current_user from flask_login import login_required from .models import User from .models import Project from .forms import NewProject try: db.create_all() except: pass replit = repltalk.Client() @app.route("/") def index(): return flask.render_template("index.html") @app.route("/dashboard") @login_required def dashboard(): return flask.render_template("dashboard.html") @app.route("/project/<pid>") @login_required
async def replit_bio_get(self, name = None): if (name == None): exit("Please fill out the name parameter!") else: try: client = repltalk.Client() user = await client.get_user(name) return user.bio except: exit(f"ERROR: Cannot load {name}'s bio!") def replit_user(): try: owner = os.environ['REPL_OWNER'] return owner except: exit("ERROR: No such replit account exists!") def replit_avatar(name = None): if (name == None): exit("Please fill out the name parameter!") else: try: e = asyncio.run(assets.replit_avatar_get(f"{name}")) return e except: exit(f"ERROR: Cannot find {name}'s avatar!") def replit_bio(name = None): if (name == None): exit("Please fill out the name parameter!") else: try: e = asyncio.run(assets.replit_bio_get(f"{name}")) return e except: exit(f"ERROR: Cannot find {name}'s bio!") def replit_name(name = None): if (name == None): exit("Please fill out the name parameter!") else: try: e = asyncio.run(assets.replit_name_get(f"{name}")) return e except: exit(f"ERROR: Cannot find {name}'s name!") def replit_cycles(name = None): if name == None: exit("ERROR: You didn't fill out the name parameter!") else: try: e = asyncio.run(assets.replit_cycle_get(f"{name}")) return e except: exit("ERROR: Cannot find " + name + "'s cycles!") def replit_langs(name = None, extra = None): sun = 0 if name == None: exit("ERROR: You didn't fill out the name parameter!") else: if (extra == None): pass else: if (extra == "all"): sun = 1 try: link = requests.get('https://replit.com/data/profiles/' +name ) data = link.json() #print(data) els = list(data.items()) all = els[-1] if ("hacker" in all): all = els[-2] if ("isTeam" in all): all = els[-1] all = list(all) stuff = all[1] stuff = str(stuff) stuff = stuff.replace("'", "") stuff = stuff.replace("[", "") stuff = stuff.replace("]", "") stuff = stuff.replace(" ", "") li = list(stuff.split(",")) if (sun == 1): sun = 2 return li, sun return (li) except: exit("ERROR: Cannot find " + name + "'s langs!") def replit_post(name = None):#latest post if name == None: exit("ERROR: You didn't fill out the name parameter!") else: #user = os.environ["REPL_OWNER"] try: post = requests.get("https://replit.com/@"+ name +"?tab=posts")#name soup = BeautifulSoup(post.content, 'html.parser') html1 = soup.find("div", {"class":"jsx-2329710370 board-post-list-item-post-title"}).get_text() return html1 #b = a.replace('</div>','') #return b except: exit("ERROR: Cannot find "+ name+"'s hottest post!") def replit_posts(name = None):#all posts if name == None: exit("ERROR: You didn't fill out the name parameter!") else: try: post = requests.get("https://replit.com/@"+ name +"?tab=posts")#name soup = BeautifulSoup(post.content, 'html.parser') html1 = soup.find_all("div", {"class":"jsx-2329710370 board-post-list-item-post-title"})#.get_text() all_text = [] for i in html1: all_text.append(i.get_text()) return '\n'.join(all_text) except: exit("ERROR: Cannot find "+ name+"'s posts!") def replit_comment(name = None): if name == None: exit("ERROR: You didn't fill out the name parameter!") else: try: post = requests.get("https://replit.com/@" + name + "?tab=comments") soup = BeautifulSoup(post.content, 'html.parser') for data in soup.find("p"): return (data.get_text()) break # keep this here so it prints once except: exit("ERROR: Cannot find "+ name+"'s hottest comment!") def replit_comments(name = None): if name == None: exit("ERROR: You didn't fill out the name parameter!") else: try: post = requests.get("https://replit.com/@" + name + "?tab=comments") soup = BeautifulSoup(post.content, 'html.parser') all_text = [] for data in soup.find_all("p"): all_text.append(data.get_text()) return '\n'.join(all_text) except: exit("ERROR: Cannot find "+name+"'s comments!")
async def get_talk_leaderboard(lim=50): global lboard replit = repltalk.Client() lboard = await replit.get_leaderboard(limit=lim)