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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
マグロ隊長kinTV
July 22, 2023
Technology
470
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
DiscordとLINEをPython+FastAPI+Dockerで連携させる
linedbでの発表資料です。
Qiitaの記事はこちら。
https://qiita.com/maguro-alternative/items/6f57d4cc6c9923ba6a1d
マグロ隊長kinTV
July 22, 2023
More Decks by マグロ隊長kinTV
See All by マグロ隊長kinTV
感動を貰う側から与える側へ -アイドルマスターミリオンライブから学ぶCfPに挑むと言うこと-
maguroalternative
1
480
useEffectってなんで非推奨みたいなこと言われてるの?
maguroalternative
11
7.8k
React19.2のuseEffectEventを追う
maguroalternative
2
1.2k
UDDのススメ - 拡張版 -
maguroalternative
2
1.7k
遊戯王GX 丸藤兄弟から学ぶ成長
maguroalternative
1
190
UDDのすすめ
maguroalternative
0
1.5k
LINE Works Bot入門
maguroalternative
0
140
めぐろLT#21 今年一番の仕事の成果
maguroalternative
0
140
DiscordBotをPythonからGoへリプレイスした話
maguroalternative
1
220
Other Decks in Technology
See All in Technology
Breaking the Seal: Static Deobfuscation of Compiled V8 JavaScript Bytecode Malware
hshrzd
0
730
私がブラウザを自作したくなった理由
supurazako
1
210
MIRU 2026 チュートリアル
keisuke198619
0
900
Webアクセシビリティ入門 2026
recruitengineers
PRO
3
550
QAエンジニア起点で進める、SmartHRにおける信頼性向上について
kaomi_wombat
1
140
ボトムアップ文化が強い組織で セキュリティをどう根付かせていくかの現在進行形の話 / Making Security Stick in a Bottom-Up Organization
yamaguchitk333
0
220
Bill One 開発エンジニア 紹介資料
sansan33
PRO
7
19k
Eight Engineering Unit 紹介資料
sansan33
PRO
3
8.2k
Invisible to AI? Making TYPO3 Sites Quotable by AI Search Systems
wolfgangwagner
0
190
【CEDEC2026】『ウマ娘 プリティーダービー』 英語版のキャラクターの方言や口調をローカライズするための創造的アプローチ
cygames
PRO
1
240
【AG-UI × A2UI × MCP Apps】Generative UIをやさしく解説する
nrinetcom
PRO
1
120
トヨタ⽣産⽅式(TPS)⼊⾨
recruitengineers
PRO
3
740
Featured
See All Featured
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
250
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
56k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
280
Tell your own story through comics
letsgokoyo
1
1k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
Typedesign – Prime Four
hannesfritz
42
3.1k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Prompt Engineering for Job Search
mfonobong
0
400
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
200
The browser strikes back
jonoalderson
0
1.5k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
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に勧誘しよう!!!!