远兮 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': datetime.datetime.utcnow() + datetime.timedelta(hours=1)
305
  }
306
 
307
  # 在这里,您可以使用您的密钥(secret key)来签署令牌
@@ -320,7 +344,7 @@ def validate_token(token):
320
  print(payload)
321
 
322
  # 检查令牌的过期时间
323
- if 'exp' in payload and datetime.datetime.utcnow() > datetime.datetime.fromtimestamp(payload['exp']):
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)