2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Discordのボイスチャンネル入室をLINEで通知する

Last updated at Posted at 2024-03-25

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とした。
image.png

4.OSを選択
今回はAmazonLinux
image.png

5.キーペアを作成
image.png

キーペア名を入力
今回はdiscord_server_keypairとした。
image.png
「キーペアを作成」をクリック
.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アプリを開き、開発者モードをオンにする
歯車マークのユーザー設定を選択
アプリの設定欄の「詳細設定」を選択し、開発者モードのトグルをオンにする。
image.png
2.入室をチェックしたいボイスチャンネル上で右クリックし、チャンネルIDをコピーする
このIDもどこかに保存しておく。
image.png

LINEに通知するプログラムを作成

LINEの設定

1.LINE Notifyを友達追加する
IDは@linenotify
2.グループに通知を送りたい場合、グループに招待しておく

LINE Notifyの設定

1.(LINE Notify)(https://notify-bot.line.me/ja/)にLINEアカウントでログインする

2.右上のLINE名をクリックし、「マイページ」を選択
3.トークンを発行する
image.png
トークン名を入力し、
通知を送るユーザーかグループを選択
今回はトークン名はDiscordVoicechat、通知は「1:1でLINE Notifyから通知を受け取る」に設定した。
発行されたトークンはどこかに保存しておく。

botプログラムの作成と実行

EC2インスタンスに「.env」「bot_line.py」というファイルをvimで作成、もしくは作成したこれらのファイルを転送する2
1.「.env」ファイルにdiscordのBOTトークンとボイスチャンネルのID、LINE Notifyのトークンを設定する

vimで作成する場合
vim .env

iでインサートモード、:wで保存、:qで終了、:wqで保存して終了

.env
DISCORD_TOKEN=取得したDiscord Botのトークン
VOICE_CHANNEL_ID=ボイスチャンネルのID
LINE_TOKEN=取得したLINE Notifyのトークン

2.通知を送るpythonプログラムを作成

vimで作成する場合
vim bot_line.py
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

  1. Discord API インストール

  2. scpコマンドでAWSのEC2とローカル間でファイル・ディレクトリを転送する 2

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?