bot導入の関係で、自身が管理者権限を持つサーバーでのみ使用できる
Discordbotを準備する
1.まずDiscord Developer Portalを開き、discordにログインする。
2.右上の「New Application」をクリック。
3.アプリ名を入力し、利用規約とポリシーに同意チェックをして「Create」をクリック。
アプリ名は入室通知とした。
4.作成したアプリの管理画面が開く。画面左側の「Bot」を選択。
5.Botの管理画面になります。ここからアイコンやBOTのユーザー名を変更できる。
6.「Reset Token」をクリックしてトークンを取得し、どこかに保存しておく。
取得したトークンをネットやディスコードチャンネルに公開しないこと。
7.画面左側の「OAuth2」を選択
8.OAuth2 URL Generatorで招待リンクを作成する。
SCOPESはbotを選択し、下部の「GENERATED URL」をコピー。
コピーしたURLを開き、入室確認したいボイスチャンネルのあるサーバーを選択し「認証」をクリック
botがサーバーに招待される
AWSのEC2インスタンスを起動
1.AWSコンソールにサインインする。アカウントがない場合は作成しておく。
アマゾンウェブサービス(AWSクラウド)
2.EC2を選択し、「インスタンスを起動」をクリック
3.名前を入力
今回はdiscord_serverとした。
キーペア名を入力
今回はdiscord_server_keypairとした。
「キーペアを作成」をクリック
.pemファイルが.sshフォルダにダウンロードされる。
6.「インスタンスを起動」をクリック
7.インスタンスに接続
ブラウザからの接続と、コマンドプロンプトからの接続ができる。
aws→EC2→インスタンス→作成したインスタンを選択→「接続」
ブラウザからの場合は「EC2 Instance Connect」を、
コマンドプロンプトからは「SSHクライアント」を選択し、表示されたとおりに操作する。
(EC2 Instance Connectだとコピペができない)
ssh -i <キーペアのパス> ec2-user@<ec2パブリックIPv4アドレス>
以下のような表示がされれば成功。
, #_
~\_ ####_ Amazon Linux 2023
~~ \_#####\
~~ \###|
~~ \#/ ___ https://aws.amazon.com/linux/amazon-linux-2023
~~ V~' '->
~~~ /
~~._. _/
_/ _/
_/m/'
8.ライブラリのインストールやアップデートをする
python3やdiscord.py1、requestsをインストールする
ボイスチャンネルのIDを調べる
1.Discordアプリを開き、開発者モードをオンにする
歯車マークのユーザー設定を選択
アプリの設定欄の「詳細設定」を選択し、開発者モードのトグルをオンにする。
2.入室をチェックしたいボイスチャンネル上で右クリックし、チャンネルIDをコピーする
このIDもどこかに保存しておく。
LINEに通知するプログラムを作成
LINEの設定
1.LINE Notifyを友達追加する
IDは@linenotify
2.グループに通知を送りたい場合、グループに招待しておく
LINE Notifyの設定
1.(LINE Notify)(https://notify-bot.line.me/ja/)にLINEアカウントでログインする
2.右上のLINE名をクリックし、「マイページ」を選択
3.トークンを発行する
トークン名を入力し、
通知を送るユーザーかグループを選択
今回はトークン名はDiscordVoicechat、通知は「1:1でLINE Notifyから通知を受け取る」に設定した。
発行されたトークンはどこかに保存しておく。
botプログラムの作成と実行
EC2インスタンスに「.env」「bot_line.py」というファイルをvimで作成、もしくは作成したこれらのファイルを転送する2
1.「.env」ファイルにdiscordのBOTトークンとボイスチャンネルのID、LINE Notifyのトークンを設定する
vim .env
iでインサートモード、:wで保存、:qで終了、:wqで保存して終了
DISCORD_TOKEN=取得したDiscord Botのトークン
VOICE_CHANNEL_ID=ボイスチャンネルのID
LINE_TOKEN=取得したLINE Notifyのトークン
2.通知を送るpythonプログラムを作成
vim bot_line.py
import os
import discord
import requests
from dotenv import load_dotenv
load_dotenv()
DISCORD_TOKEN = os.getenv("DISCORD_TOKEN")
VOICE_CHANNEL_ID = int(os.getenv("VOICE_CHANNEL_ID"))
LINE_TOKEN=os.getenv("LINE_TOKEN")
intents = discord.Intents.default()
client = discord.Client(intents=intents)
def send_line_msg(msg):
acc_token = LINE_TOKEN
url = 'https://notify-api.line.me/api/notify'
headers = {'Authorization': 'Bearer ' + acc_token}
payload = {'message': msg}
requests.post(url, headers=headers, params=payload)
@client.event
async def on_voice_state_update(user, before, after):
if before.channel != after.channel:
if after.channel is not None and after.channel.id == VOICE_CHANNEL_ID:
send_line_msg(after.channel.name+ "に" + user.display_name + "が参加しました")
client.run(DISCORD_TOKEN)
3.ローカルでファイルを作成した場合、ファイルをEC2へ転送2
scp -i <秘密鍵のパス> <転送元のパス> <ユーザー名>@<パブリックIPアドレス]>:<転送先のパス>
4.プログラムを実行
EC2上で以下のコマンドでpythonファイルを実行する
python3 bot_line.py
5.この後ボイスチャンネルへ入室すると、LINEに
「<ボイスチャンネル名>に、<Discordユーザー名>が参加しました」と通知される。
参考
discordのボイスチャンネル入室を通知するbotの作成 - クロスパワークラウドブログ
Discord APIリファレンス
LINE Notify API Document