こんにちは、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画像の取得をしたりする方法をご紹介します。