|
@@ -46,68 +46,16 @@ def handle_follow(event):
|
|
|
# db connect and search
|
|
|
db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/arkcard?charset=utf8mb4')
|
|
|
table = db['users']
|
|
|
- table2 = db['nft']
|
|
|
result1 = table.find_one(userid=real_user_id)
|
|
|
- result2 = table2.find_one(userid=real_user_id)
|
|
|
|
|
|
# 都存在db的話
|
|
|
- if result1 and result2:
|
|
|
- db.close()
|
|
|
- line_bot_api.reply_message(
|
|
|
- event.reply_token,
|
|
|
- TextSendMessage(text='很高興再見到您!'))
|
|
|
-
|
|
|
- # 只存在user,新增nft給他
|
|
|
- elif result1 and not result2:
|
|
|
- # prepare nft for new follower
|
|
|
- result3 = table2.find_one(userid=None) or table2.find_one(userid='')
|
|
|
- result3['userid'] = real_user_id
|
|
|
- table2.update(dict(result3), ['id'])
|
|
|
-
|
|
|
- db.close()
|
|
|
-
|
|
|
- line_bot_api.reply_message(
|
|
|
- event.reply_token,
|
|
|
- TextSendMessage(text='很高興再見到您!'))
|
|
|
-
|
|
|
- # 只存在nft,新加到user
|
|
|
- elif result2 and not result1:
|
|
|
- # create user account api
|
|
|
- url = 'https://nft-api-staging.joyso.io/api/v1/accounts'
|
|
|
- headers = {'Authorization': 'Basic bmZ0OmMxOTEzOWMzYjM3YjdjZWU3ZmY3OTFiZGU3NzdjZWNl'}
|
|
|
-
|
|
|
- # setup for temp use (unique id)
|
|
|
- rand_num = str(randrange(99999))
|
|
|
- user_id = event.source.user_id + rand_num
|
|
|
- data = 'uid=' + user_id
|
|
|
- r = requests.post(url=url, headers=headers, data=data)
|
|
|
-
|
|
|
- # extract the account address
|
|
|
- dict_str = json.loads(r.text)
|
|
|
- user_account = dict_str['account']
|
|
|
- user_address = user_account['address']
|
|
|
-
|
|
|
- # generate qr code from user id
|
|
|
- qr = qrcode.QRCode(
|
|
|
- version=1,
|
|
|
- box_size=10,
|
|
|
- border=5)
|
|
|
- qr.add_data(user_address)
|
|
|
- qr.make(fit=True)
|
|
|
- img_qr = qr.make_image(fill='black', back_color='white')
|
|
|
- filename = "/var/www/ArkCard-Linebot/ArkCard-web/qrcode/" + real_user_id + '.png'
|
|
|
- img_save = img_qr.save(filename)
|
|
|
-
|
|
|
- # add to db
|
|
|
- data = dict(userid=real_user_id, useraddress=user_address)
|
|
|
- table.insert(data)
|
|
|
-
|
|
|
+ if result1:
|
|
|
db.close()
|
|
|
line_bot_api.reply_message(
|
|
|
event.reply_token,
|
|
|
TextSendMessage(text='很高興再見到您!'))
|
|
|
|
|
|
- # 都不存在,兩種都新建
|
|
|
+ # 建立全新使用者
|
|
|
else:
|
|
|
# create user account api
|
|
|
url = 'https://nft-api-staging.joyso.io/api/v1/accounts'
|
|
@@ -139,16 +87,12 @@ def handle_follow(event):
|
|
|
data = dict(userid=real_user_id, useraddress=user_address)
|
|
|
table.insert(data)
|
|
|
|
|
|
- # prepare nft for new follower
|
|
|
- result3 = table2.find_one(userid=None) or table2.find_one(userid='')
|
|
|
- result3['userid'] = real_user_id
|
|
|
- table2.update(dict(result3), ['id'])
|
|
|
-
|
|
|
db.close()
|
|
|
|
|
|
line_bot_api.reply_message(
|
|
|
event.reply_token,
|
|
|
TextSendMessage(text='歡迎加入好友'))
|
|
|
+ db.close()
|
|
|
|
|
|
# message handler
|
|
|
@handler.add(MessageEvent, message=TextMessage)
|
|
@@ -228,20 +172,40 @@ def collection(userid):
|
|
|
# db connect
|
|
|
db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/arkcard?charset=utf8mb4')
|
|
|
table2 = db['nft']
|
|
|
+ table3 = db['nftdrops']
|
|
|
|
|
|
- if not table2.find_one(userid=userid):
|
|
|
+ nft = {}
|
|
|
+ nft1 = {}
|
|
|
+ i = 0
|
|
|
+ if table3.find_one(userid=userid) and table2.find_one(userid=userid):
|
|
|
+ results1 = table3.find_one(userid=userid)
|
|
|
+ results2 = table2.find(userid=userid)
|
|
|
+ nft[0] = results1
|
|
|
+ for row in results2:
|
|
|
+ nft1[i] = row
|
|
|
+ i += 1
|
|
|
+ nft[1] = nft1
|
|
|
+ return nft
|
|
|
db.close()
|
|
|
- return "您尚未擁有NFT商品,歡迎前往NFT商店購買!"
|
|
|
- else:
|
|
|
- xname = userid
|
|
|
- sql = 'SELECT a.* FROM nft a INNER JOIN (SELECT userid FROM users WHERE userid="' + xname + '") b ON b.userid = a.userid'
|
|
|
- result = db.query(sql)
|
|
|
- rows = {}
|
|
|
- i = 0
|
|
|
- for row in result:
|
|
|
- rows[i] = row
|
|
|
+
|
|
|
+ elif table3.find_one(userid=userid) and not table2.find_one(userid=userid):
|
|
|
+ results1 = table3.find_one(userid=userid)
|
|
|
+ nft[0] = results1
|
|
|
+ return nft
|
|
|
+ db.close()
|
|
|
+
|
|
|
+ elif table2.find_one(userid=userid) and not table3.find_one(userid=userid):
|
|
|
+ results2 = table2.find(userid=userid)
|
|
|
+ for row in results2:
|
|
|
+ nft1[i] = row
|
|
|
i += 1
|
|
|
- return rows
|
|
|
+ nft[1] = nft1
|
|
|
+ return nft
|
|
|
+ db.close()
|
|
|
+
|
|
|
+ else:
|
|
|
+ db.close()
|
|
|
+ print("error: user don't have any nft")
|
|
|
db.close()
|
|
|
|
|
|
# receive handler
|
|
@@ -301,22 +265,6 @@ def shop(userid):
|
|
|
return rows
|
|
|
db.close()
|
|
|
|
|
|
-# market
|
|
|
-@app.get("/market")
|
|
|
-def market():
|
|
|
- # db connect
|
|
|
- db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/arkcard?charset=utf8mb4')
|
|
|
-
|
|
|
- sql = 'SELECT * FROM arkcard.nft WHERE userid IS NULL OR userid="" LIMIT 10'
|
|
|
- result = db.query(sql)
|
|
|
- rows = {}
|
|
|
- i = 0
|
|
|
- for row in result:
|
|
|
- rows[i] = row
|
|
|
- i += 1
|
|
|
- return rows
|
|
|
- db.close()
|
|
|
-
|
|
|
@app.post("/buy")
|
|
|
async def buy(userModel : models.BuyNft):
|
|
|
# db connect
|
|
@@ -338,19 +286,26 @@ async def buy(userModel : models.BuyNft):
|
|
|
db.close()
|
|
|
return "您已購買成功!"
|
|
|
|
|
|
-# @app.post("/callevent")
|
|
|
-# async def callevent(userModel: models.callBack):
|
|
|
-# """
|
|
|
-# 事件會用application/json和POST方式打到指定位址, 內容基本包含
|
|
|
-# {
|
|
|
-# "type": "xxx", // 事件類型, 字串
|
|
|
-# "data": {} // 事件內容資料
|
|
|
-# }
|
|
|
-# """
|
|
|
-# str1 = userModel.type
|
|
|
-# dict1 = userModel.data
|
|
|
-# result = str1, dict1
|
|
|
-# return result
|
|
|
+@app.post("/event")
|
|
|
+async def nftdrops(userModel : models.NftDrops):
|
|
|
+ # db connect
|
|
|
+ db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/arkcard?charset=utf8mb4')
|
|
|
+ table3 = db['nftdrops']
|
|
|
+
|
|
|
+ # input對應
|
|
|
+ userid = userModel.userid
|
|
|
+
|
|
|
+ # 如果userid不在db, 寫入到一個空值nft
|
|
|
+ if not table3.find_one(userid=userid):
|
|
|
+ sql = 'UPDATE arkcard.nftdrops SET userid="' + userid + '" WHERE userid IS NULL OR userid ="" LIMIT 1'
|
|
|
+ result = db.query(sql)
|
|
|
+ db.close()
|
|
|
+ return "「火」通行證已送出"
|
|
|
+ # 如果userid存在,回傳通知
|
|
|
+ else:
|
|
|
+ db.close()
|
|
|
+ return "您已收藏過「火」通行證"
|
|
|
+ db.close()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
uvicorn.run("main:app", host="0.0.0.0", port=8228, reload=True,ssl_context=('/etc/letsencrypt/live/ark.cards/fullchain.pem', '/etc/letsencrypt/live/ark.cards/privkey.pem'))
|