Blogブログ

【HLC-Bot】Discordで動くBotを作ってみた。具体的な実装方法をご紹介!-Part1-

こんにちは、HLCのいろいろエンジニアの掛橋です🧑‍💻

前回の記事でDiscord上で動くBot、通称HLC-Botをご紹介したのですが、
今回は、具体的な実装方法についてご紹介。(前回の記事はこちら)

HLC-Botの仕様

Discordで特定の文字を入力すると、DiscordのBotを介してGoogleSheets(SpreadSheet)に書き込みをしてくれる。
Discordで特定の文字を入力すると、Botがgif画像を取得してくれる。
(※この記事だけでは上記仕様は満たせません。Part2にて完成する予定です。少々お待ちください)

利用するサービス

Discord、GoogleCloudPlatform
(次回の記事でGitHub、HEROKU、tenorを使います)

この記事でできること

ローカルでbotを実行しDiscordでメッセージを送ると、スプレッドシートに書き込みができる。

1.DiscordのBotを作成する。

https://discord.com/developers/applications

右上にあるNewApplicationよりDiscord上で動くBotを作成します。

Bot名を記載して追加しましょう。

Botタブより、Add Bot

Bot名はBotタブより、後からでも変更可能です。(画像も変更すると見栄えもいいね!)

OAuth2タブより、OAuth2 URL Generator内、
botのチェックボックスにチェックを入れると、URLが生成されます。
新しくブラウザのタブを開き、そのURLを貼り付けてください。

どのサーバーに追加するか選択肢、認証ボタンを押してください。
※サーバーの管理権限がない場合、サーバーを選択することができないので注意!
管理者にURLを開いてもらうか、管理者権限を付与してもらいましょう。

Botがサーバーに導入できれば、このような通知が入ります。

2.Google Cloud Platformの設定

https://console.cloud.google.com/
上記URLより、新規プロジェクトを作成します。
プロジェクトの選択より、新しいプロジェクトを選択

プロジェクト名を入力します

スプレッドシートを書き込むためにライブラリの導入
ハンバーガーメニューより APIとサービス → ライブラリ

Google Drive APIと Google Sheets API を有効にします。
検索欄にそれぞれ入力し、有効化しましょう。


認証情報を設定する
左のメニューより、認証情報

認証情報を作成→サービスアカウント

サービスアカウント名、サービスアカウントIDを入力

作成して続行ボタンを押すとロール(役割)を設定できます。
現在使用中の欄に、オーナー(全リソースの完全アクセス権)があればOKです。
確認後、完了ボタンを押してください。

サービスアカウントの欄に.gserviceaccount.comのメールアドレスが追加されています。
こちらをクリックしましょう。

キーのタブより、鍵を追加


JSONが選択された状態で作成。

すると、jsonファイルがダウンロードされると思います。
後で使用するので、ファイルは大切に置いておきましょう。

スプレッドシートの設定

上記で取得したjsonファイルを開いてください。
その中にclient_emailという項目があるので、そのメールアドレスをコピーしてください。

書き込みをしたいスプレッドシートを開き、
共有ボタンより先ほどコピーしたメールアドレスを貼り付け、エンターを押す。

権限が編集者であることをご確認ください。

Botを動かすソース作成(Python)

Python3を使用します。
(※ローカルで動作確認したい場合、Python3の環境構築が必要です。)
新規プロジェクトを作成。
今回botを実行する処理はmain.pyというファイルに書いていきます。
main.pyを新規作成しましょう。

main.pyと同階層に鍵生成時にダウンロードされたjsonファイルを配置します。

ファイル構成はこんな感じ

HLC-bot(プロジェクトのフォルダ)
  |- main.py
  |- ***.json

main.pyのコード

import gspread
import discord
from oauth2client.service_account import ServiceAccountCredentials

scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']

# ***.json は各自ダウンロードしたjsonファイル名に変更してください
credentials = ServiceAccountCredentials.from_json_keyfile_name('****.json', scope)
gc = gspread.authorize(credentials)

# スプレッドシートのキーを入れてください
SPREAD_SHEET_KEY = "****"
workbook = gc.open_by_key(SPREAD_SHEET_KEY)

#DiscordのBotのTokenを入れてください。
DISCORD_TOKEN = "****"
client = discord.Client()

@client.event
async def on_message(message):  # メッセージを受け取ったときの挙動
    if message.author.bot:  # Botのメッセージは除く
        return
    print(message.content)
    worksheet_list = workbook.worksheets()
    # 1つ目のシートのセル(1,1)をDiscordに送ったメッセージ内容で更新
    worksheet_list[0].update_cell(1, 1, message.content)

client.run(DISCORD_TOKEN)

main.pyの変数SPREAD_SHEET_KEYには書き込むスプレッドシートのURL /d/の後ろ から /edit#gid=0 の文字をコピーして貼り付けてください

https://discord.com/developers/applications/
discordのdeveloperページよりBotのTokenをコピーして変数DISCORD_TOKENに値を入れましょう。

コマンド

python main.py

にてローカルでbotを実行してください

DiscordでBotが存在するサーバー上にてメッセージを送信すると

スプレッドシートのA1のセルに入力した文字が記載されます。

以上です。
お疲れ様でした!!!

次記事ではBotをHEROKU上で動かしたり、Tenorからgif画像の取得をしたりする方法をご紹介します。

掛橋

執筆者

Developer

掛橋