3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

DiscordボットでGCEインスタンスを起動・停止する

Last updated at Posted at 2021-03-25

はじめに

GCEのインスタンスをDiscordBotで起動・停止させるための手順を書こうと思います。
この記事では

の記事で作ったインスタンスを例に起動・停止できるようなコードを書いていきます
Discordbot用のVMインスタンスを作成

GCEの永続無料のプランで構成していきます(pythonのコードを実行し続けるだけのサーバーなのでたいしてスペックは必要ない)

項目      無料枠       
インスタンス f1-micro e2-micro(2021/8/1に変更されました)
ストレージ 一ヶ月あたり30GB(HDD)
スナップショット 一ヶ月あたり5GB
データ転送(外向き) 一ヶ月あたり1GB
スクリーンショット 2021-08-13 190301.png

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のコードを書いていきます(ここで説明するのは最低限のコードのみ)

main.py
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

image.png
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

これだけです

分からないこと等がありましたらコメントでお願いします

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?