Spaces:
Runtime error
Runtime error
远兮
commited on
Commit
·
0cd8d81
1
Parent(s):
42bad84
添加每天领取免费次数
Browse files
chatgpt-next-web/__pycache__/utils.cpython-310.pyc
ADDED
Binary file (321 Bytes). View file
|
|
chatgpt-next-web/service.py
CHANGED
@@ -9,6 +9,7 @@ import requests
|
|
9 |
import os
|
10 |
from flask import Flask, request, jsonify, Request, Response
|
11 |
from redis import Redis
|
|
|
12 |
|
13 |
SECERT_KEY = "8U2LL1"
|
14 |
MY_OPENAI_API_KEY = os.environ.get('MY_OPENAI_API_KEY')
|
@@ -284,6 +285,29 @@ def proxy_chat_completions():
|
|
284 |
return result, response.status_code
|
285 |
|
286 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
287 |
def parse_token(request: Request):
|
288 |
token_with_bearer = request.headers.get('Authorization')
|
289 |
|
@@ -301,7 +325,7 @@ def generate_token(user_id, username):
|
|
301 |
payload = {
|
302 |
'user_id': user_id,
|
303 |
'username': username,
|
304 |
-
'exp':
|
305 |
}
|
306 |
|
307 |
# 在这里,您可以使用您的密钥(secret key)来签署令牌
|
@@ -320,7 +344,7 @@ def validate_token(token):
|
|
320 |
print(payload)
|
321 |
|
322 |
# 检查令牌的过期时间
|
323 |
-
if 'exp' in payload and
|
324 |
return False
|
325 |
|
326 |
return True
|
@@ -466,5 +490,61 @@ def update_password(email, new_password):
|
|
466 |
return False
|
467 |
|
468 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
469 |
if __name__ == '__main__':
|
470 |
app.run(debug=True)
|
|
|
9 |
import os
|
10 |
from flask import Flask, request, jsonify, Request, Response
|
11 |
from redis import Redis
|
12 |
+
from utils import nowtime
|
13 |
|
14 |
SECERT_KEY = "8U2LL1"
|
15 |
MY_OPENAI_API_KEY = os.environ.get('MY_OPENAI_API_KEY')
|
|
|
285 |
return result, response.status_code
|
286 |
|
287 |
|
288 |
+
# 每天领取免费次数
|
289 |
+
@app.route('/pickUpFreeChatCount', methods=['POST'])
|
290 |
+
def handle_pick_up_free_chat_count():
|
291 |
+
token = parse_token(request)
|
292 |
+
|
293 |
+
# 验证令牌
|
294 |
+
if not validate_token(token):
|
295 |
+
return jsonify({'code': 401, 'message': 'Invalid token'})
|
296 |
+
|
297 |
+
user_id = get_user_id_from_token(token)
|
298 |
+
|
299 |
+
if not user_id:
|
300 |
+
return jsonify({'code': 400, 'message': 'User not found'})
|
301 |
+
|
302 |
+
# 领取赠送的聊天次数
|
303 |
+
success = pick_up_free_chat_count(user_id)
|
304 |
+
|
305 |
+
if success:
|
306 |
+
return {'message': '领取成功'}
|
307 |
+
else:
|
308 |
+
return {'message': '您今天已经领取了'}
|
309 |
+
|
310 |
+
|
311 |
def parse_token(request: Request):
|
312 |
token_with_bearer = request.headers.get('Authorization')
|
313 |
|
|
|
325 |
payload = {
|
326 |
'user_id': user_id,
|
327 |
'username': username,
|
328 |
+
'exp': nowtime() + datetime.timedelta(days=30)
|
329 |
}
|
330 |
|
331 |
# 在这里,您可以使用您的密钥(secret key)来签署令牌
|
|
|
344 |
print(payload)
|
345 |
|
346 |
# 检查令牌的过期时间
|
347 |
+
if 'exp' in payload and nowtime() > datetime.datetime.fromtimestamp(payload['exp']):
|
348 |
return False
|
349 |
|
350 |
return True
|
|
|
490 |
return False
|
491 |
|
492 |
|
493 |
+
def get_user_free_data(user_id):
|
494 |
+
user_free_key = f'user:{user_id}:free'
|
495 |
+
free_data = redis.hgetall(user_free_key)
|
496 |
+
return free_data
|
497 |
+
|
498 |
+
|
499 |
+
def initialize_user_free_data(user_id):
|
500 |
+
free_data = {
|
501 |
+
b'basic_chat_count': 0,
|
502 |
+
b'last_gift_time': str(datetime.date.today()),
|
503 |
+
b'has_pick_up_free': b'false' # 用户是否领取了赠送的聊天次数
|
504 |
+
}
|
505 |
+
user_free_name = f'user:{user_id}:free'
|
506 |
+
redis.hset(user_free_name,
|
507 |
+
b'basic_chat_count',
|
508 |
+
free_data.get(b'basic_chat_count', 0))
|
509 |
+
redis.hset(user_free_name,
|
510 |
+
b'last_gift_time',
|
511 |
+
free_data.get(b'last_gift_time'))
|
512 |
+
redis.hset(user_free_name,
|
513 |
+
b'has_pick_up_free',
|
514 |
+
free_data.get(b'has_pick_up_free', b'false'))
|
515 |
+
return free_data
|
516 |
+
|
517 |
+
|
518 |
+
# 每天领取免费次数
|
519 |
+
def pick_up_free_chat_count(user_id):
|
520 |
+
free_data = get_user_free_data(user_id)
|
521 |
+
if not free_data:
|
522 |
+
free_data = initialize_user_free_data(user_id)
|
523 |
+
# 获取用户的聊天次数和最后赠送时间
|
524 |
+
basic_chat_count = free_data.get(b'basic_chat_count', 0)
|
525 |
+
last_gift_time = free_data.get(
|
526 |
+
b'last_gift_time',
|
527 |
+
str(datetime.date.today()))
|
528 |
+
has_pick_up_free = (
|
529 |
+
free_data.get(b'has_pick_up_free', b'false')
|
530 |
+
.decode()
|
531 |
+
.lower() == 'true')
|
532 |
+
|
533 |
+
print('free_data3', basic_chat_count, last_gift_time, has_pick_up_free)
|
534 |
+
|
535 |
+
# 检查用户是否已经领取过赠送的聊天次数今天
|
536 |
+
if has_pick_up_free and last_gift_time.decode() == str(datetime.date.today()):
|
537 |
+
return False
|
538 |
+
|
539 |
+
basic_free_count = 5
|
540 |
+
# 更新用户聊天数据和领取状态
|
541 |
+
user_free_name = f'user:{user_id}:free'
|
542 |
+
redis.hset(user_free_name, b'basic_chat_count', basic_free_count)
|
543 |
+
redis.hset(user_free_name, b'last_gift_time', str(datetime.date.today()))
|
544 |
+
redis.hset(user_free_name, b'has_pick_up_free', 'true')
|
545 |
+
|
546 |
+
return True
|
547 |
+
|
548 |
+
|
549 |
if __name__ == '__main__':
|
550 |
app.run(debug=True)
|
chatgpt-next-web/utils.py
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import datetime
|
2 |
+
|
3 |
+
|
4 |
+
def nowtime():
|
5 |
+
return datetime.datetime.utcnow() + datetime.timedelta(hours=8)
|