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
460
0
Share
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
0
380
useEffectってなんで非推奨みたいなこと言われてるの?
maguroalternative
11
7.6k
React19.2のuseEffectEventを追う
maguroalternative
2
1.1k
UDDのススメ - 拡張版 -
maguroalternative
2
1.5k
遊戯王GX 丸藤兄弟から学ぶ成長
maguroalternative
1
150
UDDのすすめ
maguroalternative
0
1.4k
LINE Works Bot入門
maguroalternative
0
120
めぐろLT#21 今年一番の仕事の成果
maguroalternative
0
130
DiscordBotをPythonからGoへリプレイスした話
maguroalternative
1
210
Other Decks in Technology
See All in Technology
全社統制を維持しながら現場負担をどう減らすか〜プラットフォームチームとセキュリティチームで進めたSecurity Hub活用によるAWS統制の見直し〜/secjaws-security-hub-custom-insights
mhrtech
1
410
Tachikawa.any 運営挨拶
daitasu
0
160
freeeで運用しているAIQAについて
qatonchan
0
550
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
6
1.4k
AI飲み会幹事エージェントを作っただけなのに
ykimi
0
170
Swift Sequence の便利 API 再発見
treastrain
1
260
カオナビに Suspenseを導入するまで / The Road to Suspense at kaonavi
kaonavi
1
450
AI-Assisted Contributions and Maintainer Load - PyCon US 2026
pauloxnet
1
110
生成AIはソフトウェア開発の革命か、ソフトウェア工学の宿題再提出なのか -ソフトウェア品質特性の追加提案-
kyonmm
PRO
2
880
いつの間にかデータエンジニア以外の業務も増えていたけど、意外と経験が役に立ってる
zozotech
PRO
0
500
毎日の作業を Claude Code 経由にしたら、 ノウハウがコードになった
kossykinto
1
1.3k
Agent の「自由」と「安全」〜未来に向けて今できること〜
katayan
0
360
Featured
See All Featured
Faster Mobile Websites
deanohume
310
31k
30 Presentation Tips
portentint
PRO
1
290
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.8k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.9k
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
Technical Leadership for Architectural Decision Making
baasie
3
360
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Optimising Largest Contentful Paint
csswizardry
37
3.7k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
160
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.6k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
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に勧誘しよう!!!!