Python
Splatoon
discord
discord.py

Splatoon2のDiscordBot作った話

ゲーム用のDiscordBotをつくった

スプラのルールやステージ情報が欲しいことが度々あったため身内サーバー用に簡単なbotを作成した。
身内用のBotには外部の機能を使ったAIも搭載しているのですが準備が面倒なため次回紹介します。

はじめに

主な機能としてルールとステージ情報の表示をしてくれます
キャプチャ0913.PNG

キー 返信
おはよう おはよう、〇〇
ガチマ ガチマルール+ステージ
次のガチマ 次のガチマルール+ステージ
リグマ リグマルール+ステージ
次のリグマ 次のリグマルール+ステージ
ナワバリ ナワバリステージ

準備と作成

制作環境は
- win10pro
- Python3.6

Botの登録方法はこの記事の前半部分が分かりやすかったのでオススメ
Pythonで実用Discord bot(discord.py解説)

コマンドプロンプトでdiscord.pyをインストール

$ pip install discord.py

そうしたら以下のコードをdisbot.pyとして保存

disbot.py
import requests
import json
import discord

def getStageInfo(index=0):
    '''
        ステージ情報
    '''
    links = ('gachi/now','gachi/next','league/now','leage/next','regular/now','regular/next')
    headers = {"User-Agent": "サービス名/バージョンとか(連絡先 twitter @とか)"}
    url = "https://spla2.yuu26.com/" + links[index]
    response = requests.get(url,headers=headers)
    dic = json.loads(response.text)
    dic = dic['result'][0]

    return '**{}**で__{}__と__{}__だぞ'.format(dic['rule'],dic['maps'][0],dic['maps'][1])

#clientオブジェクトの生成
client = discord.Client()

@client.event
async def on_ready():
    print('ログインしました')
    print(client.user.name) #BOT名
    print(client.user.id) #BOTのID
    print('------')


@client.event
async def on_message(message):

    if message.content.startswith('おはよう'):
        if client.user != message.author:
            m = "おはよう、" + message.author.name + "!"
            await client.send_message(message.channel, m)

    if message.content.startswith("司令"):
        if client.user != message.author:
            m = "なんだ、" + message.author.name +"!"
            await client.send_message(message.channel, m)

    if client.user.id in message.content:
        await client.send_message(message.channel, '{} 呼んだか?'.format(message.author.mention))

    if message.content.startswith('ガチマ'):
        m = getStageInfo(0)
        await client.send_message(message.channel, m)

    if message.content.startswith("次のガチマ"):
        m = getStageInfo(1)
        await client.send_message(message.channel, m)

    if message.content.startswith("リグマ"):
        m = getStageInfo(2)
        await client.send_message(message.channel, m)

    if message.content.startswith("次のリグマ"):
        m = getStageInfo(3)
        await client.send_message(message.channel, m)

    if message.content.startswith("ナワバリ"):
        m = getStageInfo(4)
        await client.send_message(message.channel, m)

    if message.content.startswith("次のナワバリ"):
        m = getStageInfo(5)
        await client.send_message(message.channel, m)


client.run("xxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxx")

必要変更箇所

 headers = {"User-Agent": "サービス名/バージョンとか(連絡先 twitter @とか)"}

 headers = {"User-Agent": "sampleBot(twitter @example)"}

他の人のAPIを利用してデータを受け取っているので上記のようにUser-Agentに連絡先の表記をお願いします。
詳しくは利用先のSpla2 APIの注意事項を読んでください。

client.run("xxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxx")

xxxxxxx-xxxxxxxxxの部分に取得したアクセストークンを代入

実行

$ python disbot.py

上記をコマンドプロントで実行

ログインしました
(BOTの名前)
botID
------

上記が表示されたらログインは成功です
Discordの方でキーワードを打てば返信がくると思います
おつかれさまでした。

最後に

はじめてのBot作成だったけどなかなか良い勉強になった。
今回はボイスチャットの方に触れなかったけどこれも合わせるとゲームのサポートとか遊びの要素も追加できて、かなりカスタマイズ性がある。機会があれば音声の方も触ってみたい。

普段はスプラトゥーンやってるから暇な兄貴はTwitterに至急連絡くれや
では、また


ikayome
-Twitter @IkayomeCh