Edited at

Herokuの無料プランで複数のPython製botを動かす方法

More than 1 year has passed since last update.


前書き

自分はHerokuの無料プランで複数のPython製botを動かしていますが、

無料で動かしたい場合には当然1アプリ内で複数起動する必要があります。

botが基本的に非同期で動作する都合上、

起動処理を単に並べるだけでは1つのbotしか動作しないため、

複数のbotを動かすためには少し工夫が必要になります。

因みに今でも誤解が多いのですが、以前プラン内容の変更があり、

Herokuの無料プランでbotを動かしても24時間365日動作します。

※但し細かい制約があるため詳細は公式サイトから確認してください。


手順

結論から言えば、マルチスレッドで動かすのが正解です。

threading.Thread や concurrent.futures を利用しましょう。

Herokuの無料プランでは1アプリにつき1プロセス(dyno)と決まっているので、

マルチプロセスで動作させようとするとエラーとなります。

(multiprocessing は使っちゃダメです)

下記のようなコードになると思います。

# botのライブラリをimport

import discord
from mastodon import Mastodon, StreamListener

# threading.Threadをimoprt
from threading import Thread

# ここにbot本体の記述

# discord botの起動
job = Thread(target=discord_client.run, args=(DISCORD_BOT_TOKEN,))
job.start()

# mastodon bot の起動
job = Thread(target=mstdn.stream_user, args=(MstdnStreamListener(),))
job.start()


おまけ

Python で discord bot を作成したい方はこちらを参考にどうぞ。

Pythonによる実用Discord bot / discord.py解説 - Qiita


参考リンク