はじめに
GCEのインスタンスをDiscordBotで起動・停止させるための手順を書こうと思います。
この記事では
の記事で作ったインスタンスを例に起動・停止できるようなコードを書いていきます
Discordbot用のVMインスタンスを作成
GCEの永続無料のプランで構成していきます(pythonのコードを実行し続けるだけのサーバーなのでたいしてスペックは必要ない)
項目 | 無料枠 |
---|---|
インスタンス |
|
ストレージ | 一ヶ月あたり30GB(HDD) |
スナップショット | 一ヶ月あたり5GB |
データ転送(外向き) | 一ヶ月あたり1GB |
https://cloud.google.com/free?hl=ja 参照
なおosはcentos7を用いて説明します
Discord bot作成
この記事がわかりやすいので是非
先ほど作成したVMインスタンスにsshで接続をしたら、以下のコマンドを実行していってください
sudo yum update
sudo yum install python3 python-pip
sudo pip install --upgrade pip
#Discord.pyを導入
python3 -m pip install -U "discord.py[voice]"
これで一通りの設定は終わりです
次にpythonでbotのコードを書いていきます(ここで説明するのは最低限のコードのみ)
import discord
import os
TOKEN = botのToken
client = discord.Client()
#ボットが正常に起動したときにコンソールに表示される文字を指定
@client.event
async def on_ready():
print(コンソールに表示させたい文字)
#ボットが入っているサーバーで誰かがテキストを送信したときに走るプログラム(引数のmessageが誰かが送信したメッセージ(引数名は自由に変えられる))
@client.event
async def on_message(message):
#メッセージの発信者がボットだったら無視
if message.author.bot:
return
#誰かが/server-upと送信したら特定のVMインスタンスを起動する(もちろん/server-upじゃない別の文字列に指定してもOK)
if message.content == "/server-up":
await message.channel.send("VMインスタンスを起動中...")
os.system(起動させたいVMインスタンス ※1)
if message.content == "/server-down":
await message.channel.send("VMインスタンスを停止中...")
os.system(停止させたいVMインスタンス ※2)
※1 僕のbotだと gcloud --account=,,,,,,@sample-project-6桁の数字.iam.gserviceaccount.com compute instances start mod-server12-4 --project sample-project-6桁の数字 --zone asia-northeast2-a
※2 僕のbotだと gcloud --account=,,,,,,@sample-project-6桁の数字.iam.gserviceaccount.com compute instances stop mod-server12-4 --project sample-project-6桁の数字 --zone asia-northeast2-a
botを常時稼働させる
作成したmain.pyをVMインスタンスにアップロードします
sudo nohup python3 main.py &
と実行するとVMインスタンスが起動さえしていればSSHログインを解除してもbotが常時稼働するようになります
botのコードを変更する
常時時稼働させたいpythonファイルを改善した場合には、
常時稼働させていたnohupを解除して、改善したpythonファイルをnohupに指定してあげなければいけません
#現在実行中のプロセスを全部表示
ps ax
sudo nohup python3 main.pyを探し、そこのPID(一番左の数字)を確認
なお、PIDの数値は毎回変わります
#nohupのプロセスを強制終了 (省略可能)
sudo kill (pid) #今回の場合だとsudo kill 557
#これまで使われていたmain.pyを削除
rm main.py
#コードを変更したmain.pyをアップロード
sudo nohup python3 main.py
これだけです
分からないこと等がありましたらコメントでお願いします