feat: 添加多个功能模块和工具脚本
- 新增websocket客户端和服务端实现 - 添加图片压缩工具和快速压缩脚本 - 实现学生信息处理相关API - 添加MQTT客户端和消息处理功能 - 更新.gitignore忽略更多文件类型 - 添加数据库操作工具和示例 - 实现多个测试脚本和工具类
This commit is contained in:
+512
@@ -0,0 +1,512 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"id": "7aa426df",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from requests import get,post,put\n",
|
||||
"import pandas as pd\n",
|
||||
"import time\n",
|
||||
"import os\n",
|
||||
"\n",
|
||||
"teamId = 106\n",
|
||||
"ip = \"http://10.143.25.3:8090\"\n",
|
||||
"param = {\n",
|
||||
" \"username\": \"tangchao\",\n",
|
||||
" \"password\": \"123456a\",\n",
|
||||
" \"client_id\": \"client\",\n",
|
||||
" \"grant_type\": \"password\",\n",
|
||||
" \"client_secret\": \"123456\",\n",
|
||||
"}\n",
|
||||
"data = get(url=f\"{ip}/oauth/token\",params=param).json()\n",
|
||||
"token = data[\"access_token\"]\n",
|
||||
"header = {\n",
|
||||
" \"content-type\": \"application/json\",\n",
|
||||
" \"authorization\": f\"Bearer {token}\",\n",
|
||||
"}\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 20,
|
||||
"id": "d790454a",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"文件: 丁真泽仁.jpg\n",
|
||||
"响应: {'success': True, 'msg': 'http://10.143.25.3:9000/iot-school/2025-11-06/e286b47e3c9d4db396400167b77b4b1b.JPG', 'code': 0, 'data': None}\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"with open(\"./students/丁云钻.JPG\", \"rb\") as formFile:\n",
|
||||
" # 正确的方式创建文件上传数据\n",
|
||||
" mu_files = {\n",
|
||||
" \"file\": (\"丁云钻.JPG\", formFile, \"application/octet-stream\")\n",
|
||||
" }\n",
|
||||
" \n",
|
||||
" # 使用 files 参数而不是 data\n",
|
||||
" response = post(\n",
|
||||
" url=f\"{ip}/school/device/content/upload\",\n",
|
||||
" headers={\n",
|
||||
" \"authorization\": f\"Bearer {token}\"\n",
|
||||
" },\n",
|
||||
" files=mu_files\n",
|
||||
" )\n",
|
||||
" print(f\"文件: 丁真泽仁.jpg\")\n",
|
||||
" print(f\"响应: {response.json()}\")\n",
|
||||
" "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"id": "68b6d980",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from pathlib import Path"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"id": "9d2f61cf",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def getStudentInfo(name):\n",
|
||||
" data = get(f\"{ip}/school/stuface/list?teamId=106&page=1&pageSize=15&gradeId=&classId=&stuName={name}&stuNo=&pageNumber=0&sortField=create_time&sortOrder=asc&access_token=908c0ba4-ead2-44a3-a3c4-6aaf0cfbeb8a\",headers=header).json()\n",
|
||||
" if data['success']:\n",
|
||||
" students = data['data']['records']\n",
|
||||
" if len(students)==1:\n",
|
||||
" return students[0]\n",
|
||||
" elif len(students)>1:\n",
|
||||
" count = 0\n",
|
||||
" for stu in students:\n",
|
||||
" if name == stu['stuName']:\n",
|
||||
" count += 1\n",
|
||||
" if count == 0:\n",
|
||||
" return f\"姓名{name}没有学生,请检查\" \n",
|
||||
" elif count > 1:\n",
|
||||
" return f\"姓名{name}有{count}个学生,请检查\"\n",
|
||||
" else:\n",
|
||||
" for stu in students:\n",
|
||||
" if name == stu['stuName']:\n",
|
||||
" return stu\n",
|
||||
" else:\n",
|
||||
" return f\"姓名{name}有{len(students)}个学生,请检查\"\n",
|
||||
"def uploadFace(file_path):\n",
|
||||
" with open(file_path, \"rb\") as formFile:\n",
|
||||
" mu_files = {\n",
|
||||
" \"file\": (Path(file_path).name, formFile,\"application/octet-stream\")\n",
|
||||
" }\n",
|
||||
" response = post(f\"{ip}/school/device/content/upload\",\n",
|
||||
" headers={\n",
|
||||
" \"authorization\": f\"Bearer {token}\"\n",
|
||||
" },\n",
|
||||
" files=mu_files\n",
|
||||
" ).json()\n",
|
||||
" if response['success']:\n",
|
||||
" return response\n",
|
||||
" else:\n",
|
||||
" return f\"上传失败{response['msg']}\"\n",
|
||||
"def updateFaceInfo(stuInfo,files):\n",
|
||||
" data = put(f\"{ip}/school/stuface/save\",\n",
|
||||
" headers=header,\n",
|
||||
" json={\n",
|
||||
" \"studentId\": stuInfo['studentId'],\n",
|
||||
" \"files\": files\n",
|
||||
" }\n",
|
||||
" ).json()\n",
|
||||
" if data['success']:\n",
|
||||
" print(\"更新成功\")\n",
|
||||
" return data\n",
|
||||
" else:\n",
|
||||
" print(f\"更新失败{data['msg']}\")\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"id": "97d03b64",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"count = 0"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"id": "b27da758",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"fail_student=[]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"id": "4eb1025d",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"丁真 更新成功\n",
|
||||
"丁真仁真 更新成功\n",
|
||||
"丁真拥青 更新成功\n",
|
||||
"丁真月登 姓名丁真月登有0个学生,请检查\n",
|
||||
"丁真罗布 更新成功\n",
|
||||
"丹增拥西 更新成功\n",
|
||||
"丹增拥西.jpg.temp 姓名丹增拥西.jpg.temp有0个学生,请检查\n",
|
||||
"丹真珠扎 更新成功\n",
|
||||
"久美郎加 更新成功\n",
|
||||
"于焜豪 更新成功\n",
|
||||
"仁真曲珍 更新成功\n",
|
||||
"仁青彭措 更新成功\n",
|
||||
"付森林 更新成功\n",
|
||||
"代子浩 更新成功\n",
|
||||
"伍金次仁 更新成功\n",
|
||||
"何奥雪 更新成功\n",
|
||||
"何子健 更新成功\n",
|
||||
"何瑞林 更新成功\n",
|
||||
"何绮琪 更新成功\n",
|
||||
"何雨洁 更新成功\n",
|
||||
"佘芯欣 更新成功\n",
|
||||
"余帅 更新成功\n",
|
||||
"佟诗佳 更新成功\n",
|
||||
"倪杰博文 更新成功\n",
|
||||
"其麦 更新成功\n",
|
||||
"冯文童 更新成功\n",
|
||||
"冯星宇 更新成功\n",
|
||||
"刘佳 更新成功\n",
|
||||
"刘冬晨 更新成功\n",
|
||||
"刘宸驿 更新成功\n",
|
||||
"刘峻熙 更新成功\n",
|
||||
"刘志欣 更新成功\n",
|
||||
"刘权 更新成功\n",
|
||||
"刘杰 姓名刘杰有3个学生,请检查\n",
|
||||
"刘玉婷 姓名刘玉婷有2个学生,请检查\n",
|
||||
"刘王昊杰 更新成功\n",
|
||||
"刘肖 更新成功\n",
|
||||
"刘芮 更新成功\n",
|
||||
"刘芸汐 更新成功\n",
|
||||
"刘萭菡 更新成功\n",
|
||||
"卓玛曲忠 更新成功\n",
|
||||
"单孜扎巴 更新成功\n",
|
||||
"单真赤里 更新成功\n",
|
||||
"卢朝亭 更新成功\n",
|
||||
"古绒曲珍 更新成功\n",
|
||||
"向雨涵 更新成功\n",
|
||||
"吴瑞鑫 更新成功\n",
|
||||
"吴雪 更新成功\n",
|
||||
"周杰 更新成功\n",
|
||||
"呷松泽仁 更新成功\n",
|
||||
"呷绒拉姆 更新成功\n",
|
||||
"呷绒拉姆.jpg.temp 姓名呷绒拉姆.jpg.temp有0个学生,请检查\n",
|
||||
"唐越 更新成功\n",
|
||||
"唐雨轩 姓名唐雨轩有0个学生,请检查\n",
|
||||
"唐韵玲 更新成功\n",
|
||||
"四郎吉称 更新成功\n",
|
||||
"四郎娜姆 更新成功\n",
|
||||
"四郎志玛 更新成功\n",
|
||||
"四郎降村 更新成功\n",
|
||||
"土登称来 更新成功\n",
|
||||
"夏处 更新成功\n",
|
||||
"夏宁静 姓名夏宁静有0个学生,请检查\n",
|
||||
"夏思乐 更新成功\n",
|
||||
"央珠尼玛 更新成功\n",
|
||||
"姜唯怡 更新成功\n",
|
||||
"姜唯怡.jpg.temp 姓名姜唯怡.jpg.temp有0个学生,请检查\n",
|
||||
"娄源 更新成功\n",
|
||||
"孙婧仪 更新成功\n",
|
||||
"尹荣强 更新成功\n",
|
||||
"尼玛拉姆 姓名尼玛拉姆有2个学生,请检查\n",
|
||||
"巩天姚 更新成功\n",
|
||||
"巴措 姓名巴措有2个学生,请检查\n",
|
||||
"巴桑 更新成功\n",
|
||||
"巴桑卓玛 更新成功\n",
|
||||
"帅紫欣 更新成功\n",
|
||||
"廖爽 更新成功\n",
|
||||
"张世鑫 更新成功\n",
|
||||
"张健霖 更新成功\n",
|
||||
"张勇 姓名张勇有2个学生,请检查\n",
|
||||
"张友林 更新成功\n",
|
||||
"张康萌 更新成功\n",
|
||||
"张旭东 更新成功\n",
|
||||
"张明瑞 更新成功\n",
|
||||
"张林丰 更新成功\n",
|
||||
"张永科 更新成功\n",
|
||||
"张澜 更新成功\n",
|
||||
"张鑫雨 更新成功\n",
|
||||
"张雨歆 更新成功\n",
|
||||
"彭嘉妮 更新成功\n",
|
||||
"彭小青 更新成功\n",
|
||||
"彭徐馨 更新成功\n",
|
||||
"彭馨怡 更新成功\n",
|
||||
"徐宇奇 更新成功\n",
|
||||
"德青巴姆 更新成功\n",
|
||||
"德青翁姆 更新成功\n",
|
||||
"志玛拥忠 更新成功\n",
|
||||
"成宇轩 更新成功\n",
|
||||
"戚昕钰 更新成功\n",
|
||||
"房明勇 更新成功\n",
|
||||
"扎西 更新成功\n",
|
||||
"扎西华本 更新成功\n",
|
||||
"扎西多吉 姓名扎西多吉有3个学生,请检查\n",
|
||||
"扎西巴拥 姓名扎西巴拥有2个学生,请检查\n",
|
||||
"扎西彭措 更新成功\n",
|
||||
"扎西翁姆 姓名扎西翁姆有2个学生,请检查\n",
|
||||
"扎西邓珠 姓名扎西邓珠有3个学生,请检查\n",
|
||||
"拉热 更新成功\n",
|
||||
"拥吉拉姆 更新成功\n",
|
||||
"措姆 更新成功\n",
|
||||
"斯朗让步 姓名斯朗让步有0个学生,请检查\n",
|
||||
"斯郎泽仁 更新成功\n",
|
||||
"方思淇 更新成功\n",
|
||||
"昂翁落珠 更新成功\n",
|
||||
"普布 更新成功\n",
|
||||
"普灯 更新成功\n",
|
||||
"曲云登降措 更新成功\n",
|
||||
"曲巴降措 更新成功\n",
|
||||
"曲机卓玛 更新成功\n",
|
||||
"曲登志玛 更新成功\n",
|
||||
"更扎 更新成功\n",
|
||||
"曹正怡甫 姓名曹正怡甫有0个学生,请检查\n",
|
||||
"曹海龙 更新成功\n",
|
||||
"曹芮瑞 更新成功\n",
|
||||
"曹青川 更新成功\n",
|
||||
"曾佳佳 更新成功\n",
|
||||
"曾昊然 更新成功\n",
|
||||
"曾英杰 更新成功\n",
|
||||
"朱俊 更新成功\n",
|
||||
"朱杨成程 更新成功\n",
|
||||
"朱绿红 更新成功\n",
|
||||
"李东生 更新成功\n",
|
||||
"李作浩 更新成功\n",
|
||||
"李俊希 更新成功\n",
|
||||
"李偌熙 已上传照片\n",
|
||||
"李子浩 更新成功\n",
|
||||
"李想 更新成功\n",
|
||||
"李杨杨 更新成功\n",
|
||||
"李杰 更新成功\n",
|
||||
"李梦雪 更新成功\n",
|
||||
"李洋 更新成功\n",
|
||||
"李艾灵 更新成功\n",
|
||||
"李茹茜 更新成功\n",
|
||||
"李雨萱 更新成功\n",
|
||||
"李雯静 更新成功\n",
|
||||
"杜芸熙 更新成功\n",
|
||||
"杨健鑫 更新成功\n",
|
||||
"杨博为 更新成功\n",
|
||||
"杨帆 姓名杨帆有2个学生,请检查\n",
|
||||
"杨慧怡 更新成功\n",
|
||||
"杨明高 更新成功\n",
|
||||
"杨淞琳 更新成功\n",
|
||||
"杨美玲 更新成功\n",
|
||||
"杨钦城 更新成功\n",
|
||||
"杨雪丽 更新成功\n",
|
||||
"松安丁真 更新成功\n",
|
||||
"林菲儿 更新成功\n",
|
||||
"柔门 更新成功\n",
|
||||
"根秋泽措 更新成功\n",
|
||||
"格绒曲初 更新成功\n",
|
||||
"梁湘怡 更新成功\n",
|
||||
"梅宝文 更新成功\n",
|
||||
"樊林钰 更新成功\n",
|
||||
"次乃曲觉 更新成功\n",
|
||||
"欧炤彬 更新成功\n",
|
||||
"欧韦博 更新成功\n",
|
||||
"段芸凯 更新成功\n",
|
||||
"母林苹 更新成功\n",
|
||||
"母玉洁 更新成功\n",
|
||||
"毛滢 姓名毛滢有0个学生,请检查\n",
|
||||
"毛雨荨 姓名毛雨荨有0个学生,请检查\n",
|
||||
"江若溪 更新成功\n",
|
||||
"汪彦丞 更新成功\n",
|
||||
"汪秦川 更新成功\n",
|
||||
"沈俊 更新成功\n",
|
||||
"泽仁拥忠 姓名泽仁拥忠有2个学生,请检查\n",
|
||||
"泽仁拥珍 更新成功\n",
|
||||
"泽仁林波 更新成功\n",
|
||||
"泽仁桑珠 更新成功\n",
|
||||
"泽仁正呷 更新成功\n",
|
||||
"泽仁邓珠 更新成功\n",
|
||||
"泽绒拥桌 姓名泽绒拥桌有0个学生,请检查\n",
|
||||
"泽翁拉姆 更新成功\n",
|
||||
"洛绒刀登 姓名洛绒刀登有2个学生,请检查\n",
|
||||
"洛绒央宗 更新成功\n",
|
||||
"洛绒曲西 更新成功\n",
|
||||
"洛绒银登 更新成功\n",
|
||||
"洛让普错 更新成功\n",
|
||||
"淳思琴 更新成功\n",
|
||||
"熊建 更新成功\n",
|
||||
"熊鑫豪 更新成功\n",
|
||||
"牛泽浩 更新成功\n",
|
||||
"王子轩 姓名王子轩有4个学生,请检查\n",
|
||||
"王宇希杨 更新成功\n",
|
||||
"王忠翔 更新成功\n",
|
||||
"王思函 更新成功\n",
|
||||
"王思涵 更新成功\n",
|
||||
"王怡之 更新成功\n",
|
||||
"王成鹏 更新成功\n",
|
||||
"王星怡 更新成功\n",
|
||||
"王浩 更新成功\n",
|
||||
"王羌宇 更新成功\n",
|
||||
"王羽 更新成功\n",
|
||||
"王艺 姓名王艺有2个学生,请检查\n",
|
||||
"王艺小 姓名王艺小有0个学生,请检查\n",
|
||||
"王营凯 更新成功\n",
|
||||
"王薛文 更新成功\n",
|
||||
"王诗语 更新成功\n",
|
||||
"王辛如 更新成功\n",
|
||||
"王陈俊祎 更新成功\n",
|
||||
"王雪瑞 更新成功\n",
|
||||
"王震太 更新成功\n",
|
||||
"王静煊 更新成功\n",
|
||||
"珍珠拉姆 更新成功\n",
|
||||
"班志 更新成功\n",
|
||||
"生呷 更新成功\n",
|
||||
"田文涛 更新成功\n",
|
||||
"田玉峰 更新成功\n",
|
||||
"登真翁姆 更新成功\n",
|
||||
"登镇降措 姓名登镇降措有0个学生,请检查\n",
|
||||
"白浩洋 更新成功\n",
|
||||
"白玛泽真 姓名白玛泽真有0个学生,请检查\n",
|
||||
"白马恩珠 姓名白马恩珠有0个学生,请检查\n",
|
||||
"石雨鑫 更新成功\n",
|
||||
"秀雯 更新成功\n",
|
||||
"罗得 姓名罗得有0个学生,请检查\n",
|
||||
"罗湘缘 更新成功\n",
|
||||
"罗琛 更新成功\n",
|
||||
"罗绒多吉 更新成功\n",
|
||||
"肖宇欣 更新成功\n",
|
||||
"胡仟军 更新成功\n",
|
||||
"蒋刘杨吉 更新成功\n",
|
||||
"蒋苏豪 更新成功\n",
|
||||
"薛佳佳 更新成功\n",
|
||||
"许博文 更新成功\n",
|
||||
"谢佳心 更新成功\n",
|
||||
"谢晓丽 更新成功\n",
|
||||
"谢耀辉 更新成功\n",
|
||||
"谭明涛 更新成功\n",
|
||||
"贾馥嫣 更新成功\n",
|
||||
"赵亚军豪 更新成功\n",
|
||||
"赵元兵 更新成功\n",
|
||||
"赵星宇 更新成功\n",
|
||||
"赵欢 更新成功\n",
|
||||
"赵瑛杰 更新成功\n",
|
||||
"赵禹婷 更新成功\n",
|
||||
"达瓦泽仁 更新成功\n",
|
||||
"邓丽君 更新成功\n",
|
||||
"邓婉麟 更新成功\n",
|
||||
"邓曹华 更新成功\n",
|
||||
"邓汶汶 更新成功\n",
|
||||
"邓玉 更新成功\n",
|
||||
"邓蔡清 更新成功\n",
|
||||
"邱明辉 更新成功\n",
|
||||
"邱骏熙 更新成功\n",
|
||||
"邹志栋 更新成功\n",
|
||||
"邹晞 更新成功\n",
|
||||
"邹铭洋 姓名邹铭洋有0个学生,请检查\n",
|
||||
"郑丁山 更新成功\n",
|
||||
"郑霜侨 更新成功\n",
|
||||
"钟渝萍 更新成功\n",
|
||||
"错日娜 姓名错日娜有0个学生,请检查\n",
|
||||
"阳志 更新成功\n",
|
||||
"阿布 更新成功\n",
|
||||
"陈峰 更新成功\n",
|
||||
"陈新幻 更新成功\n",
|
||||
"陈新摇 更新成功\n",
|
||||
"陈爽 更新成功\n",
|
||||
"陈琳 更新成功\n",
|
||||
"陈雪梅 更新成功\n",
|
||||
"陈静 更新成功\n",
|
||||
"降批所郎 更新成功\n",
|
||||
"降拥巴姆 姓名降拥巴姆有2个学生,请检查\n",
|
||||
"陶茂宇 更新成功\n",
|
||||
"青美泽仁 更新成功\n",
|
||||
"青麦翁姆 更新成功\n",
|
||||
"韩思月 更新成功\n",
|
||||
"韩艺菱 更新成功\n",
|
||||
"马博俊 更新成功\n",
|
||||
"高唐德胜 更新成功\n",
|
||||
"高让桑章 更新成功\n",
|
||||
"魏佳莉 更新成功\n",
|
||||
"鲁绒珍珠 姓名鲁绒珍珠有0个学生,请检查\n",
|
||||
"黄俊豪 更新成功\n",
|
||||
"黄友诚 更新成功\n",
|
||||
"黄定瑞 更新成功\n",
|
||||
"黄若翔 更新成功\n",
|
||||
"龙凤辛迪 更新成功\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"for root, dirs, files in os.walk(\"./students/\"):\n",
|
||||
" for index,file in enumerate(files):\n",
|
||||
" file_path = os.path.join(root, file)\n",
|
||||
" stuName = Path(file_path).stem\n",
|
||||
" print(stuName ,end=\" \")\n",
|
||||
" stuInfo = getStudentInfo(stuName)\n",
|
||||
" if isinstance(stuInfo, str):\n",
|
||||
" print(stuInfo)\n",
|
||||
" count += 1\n",
|
||||
" continue\n",
|
||||
" if stuInfo[\"files\"] and 'http' in stuInfo[\"files\"]:\n",
|
||||
" print(f\"已上传照片\")\n",
|
||||
" continue\n",
|
||||
" if count > index:\n",
|
||||
" print(f\"已上传张照片\")\n",
|
||||
" continue\n",
|
||||
" res = uploadFace(file_path)\n",
|
||||
" if isinstance(res, str):\n",
|
||||
" print(f\"上传图片失败{res}\")\n",
|
||||
" count += 1\n",
|
||||
" fail_student.append(stuInfo)\n",
|
||||
" continue\n",
|
||||
" updateFaceInfo(stuInfo, [{\"url\":res['msg'],\"name\":file}])\n",
|
||||
" count+=1"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "6f4fcfcf",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "base",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.12.4"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 5
|
||||
}
|
||||
Reference in New Issue
Block a user