import queue from flask import Flask, render_template, request, make_response, flash from flask_socketio import SocketIO #https://pythonprogramminglanguage.com/python-flask-websocket/ import sqlite3 import time import atexit import sys db_path = 'mate.db' conn = sqlite3.connect(db_path, check_same_thread=False) c = conn.cursor() app = Flask(__name__) socketio = SocketIO(app) app.debug = True status = True users = queue.Queue() finished = None def exit_handler(): conn.close() sys.exit("Program sucsesfully exited") #website @app.route("/") def index(): return 'user and tag list

The creator of this website accepts no liability for any linguistic or technical errors!

' @app.route("/list") def list(): c.execute("SELECT * FROM users") users = c.fetchall() text = "" for i in users: text = text + f'

{i[1]}: {i[2]}

Change balance:



' return '
Search for User:


' + text @app.route("/list/user", methods=['GET']) def user_info(): username = request.args.get("user") c.execute("SELECT * FROM users WHERE username = '%s'" % username) user = c.fetchall() if user != []: user = user[0] return f'

{user[1]}: {user[2]}

Change balance:

' else: return "User does not exists" @app.route("/adduser") def new_user(): return render_template("adduser.html") @app.route("/adduser/user", methods=['GET']) def adduser(): user = request.args.get("username") c.execute(f"SELECT * FROM users WHERE username='{str(user)}'") if c.fetchall() == []: c.execute("INSERT or IGNORE INTO users (username, balance) VALUES ('%s', 0)" % user) conn.commit() return 'Added user user and tag list

The creator of this website accepts no liability for any linguistic or technical errors!

' else: return 'User already exists user and tag list

The creator of this website accepts no liability for any linguistic or technical errors!

' @app.route("/change", methods=['GET']) def change(): user_id = int(request.args.get("id")) try: change = int(request.args.get("change")) except ValueError: return '

Please enter a number!

tags and user list' if change < 0: text = "removed from" change = change * -1 elif change > 0: text = "added to" elif change == 0: return "

Nothing was done!

" c.execute(f"UPDATE users SET balance = balance + {change} WHERE id={user_id}") c.execute(f"SELECT * FROM users WHERE id={user_id}") user = c.fetchall()[0][1] return f'

{change} was {text} {user}

back to the list' @app.route("/addtag", methods=['GET']) def get_addtag_request(): global users try: user_id = int(request.args.get("id")) except: #except im Normalen Code! return "Wrong user id!" users.put(user_id) return render_template("addtag.html", user=user_id) @socketio.on('addtag') def request_addtag(data): global finished if len(users.queue) > 0: user = users.queue[len(users.queue) - 1] if user == data["data"]: socketio.emit("wait", "wait") i = 0 while finished != data["data"]: time.sleep(1) i += 1 if i > 20: socketio.emit("error", "timeout") notimportant = users.get() break else: finished = None c.execute(f"SELECT * FROM users WHERE id ={user}") username = c.fetchall()[0][1] c.execute(f"SELECT * FROM tags WHERE userid={user}") tag_id = c.fetchall()[0][0] socketio.emit("finished", f"Added {tag_id} to {username}") else: socketio.emit("busy", "busy") else: socketio.emit("error", "error") #api @app.route("/api/tag_id", methods=['GET']) def get_id(): global finished tag_id = int(request.args.get("id")) c.execute(f"SELECT * FROM tags WHERE tagid ={tag_id}") tag_list = c.fetchall() print(tag_list) if tag_list != []: tag = tag_list[0] if users.qsize() == 0: c.execute(f"UPDATE users SET balance = balance - 1 WHERE id={tag[1]}") conn.commit() return make_response("True") elif users.qsize() > 0: user = users.get() c.execute(f"INSERT OR IGNORE INTO tags (tagid, userid) VALUES ({tag_id}, {user})") conn.commit() finished = user return make_response("True") return make_response("False") def main(): atexit.register(exit_handler) socketio.run(app, host='0.0.0.0', port=5000)