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
400
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
遊戯王GX 丸藤兄弟から学ぶ成長
maguroalternative
1
75
UDDのすすめ
maguroalternative
0
1k
LINE Works Bot入門
maguroalternative
0
70
めぐろLT#21 今年一番の仕事の成果
maguroalternative
0
93
DiscordBotをPythonからGoへリプレイスした話
maguroalternative
1
130
Golangのデータベーステストフィクスチャ作成
maguroalternative
0
340
就活体験記
maguroalternative
0
150
LINEBotCourse.pdf
maguroalternative
0
240
カプコンのカンファレンスいった話
maguroalternative
0
260
Other Decks in Technology
See All in Technology
TypeScript 上達の道
ysknsid25
23
4.8k
OpenTelemetry の Log を使いこなそう
biwashi
5
1.1k
Turn Your Community into a Fundraising Catalyst for Black Philanthropy Month
auctria
PRO
0
190
興味の胞子を育て 業務と技術に広がる”きのこ力”
fumiyasac0921
0
290
AIを使っていい感じにE2Eテストを書けるようになるまで / Trying to Write Good E2E Tests with AI
katawara
3
1.9k
AIエージェントを支える設計
tkikuchi1002
11
2.3k
AIに全任せしないコーディングとマネジメント思考
kikuchikakeru
0
270
robocopy の怖い話/scary-story-about-robocopy
emiki
0
400
2025-07-25 NOT A HOTEL TECH TALK ━ スマートホーム開発の最前線 ━ SOFTWARE
wakinchan
0
170
alecthomas/kong はいいぞ
fujiwara3
6
1.1k
大規模イベントを支える ABEMA の アーキテクチャ 変遷 2025
nagapad
5
510
KCD Lima: eBee in Peru!
lizrice
0
110
Featured
See All Featured
Designing for Performance
lara
610
69k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.9k
Automating Front-end Workflow
addyosmani
1370
200k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Into the Great Unknown - MozCon
thekraken
40
1.9k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.9k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Designing for humans not robots
tammielis
253
25k
Typedesign – Prime Four
hannesfritz
42
2.7k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
How to Think Like a Performance Engineer
csswizardry
25
1.8k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
720
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に勧誘しよう!!!!