def group_plugin_page(): sql = "SELECT * FROM `group`" mysqldb.execute(sql) data = mysqldb.fetchall() groups = [] for line in data: group = {"g_id": line[0], "g_name": line[1], "plugins": []} if line[0] == "*": group["g_id"] = "all" groups.append(group) sql = """ SELECT a.plugin_name,a.plugin_bname,a.package_name,c.g_id FROM group_message_plugin as a LEFT JOIN ( SELECT * FROM group_message_plugin_activate as b WHERE b.g_id = %s ) as c on c.plugin_name = a.plugin_name """ #print(groups) for i in range(len(groups)): now_group_id = groups[i]["g_id"] if now_group_id == "all": now_group_id = "*" mysqldb.execute(sql, (now_group_id)) data = mysqldb.fetchall() for line in data: package = { "bname": line[1], "name": line[0], "package_name": line[2] } if isinstance(line[3], str): package["bstate"] = "启用" else: package["bstate"] = "停用" groups[i]["plugins"].append(package) #print(groups) return render_template("group_plugin_list.html", groups=groups)
def login(): if request.method == "GET": resp = render_template("login_admin.html") else: mysqlconn.ping(reconnect=True) target = request.args.get("redirect") if target is None: target = "/" target = urllib.parse.unquote(target) #print(target) username = request.form["username"] passwd = request.form["password"] exist = mysqldb.execute("SELECT * from admin WHERE id=%s", username) state = False if exist: user = mysqldb.fetchall()[0] state = check(user, passwd) if state: cookies = str(uuid.uuid4()) redisdb.set( cookies, json.dumps({ "id": user[0], "auth_class": user[3], "OTP_key": user[4] })) resp = Response(render_template("redirect.html", target=target)) resp.set_cookie("token", cookies) else: resp = render_template("login_admin.html", color='red', message='密码错误或用户不存在') return resp
def reset_by_admin(): target_id = request.form["s_id"] newpassword = request.form["newpassword"] otppassword = request.form["otppassword"] data = json.loads(redisdb.get(request.cookies["token"])) otp_key = data["OTP_key"] sql = "SELECT * FROM admin where id = %s" mysqldb.execute(sql, (target_id)) user_data = mysqldb.fetchall()[0] otp_checker = pyotp.TOTP(otp_key) #print(otp_checker.now(),otppassword) if otp_checker.verify(otppassword): md5 = hashlib.md5() md5.update(f"{newpassword}{user_data[2]}".encode("utf-8")) md5_passwd = md5.hexdigest() try: sql = "UPDATE admin SET password=%s WHERE id=%s" mysqldb.execute(sql, (md5_passwd, target_id)) mysqlconn.commit() return "success" except Exception as e: print(e) return "fail" else: return "fail"
def reflash_plugin(): #plugin_private_reflash sql = "SELECT * FROM private_message_plugin" temp = mysqldb.execute(sql) new_privateMessageHandles = [] data = mysqldb.fetchall() for plugin in data: module = importlib.import_module(plugin[2]) if plugin[3] == 0: new_privateMessageHandles.append( [module.re_str, module.handle, module.sample_active_word]) elif plugin[3] == 1: new_privateMessageHandles.append( [module.re_str, tempstop_handle, "null"]) else: new_privateMessageHandles.append( [module.re_str, empty_handle, "null"]) global privateMessageHandles #print(privateMessageHandles) #print(new_privateMessageHandles) privateMessageHandles = new_privateMessageHandles #plugin_group_reflash sql = "SELECT a.g_id,b.package_name FROM group_message_plugin_activate as a LEFT JOIN group_message_plugin as b on a.plugin_name = b.plugin_name" mysqldb.execute(sql) data = mysqldb.fetchall() new_groupMessageHandles = {} new_groupMessageHandle_init_data = {} for plugin in data: module = importlib.import_module(plugin[1]) new_groupMessageHandle_init_data[module.plugin_name] = module.setup() if plugin[0] in new_groupMessageHandles.keys(): new_groupMessageHandles[plugin[0]].append( [module.plugin_name, module.handle]) else: temp = [[module.plugin_name, module.handle]] new_groupMessageHandles[plugin[0]] = temp global groupMessageHandles #print(groupMessageHandles) #print(new_groupMessageHandles) groupMessageHandles = new_groupMessageHandles global groupMessageHandle_init_data groupMessageHandle_init_data = new_groupMessageHandle_init_data return json.dumps({"state": True})
def user_list(): sql = "SELECT admin.id,admin.auth_class FROM admin" mysqldb.execute(sql) users_list = mysqldb.fetchall() users = [] for line in users_list: user = {"userid": line[0], "type": line[1]} users.append(user) #print(users) return render_template("user_list.html", users=users)
def dialogue(qid): sql = "SELECT * FROM message WHERE sender=%s ORDER BY send_time ASC" state = mysqldb.execute(sql, (qid)) if state > 0: data = mysqldb.fetchall() dialogues = [] for line in data: dialogue = { "detail": replace_cq2html(line[3]), "send_time": line[2], "res": line[4], "res_time": line[6] } dialogues.append(dialogue) sql = "SELECT a.qid,b.* FROM qid2sid as a LEFT JOIN stdinfo as b on a.sid=b.sid WHERE a.qid=%s" state = mysqldb.execute(sql, (qid)) if state > 0: have_info = True data = mysqldb.fetchall() sender = { "qid": qid, "name": data[0][2], "sid": data[0][1], "major": data[0][5], "school": data[0][4], "sex": data[0][3] } if isinstance(data[0][6], str): sender["phone"] = data[0][6] else: sender["phone"] = "未绑定" else: have_info = False sender = {"qid": qid} return render_template("dialogue.html", have_info=have_info, sender=sender, dialogues=dialogues) else: return "<h1>无该对话</h1>"
def message_list(): sql = "SELECT * FROM message AS a WHERE a.send_time IN ( SELECT MAX( send_time ) FROM message GROUP BY sender ) ORDER BY send_time DESC" mysqldb.execute(sql) data = mysqldb.fetchall() messages = [] for line in data: message = { "sender_id": line[1], "detail": replace_cq2html(line[3], nohtml=True), "time": line[2] } messages.append(message) return render_template("message_list.html", messages=messages)
def log_data(target="*"): data = [] name = [] if target == "*": mysqldb.execute( f"SELECT date_format(days,'%m月%d日'),num FROM `daily_event_num` LIMIT 5" ) else: mysqldb.execute( f"SELECT date_format(days,'%m月%d日'),num FROM `daily_friendadd_num` LIMIT 5" ) getdata = mysqldb.fetchall() for line in getdata: name.append(line[0]) data.append(line[1]) return name, data
def private_plugin_page(): sql = "SELECT * FROM private_message_plugin" mysqldb.execute(sql) data = mysqldb.fetchall() plugins = [] for line in data: plugin = { "name": line[0], "bname": line[1], "package_name": line[2], "state": line[3] } if line[3] == 0: plugin["bstate"] = "启用" elif line[3] == 1: plugin["bstate"] = "临时停用" else: plugin["bstate"] = "永久停用" plugins.append(plugin) return render_template("private_plugin_list.html", plugins=plugins)
def reset_by_user(): oldpassword = request.form["oldpassword"] newpassword = request.form["newpassword"] data = json.loads(redisdb.get(request.cookies["token"])) user_id = data["id"] sql = "SELECT * FROM admin where id = %s" mysqldb.execute(sql, (user_id)) user_data = mysqldb.fetchall()[0] if check(user_data, oldpassword): md5 = hashlib.md5() md5.update(f"{newpassword}{user_data[2]}".encode("utf-8")) md5_passwd = md5.hexdigest() try: sql = "UPDATE admin SET password=%s WHERE id=%s" mysqldb.execute(sql, (md5_passwd, user_id)) mysqlconn.commit() return json.dumps({"state": "success", "message": "修改成功"}) except Exception as e: return json.dumps({"state": "fail", "message": "服务器异常"}) else: return json.dumps({"state": "fail", "message": "密码有误"})
def user_home(user_id): userdata = json.loads(redisdb.get(request.cookies["token"])) operator_id = userdata["id"] operator_auth = userdata["auth_class"] if operator_id == user_id: operator_otpkey = userdata["OTP_key"] otp_url = pyotp.totp.TOTP(operator_otpkey).provisioning_uri( f"{operator_id}@sues.edu.cn", issuer_name="qq_bot_service") return render_template("user_personal.html", s_id=operator_id, usertype=operator_auth, otpuri=otp_url) else: if operator_auth > 0: return "<h1>无权访问</h1>" else: sql = "SELECT * FROM admin WHERE id=%s" mysqldb.execute(sql, (user_id)) data = mysqldb.fetchall()[0] return render_template("user_root.html", s_id=data[0], usertype=data[-2])
console = logging.StreamHandler() console.setLevel(logging.INFO) formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s') console.setFormatter(formatter) logging.getLogger('').addHandler(console) #int bot = CQHttp(api_root=setupfile.cq_api_root, access_token=setupfile.cq_access_token, secret=setupfile.cq_secret) app = bot.server_app # plugin_private_add sql = "SELECT * FROM private_message_plugin" private_plugin_list = mysqldb.execute(sql) privateMessageHandles = [] data = mysqldb.fetchall() for plugin in data: module = importlib.import_module(plugin[2]) app.register_blueprint(module.blueprint, url_prefix=f"/admin/plugin/private/{plugin[0]}") #print(plugin) if plugin[3] == 0: privateMessageHandles.append( [module.re_str, module.handle, module.sample_active_word]) elif plugin[3] == 1: privateMessageHandles.append([module.re_str, tempstop_handle, "null"]) else: privateMessageHandles.append([module.re_str, empty_handle, "null"]) # plugin_group_add sql = "SELECT * FROM group_message_plugin"
from flask import Blueprint from flask import redirect from flask import request, Response, render_template from db import mysqlconn, mysqldb, redisdb import myAuth #init admin = Blueprint("admin", __name__, template_folder='templates', static_folder='static') private_plugin = [] sql = "SELECT * FROM private_message_plugin" private_plugin_list = mysqldb.execute(sql) data = mysqldb.fetchall() for plugin in data: plugin_label = {"bname": plugin[1], "name": plugin[0], "state": plugin[2]} private_plugin.append(plugin_label) group_plugin = [] sql = "SELECT * FROM group_message_plugin" private_plugin_list = mysqldb.execute(sql) data = mysqldb.fetchall() for plugin in data: plugin_label = {"bname": plugin[1], "name": plugin[0]} group_plugin.append(plugin_label) def replace_cq2html(message: str, nohtml=False): image = re.search("\[CQ:image.*]", message)