haskell で line bot を作ってみた
TRANSCRIPT
![Page 1: Haskell で LINE Bot を作ってみた](https://reader034.vdocuments.net/reader034/viewer/2022042511/58ed41771a28abf6328b45ed/html5/thumbnails/1.jpg)
LINE Bot 作ってみたひげ
![Page 2: Haskell で LINE Bot を作ってみた](https://reader034.vdocuments.net/reader034/viewer/2022042511/58ed41771a28abf6328b45ed/html5/thumbnails/2.jpg)
Abstruct: LINE Bot を作ったScoreBot : CTF のスコアボードを Bot で
メッセージとしてフラグを送信
自分のスコアや問題を出力
SDK: Go 言語
Heroku + PostgreSQL
IBM Bluemix + AWS RDS
フレームワークを意識した設計
を話そうと思ってた
![Page 3: Haskell で LINE Bot を作ってみた](https://reader034.vdocuments.net/reader034/viewer/2022042511/58ed41771a28abf6328b45ed/html5/thumbnails/3.jpg)
しかし
![Page 4: Haskell で LINE Bot を作ってみた](https://reader034.vdocuments.net/reader034/viewer/2022042511/58ed41771a28abf6328b45ed/html5/thumbnails/4.jpg)
普通だ...
![Page 5: Haskell で LINE Bot を作ってみた](https://reader034.vdocuments.net/reader034/viewer/2022042511/58ed41771a28abf6328b45ed/html5/thumbnails/5.jpg)
変態エンジニアが多い(要出典)ドリコムでこんな普通の話をするの
か...
![Page 6: Haskell で LINE Bot を作ってみた](https://reader034.vdocuments.net/reader034/viewer/2022042511/58ed41771a28abf6328b45ed/html5/thumbnails/6.jpg)
そこで
![Page 7: Haskell で LINE Bot を作ってみた](https://reader034.vdocuments.net/reader034/viewer/2022042511/58ed41771a28abf6328b45ed/html5/thumbnails/7.jpg)
![Page 8: Haskell で LINE Bot を作ってみた](https://reader034.vdocuments.net/reader034/viewer/2022042511/58ed41771a28abf6328b45ed/html5/thumbnails/8.jpg)
LINE Bot 作ってみたひげ
![Page 9: Haskell で LINE Bot を作ってみた](https://reader034.vdocuments.net/reader034/viewer/2022042511/58ed41771a28abf6328b45ed/html5/thumbnails/9.jpg)
Haskell でLINE Bot 作ってみた
ひげ
![Page 10: Haskell で LINE Bot を作ってみた](https://reader034.vdocuments.net/reader034/viewer/2022042511/58ed41771a28abf6328b45ed/html5/thumbnails/10.jpg)
Abstruct: LINE Bot を作ったScoreBot : CTF のスコアボードを Bot で
Curry-Howard 同型対応を返す Bot
論文の参照付き!
SDK: Go 言語 Haskell
Heroku + Postgress
IBM Bluemix + AWS RDS
フレームワークを意識した設計
完全にネタ
![Page 12: Haskell で LINE Bot を作ってみた](https://reader034.vdocuments.net/reader034/viewer/2022042511/58ed41771a28abf6328b45ed/html5/thumbnails/12.jpg)
友達登録
Curry-Howard Bot Score Bot (ついで)
![Page 13: Haskell で LINE Bot を作ってみた](https://reader034.vdocuments.net/reader034/viewer/2022042511/58ed41771a28abf6328b45ed/html5/thumbnails/13.jpg)
依存ライブラリHaskell SDK for LINE Messaging API
github.com/noraesae/line
Haskell Web Application Interface
github.com/yesodweb/wai
Heroku buildpack for Haskell Stack
github.com/mfine/heroku-buildpack-stack
![Page 14: Haskell で LINE Bot を作ってみた](https://reader034.vdocuments.net/reader034/viewer/2022042511/58ed41771a28abf6328b45ed/html5/thumbnails/14.jpg)
Demo
![Page 15: Haskell で LINE Bot を作ってみた](https://reader034.vdocuments.net/reader034/viewer/2022042511/58ed41771a28abf6328b45ed/html5/thumbnails/15.jpg)
データベースの代わりに...curryHowardCorrespondence :: [([Text], [Text], URL)]curryHowardCorrespondence = [ ( ["Natural Deducation", "自然演繹"] , ["Typed Lambda Calclus", "型付きラムダ計算"] , "http://disi.unitn.it/.../Papers/curry-howard.pdf") , ( ["Sequent Calculus", "シーケント計算"] , ["Typed Lambda Calclus", "型付きラムダ計算"] , "http://disi.unitn.it/.../Papers/curry-howard.pdf") , ( ["System F"] , ["Polymorphic Lambda Calculus", "2階ラムダ計算"] , "http://disi.unitn.it/.../Papers/curry-howard.pdf") , ( ["Modal Logic", "様相論理"] , ["Mondad", "モナド"] , "http://www.sciencedirect.com/.../S0304397596001697") ]
![Page 16: Haskell で LINE Bot を作ってみた](https://reader034.vdocuments.net/reader034/viewer/2022042511/58ed41771a28abf6328b45ed/html5/thumbnails/16.jpg)
Get CorrespondencegetCorrespondence :: Text -> TextgetCorrespondence = fromMaybe "unknown..." . lookupCorrespondence
lookupCorrespondence :: Text -> Maybe TextlookupCorrespondence txt = msum $ fmap match curryHowardCorrespondence where match (xs, ys, url) | txt `elem` xs = appendUrl url <$> safeHead ys | txt `elem` ys = appendUrl url <$> safeHead xs | otherwise = Nothing
appendUrl :: URL -> Text -> TextappendUrl url = unwords . (: [url])
safeHead :: [a] -> Maybe asafeHead = find (const True)
![Page 17: Haskell で LINE Bot を作ってみた](https://reader034.vdocuments.net/reader034/viewer/2022042511/58ed41771a28abf6328b45ed/html5/thumbnails/17.jpg)
Event Handlerサンプルコードの1つ目の echo の引数をかえただけ
handleMessageEvent :: ReplyableEvent EventMessage -> IO ()handleMessageEvent event = do case getMessage event of TextEM _ (Text text) -> echo (getReplyToken event) (getCorrespondence text) _ -> echo (getReplyToken event) "undefined message"
api :: APIIO a -> IO (Either APIError a)api = runAPI getChannelToken
echo :: ReplyToken -> T.Text -> IO ()echo replyToken content = do api $ reply replyToken [ Message . Text $ content ] return ()
![Page 18: Haskell で LINE Bot を作ってみた](https://reader034.vdocuments.net/reader034/viewer/2022042511/58ed41771a28abf6328b45ed/html5/thumbnails/18.jpg)
おしまい