This commit is contained in:
hackrobot
2024-07-16 11:59:40 +08:00
parent 8ef8418ff4
commit 054689e158
4 changed files with 92 additions and 22 deletions

Binary file not shown.

View File

@@ -1,4 +1,5 @@
from fastapi import FastAPI, HTTPException, Depends
from sqlite3 import IntegrityError
from fastapi import BackgroundTasks, FastAPI, HTTPException, Depends, Query
from fastapi.responses import JSONResponse, PlainTextResponse
from sqlalchemy.orm import Session
from typing import List, Optional, Any
@@ -6,12 +7,20 @@ from typing import List, Optional, Any
from app import models, schemas, crud
from app.database import SessionLocal, engine
from fastapi.middleware.cors import CORSMiddleware
from PIL import Image
import qrcode
import os
from fastapi.responses import FileResponse
from fastapi.staticfiles import StaticFiles
# 初始化数据库
models.Base.metadata.create_all(bind=engine)
app = FastAPI()
# 挂载 images 文件夹
app.mount("/images", StaticFiles(directory="images"), name="images")
# 允许所有来源跨域访问(不推荐用于生产环境)
origins = ["*"]
@@ -34,17 +43,33 @@ def get_db():
db.close()
@app.get("/")
def root():
return {"message": "Hello World"}
# @app.get("/")
# def root():
# return {"message": "Hello World"}
@app.get("/hello")
def hello():
return {"message": "Hello World"}
response = f"你好,\n..........................\n一名开发者\n副业:跨境电商\n#公众号:异度世界\n..........................\n回复关键词,了解更多:\n1. 微信机器人\n2. 数字游民\n3. 加群\n..........................\n[该消息是接受好友自动回复]"
return PlainTextResponse(content=response)
def create_user_task(db: Session, user: schemas.UserCreate):
try:
existing_user = db.query(
models.User).filter(models.User.wxid == user.wxid).first()
if existing_user:
# 可以选择更新用户信息或返回错误
# print("用户已存在")
return "用户已存在"
db.add(user)
db.commit()
except IntegrityError:
db.rollback()
print("用户已存在")
return "用户已存在"
# @app.get("/add", response_model=schemas.User)
@app.get("/add")
def add_user(nickname: Optional[Any] = None,
remark: Optional[Any] = None,
@@ -53,23 +78,21 @@ def add_user(nickname: Optional[Any] = None,
gender: Optional[Any] = None,
friendaddtime: Optional[Any] = None,
openid: Optional[Any] = None,
db: Session = Depends(get_db)):
crud.create_user(db=db,
user=schemas.UserCreate(nickname=nickname,
remark=remark,
wechat_number=wechat_number,
wxid=wxid,
gender=gender,
friendaddtime=friendaddtime,
openid=openid))
# response=f'''{nickname}你好,\n我是机器人助理\n一名开发者,副业:跨境电商,#公众号:异度世界'''
# headers = {"Content-Type": "application/json"}
# return JSONResponse(content=response, headers=headers)
response = f"{nickname}你好,\n我是机器人助理\n一名开发者,副业:跨境电商,#公众号:异度世界"
return PlainTextResponse(content=response)
db: Session = Depends(get_db),
background_tasks: BackgroundTasks = None):
# return '{nickname}你好,\n我是机器人助理\n一名开发者,副业:跨境电商,#公众号:异度世界'
user_data = schemas.UserCreate(nickname=nickname,
remark=remark,
wechat_number=wechat_number,
wxid=wxid,
gender=gender,
friendaddtime=friendaddtime,
openid=openid)
if background_tasks:
background_tasks.add_task(create_user_task, db, user_data)
response = f"{nickname}你好,\n..........................\n一名开发者\n副业:跨境电商\n#公众号:异度世界\n..........................\n回复关键词,了解更多:\n1. 微信机器人\n2. 数字游民\n3. 加群\n..........................\n[该消息是接受好友自动回复]"
return PlainTextResponse(content=response)
@app.get("/users/")
@@ -102,3 +125,50 @@ def update_user(identifier: str,
raise HTTPException(status_code=404, detail="User not found")
return crud.update_user(db=db, user=user, user_update=user_update)
@app.get("/generate_qr")
def generate_qr(wxid: Optional[str] = Query(None), db: Session = Depends(get_db)):
# 选择网络图片
# return FileResponse('images/111.png')
url = "https://web.hackrobot.cn"
if wxid:
url += f"?wxid={wxid}"
# 创建二维码
qr = qrcode.QRCode(version=1, box_size=5, border=2) # 调整二维码大小
qr.add_data(url)
qr.make(fit=True)
img = qr.make_image(fill='black', back_color='white')
# 保存二维码图像
qr_image_path = f"images/{wxid}-qr_code.png"
img.save(qr_image_path)
# 加载原图
group_image_path = "images/group.jpg"
# 在原图上添加二维码(右下角)
group_image = Image.open(group_image_path)
qr_image = Image.open(qr_image_path)
# 将二维码放置在右下角
qr_image = qr_image.resize((200, 200)) # 调整二维码大小
qr_position = (group_image.width - qr_image.width - 50, group_image.height - qr_image.height - 50) # 距离20像素
# 在原图上添加二维码
group_image.paste(qr_image, qr_position)
# 保存合成的图像
combined_image_path = f"images/combined_{wxid}.jpg"
group_image.save(combined_image_path)
# 压缩图片
group_image.save(combined_image_path, "JPEG", quality=10) # 85 是压缩质量,可根据需要调整
# 删除二维码文件
os.remove(qr_image_path)
print(combined_image_path)
return FileResponse(combined_image_path)