見出し画像

Discordのサーバーリージョンをコマンドで変更できるbotを作る

動作環境

・Python3.6.8
・Windows10

目次

0.前置き
1.Discordbotアカウントの作成・登録
2.コード
3.Herokuへデプロイ
4.まとめ

0.前置き

Discordを利用してる人ならば、1回くらいはサーバーが不安定でボイスチャットが繋がらないからサーバーリージョンを変更したという経験があるはず。
その際に権限を持っているユーザーがオンラインでそのことに気づければ変更出来るが、つい最近僕の身内で使っているサーバーで僕が気づかないために数分~数十分待たせてしまったことが数回あった。

そこでリージョン変更用のbotを作ってサーバーに追加し、誰でも変更出来るようにしようという思いつき。

1.Discordbotアカウントの作成・登録

DiscordのDEVELOPER PORTALにアクセスし、ログインする。
New Applicationをクリック(今回は既に設定済のもので紹介)

APP ICONとNAMEを設定する。次に左のSETTINGSからBOTをクリックし、Add Botをクリック。ダイアログが出てきたらYes,do it!!

ICONとUSERNAMEに先程設定したのと同じものを設定する。
ここの真ん中辺りにあるTOKENのCopyボタンからbotのアクセストークンをコピー出来ます。これは後々使います。また、これを知られると他者がbotを乗っ取れてしまうので扱いに注意。

左のSETTINGSからOAuth2をクリックし、下のほうにあるbotにチェックボックスを入れ、右下のCopyボタンをクリック。
ここでコピーされるのは作成したbotをサーバーに招待するためのURL。

コピーしたURLに接続すると以下のような感じ。テスト運用等する場合は専用の新しいサーバーを立てておくと良いだろう。

2.コード

まず discord.py が必要なのでインストールする。
※discord.py はpython3.7.xに非対応。3.6.xを使うこと

$ py -3 -m pip install -U discord.py

そして今回用意したコードが下記の通り discordbot.py

import discord

client = discord.Client()

region_london = 'ロンドン'
region_japan = '日本'
region_hongkong = '香港'

change_bef = 'に変更します。'
change_aft = 'に変更しました。'
    
@client.event
async def on_ready():
    print('Botを起動しました。')

@client.event
async def on_message(message):
    if message.content.startswith('!region london'):
        await client.send_message(message.channel, region_london + change_bef)
        await client.edit_server(message.server,region='london')
        await client.send_message(message.channel, region_london + change_aft)
    elif message.content.startswith('!region japan'):
        await client.send_message(message.channel, region_japan + change_bef)
        await client.edit_server(message.server,region='japan')
        await client.send_message(message.channel, region_japan + change_aft)
    elif message.content.startswith('!region hongkong'):
        await client.send_message(message.channel, region_hongkong + change_bef)
        await client.edit_server(message.server,region='hongkong')
        await client.send_message(message.channel, region_hongkong + change_aft)
    elif message.content.startswith('!ikiteru'):
        reply = '生きてます'
        await client.send_message(message.channel, reply)

#ここにbotのアクセストークンを入力
client.run('***')

botの起動方法

$ py -3 discordbot.py

起動したbotにコマンドを打ってみる

現状使えるコマンド

!region japan
日本リージョンに変更
!region hongkong
香港リージョンに変更
!region london
ロンドンリージョンに変更
!ikiteru
botが生きてるか確認(生きてたら生きてますとレスポンスが返る)

※注意
現在のコードで短時間に2~3回リージョンを変更すると5分~10分くらいリージョンを変更できなくなる?(コードの仕様なのか問題なのか不明)
分かる人いたら教えてください。

3.Herokuへデプロイ

例によって自宅PC上で稼働させ続けるわけにもいかないのでHerokuを利用する。
Heroku CLI をインストールしておくこと
discordbot.py以外に追加で必要なもの

# Procfile
bot: python discordbot.py
# runtime.txt
python-3.6.8
# requirements.txt
discord.py==0.16.12

上記3ファイルをdiscordbot.pyと同じ階層に置いておく
以下アップロードするまでのコマンド

$ heroku login
$ cd <作業フォルダ>
$ heroku create <作成するアプリ名>
$ git init
$ heroku git:remote -a <作成したアプリ名>
$ git add .
$ git commit -am "first commit"
$ git push heroku master

ブラウザで確認してみる

botを起動(?)させる

$ heroku ps:scale bot=1

オンライン確認と、コマンド確認

4.まとめ

まだ試作品段階なのでコードもベタ書きで最低限の動作しか確認してないので暇があれば開発を進めていくつもり。

今回のコード
Discord_ServerRegionChanger - akaness1git GitHub

必要なもの
DiscordBotのアクセストークン
discord.py
Heroku CLI

参考記事等
Pythonで実用Discord bot(discord.py解説)
discord.py APIリファレンス

この記事が気に入ったらサポートをしてみませんか?