Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
DiscordとLINEをPython+FastAPI+Dockerで連携させる
Search
マグロ隊長kinTV
July 22, 2023
Technology
0
380
DiscordとLINEをPython+FastAPI+Dockerで連携させる
linedbでの発表資料です。
Qiitaの記事はこちら。
https://qiita.com/maguro-alternative/items/6f57d4cc6c9923ba6a1d
マグロ隊長kinTV
July 22, 2023
Tweet
Share
More Decks by マグロ隊長kinTV
See All by マグロ隊長kinTV
UDDのすすめ
maguroalternative
0
920
LINE Works Bot入門
maguroalternative
0
60
めぐろLT#21 今年一番の仕事の成果
maguroalternative
0
78
DiscordBotをPythonからGoへリプレイスした話
maguroalternative
1
110
Golangのデータベーステストフィクスチャ作成
maguroalternative
0
330
就活体験記
maguroalternative
0
140
LINEBotCourse.pdf
maguroalternative
0
230
カプコンのカンファレンスいった話
maguroalternative
0
230
22年度新歓LT
maguroalternative
0
110
Other Decks in Technology
See All in Technology
MagicPodが描くAIエージェント戦略とソフトウェアテストの未来
magicpod
0
270
Serverlessだからこそコードと設計にはこだわろう
kenichirokimura
3
1.1k
newmo の創業を支える Software Architecture と Platform Engineering
110y
5
560
PythonツールであるpygnmiをSONiCのgNMIに対して使ってみた
sonic
0
140
encoding/json v2を予習しよう!
yuyu_hf
PRO
1
200
Vibe Coding Tools
ijin
1
290
インラインRBSコメントに鯛pe checkersもニッコリ
sansantech
PRO
1
100
Previewでもここまで追える! Azure AI Foundryで始めるLLMトレース
tomodo_ysys
2
740
Cursorをチョッパヤインタビューライターにチューニングする方法 / how to tuning cursor for interview write
shuzon
2
250
WindowsでGenesisに挑戦した話
natsutan
0
110
UIパフォーマンス最適化: AIを活用して100倍の速度向上を実現した事例
kinocoboy2
1
430
クラウドネイティブ環境の脅威モデリング
kyohmizu
2
440
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
5
580
Rails Girls Zürich Keynote
gr2m
94
13k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
227
22k
Building a Modern Day E-commerce SEO Strategy
aleyda
40
7.3k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
105
19k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
5
620
The Straight Up "How To Draw Better" Workshop
denniskardys
233
140k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
52
2.6k
How to Think Like a Performance Engineer
csswizardry
23
1.6k
Statistics for Hackers
jakevdp
799
220k
Transcript
DiscordとLINEを Python+FastAPI+Docker で連携させる マグロ
自己紹介 • 名前:マグロ • 所属:日本大学 学部四年 • スキル: • 勉強中:
Twitter:@sigumataityouda GitHub:maguro-alternative
背景 • 友達とゲームしながら通話するためDiscordでサーバを作った。 →初めての人が多く、混乱が生じる。 →LINEと連携させて、慣れてもらおう!
バージョン • これまで計4回のフルリメイクを行う。 今回はQiitaの記事にあるバージョン4を解説。 バージョン1:Glitch(Discord.js) とGAS(LINE) バージョン2:Railway(pycord)と GAS(LINE) バージョン3:Railwayに完全移行 バージョン4:FastAPIに移行
バージョン5:Postgresでのカスタマイズ 機能追加 今回は これ GitHubの はこれ
イメージ 複数でのサーバー運用を想 定
イメージ Discordからメッセージを送る と、送信元を解釈してLINEグ ループに送信
イメージ 同じようにLINEグループから のメッセージも解釈して Discordに送信
選定 • Python 3.10.7 • Railway • FastAPI • Discord.py+Pycord
• Docker • LINE Messaging API • LINE Notify
設計 • Railway上でDockerを展開、Pythonの実行環境を作成 • DiscordBotとFastAPIのアプリを並列実行 Bot アプリ サーバ
設計(LINEBot) FastAPIで立ち上げたサーバー をLINEAPIのWebhookに設定 https://....railway.app/line-bot
設計(LINEBot) テキスト、音声ファイル https://....railway.app/line-bot 画像 画像URL 動画 動画URL(限定公開) スタンプ情報 スタンプURL ライブラリなしでDiscordAPIを使用
して送信 画像はGyazoAPI、動画はYouTube Data APIでアップロードして共有
設計(DiscordBot) メッセージを読み取りLINEに送 信
設計(DiscordBot) 動画、音声はMessaging APIで 送信 テキスト、画像、スタンプは LINE Notifyで送信 1時間に1000件 の送信上限 1か月に200件の
送信上限
識別方法 • 環境変数を利用 • 以下のような2つのサーバーで運用を想定(LINEグループもそれぞれ存在) SERVER_A SERVER_B
識別方法 サーバー名を頭文字にし、対応す る環境変数を代入 .split(",")で名前を区切り、サーバーを分別 DiscordサーバーidからLINEBotに関するイン スタンスを作成 SERVER_A SERVER_AのLINEグループ SERVER_Aと判断 サーバid
メッセージ
識別方法 • LINEBotの署名を各サーバごとに行う。 • 一致したものからDiscordのインスタン スを作成。 SERVER_A SERVER_AのLINEグループ SERVER_Aと判断 body
識別方法 • 現在はトークンをWeb上で設定。
メンション、チャンネル指定 • LINE→Discordでは送信先チャンネルは環境変数で定める。 • だがLINE側からも指定したい。 • メンション機能も付けていたが、Discordの仕様変更により見直し。
メンション、チャンネル指定 • メッセージの先頭に「/チャンネル名 #channel」と表記することで変更可能。 • チャンネル一覧から同名のチャンネル を探し、idを取得、そこに投稿。 • 現在は送信先をデータベース で管理しており、Web上で変
更可能
ファイルの扱い • DiscordはCDN方式のため、httpsで参照可能。 • 一方、LINEはバイナリで扱われるため扱いが大変。 • どこかしらに保存して共有させる必要あり。
ファイルの扱い • それぞれのファイルに特化したストレージサービスを利用。 • 画像:Gyazo API • 動画:YouTube Data API
• 音声:Discord API • いずれも「multipart/form-data」でアップロード可能。
実行例 • Discord→LINE(テキスト、画像)
実行例 • Discord→LINE(動画、音声)
実行例 • LINE→Discord(テキスト、画像、動画)
実行例 • LINE→Discord(音声、スタンプ)
今後 • 現在WebUIでの制御を可能にしているが、サーバもフロントも同一のフルスタッ クアプリとして動かしている。 • フロントと分けるか検討中。
最後に • 連携してDiscordに勧誘しよう!!!!