DAY 20 我要+1 群组团购辅助机器人(补)

上篇只做出了大部分功能,有很多细节没做好,这篇会修正细节与优化

PostgreSQL IF statement

我会用到PostgreSQL的IF statement,来改掉上篇的INSERT部分

DO
$do$
BEGIN
   IF EXISTS (SELECT FROM orders) THEN
      DELETE FROM orders;
   ELSE
      INSERT INTO orders VALUES (1,2,3);
   END IF;
END
$do$
DO
$do$
BEGIN
IF EXISTS(SELECT uid FROM group_buying_user WHERE mid=(SELECT mid FROM group_buying_message WHERE keyword='{key}') AND uid='{profile.user_id}' ) THEN
	UPDATE group_buying_user SET name='{profile.user_id}',quantity='{event.message.text[4::]}' WHERE mid=(SELECT mid FROM group_buying_message WHERE keyword='{key}' and uid='{profile.user_id}');
ELSE
	INSERT INTO group_buying_user (mid, uid, name, quantity) VALUES ((SELECT mid FROM group_buying_message WHERE keyword='{key}'),'{profile.user_id}','{profile.display_name}','{event.message.text[4::]}');
END IF;
END
$do$			

修改

再+1时如果同时要显示团购讯息跟名单,延迟太多我造成服务器错误
我把显示团购讯息跟名单加到关键字的if里
+1 时资料会传至资料库,并显示 关键字XXX+1
关键字
关键字 +1
https://ithelp.ithome.com.tw/upload/images/20211002/20140165pfa41rfpkg.png
https://ithelp.ithome.com.tw/upload/images/20211002/20140165B9jKFax6Ny.png

if(event.message.text in keywords): 
        key=event.message.text
        profile = line_bot_api.get_profile(event.source.user_id)
        cursor=conn.cursor()
        #将取得的key作为关键字在group_buying_message里找到讯息文字
        cursor.execute(f"SELECT message_text FROM group_buying_message WHERE keyword='{key}';")
        message_text = "".join(cursor.fetchone())
        #用key在group_buying_message里找到讯息文字的mid,再用mid从message_emoji里找到LINE emoji资讯
        cursor.execute(f"SELECT index,product_id,emoji_id FROM message_emoji WHERE mid=(SELECT mid FROM group_buying_message WHERE keyword='{key}');")
        rows = cursor.fetchall()           
        emojis=[]
        #将资料一笔一笔写入list中
        for row in rows:
            emojis.append({'index': row[0],'productId': row[1],'emojiId': row[2]})
        cursor.execute(f"SELECT uid,name,quantity FROM group_buying_user WHERE mid=(SELECT mid FROM group_buying_message WHERE keyword='{key}');")
        users = cursor.fetchall()

        for user in users:
            message_text=message_text+"\U0001F449"+"".join(user[1])+" "+"".join(user[2])+"\n"
        message=TextSendMessage(message_text,emojis)
        line_bot_api.reply_message(event.reply_token,message)
if(event.message.text[:event.message.text.find(" "):] in keywords and len(event.message.text)>event.message.text.find(" ")):
        conn.commit()
        lastLength=event.message.text.find(" ")
        key=event.message.text[:lastLength:]
        profile = line_bot_api.get_profile(event.source.user_id)
        cursor=conn.cursor()
        cursor.execute(f"DO $do$ BEGIN if EXISTS(SELECT uid FROM group_buying_user WHERE mid=(SELECT mid FROM group_buying_message WHERE keyword='{key}') and uid='{profile.user_id}' ) then UPDATE group_buying_user SET name='{profile.display_name}',quantity='{event.message.text[lastLength+1::]}' WHERE mid=(SELECT mid FROM group_buying_message WHERE keyword='{key}' and uid='{profile.user_id}'); else INSERT INTO group_buying_user (mid, uid, name, quantity) VALUES ((SELECT mid FROM group_buying_message WHERE keyword='{key}'),'{profile.user_id}','{profile.display_name}','{event.message.text[lastLength+1::]}'); end if; END $do$")
        conn.commit()
        message=key+" "+profile.display_name+" "+event.message.text[lastLength+1::]
        message=TextSendMessage(message)
        line_bot_api.reply_message(event.reply_token,message)

<<:  [Day19] - Django-REST-Framework Viewsets 介绍

>>:  Day 17 - Linux 上设定 PBR

Day 2 我要开始学了

Hi 大家好~ 在这边平常我列出我最近想学跟正在学的一些技术 React Testing Libra...

Day17 React-Router(二)Route设置进阶

讲完最基础的Route设置之後, 来学习如何更准确的经由path来渲染画面上的元件。 Route标签...

Wentz QOTD: CISSP练习题

在IT行业工作了26年左右之後,我在2018年成功实现了年度目标,在9个月内通过了19项考试,重新...

Dat27 Hook概观介绍

经过昨天对Hook有个初步的认识之後,下方介绍几个Hook的范例。 Hook 的规则 建议只在最上层...

事件查看练习(二)--如何研究一个警告事件

今天来继续看事件检视器,笔者挑一些自己笔电常出现的警告来分享,最近发现我的电脑似乎还算健康没什麽大问...