概要
on_voice_state_update
を利用してDiscordの通話を記録するBOTを作成する。
無料のホスティングサービスを使う。
環境
まずホスティングは「replit」を使用する。
実装
BOTを早速実装していきます。
コード作成
コードを利用する場合に際して
<サーバーID>
と<テキストID>
は適宜、置き換えてください。
main.py
# 必須ライブラリをインポート
from os import sync
import discord
from datetime import datetime, timedelta
# tokenファイルを読みこみ、内容を返す
# 第一引数にトークンのファイルパスを取る
def getToken(filePath):
f = open(filePath, 'r', encoding="UTF-8")
data = f.read()
f.close()
return data
# トークンと環境変数等を取得する
TOKEN = getToken("token")
SERVER_ID = <サーバーID>
TXT_ID = <テキストID>
print("Success > Got token and SERVER and TEXT ID.")
client = discord.Client()
# クライアントクラスを作成する
@client.event
async def on_ready():
print("Success > Login.")
# ボイスチャットに変化があった際のイベント
@client.event
async def on_voice_state_update(member, before, after):
print("Log > Event was called.")
if member.guild.id == SERVER_ID:
if before.channel != after.channel:
now = datetime.utcnow() + timedelta(hours=9)
alert_channel = client.get_channel(TXT_ID)
if before.channel is None:
msg = f"== {now:%m/%d %H:%M} ==\n{member.name} さん <#{after.channel.id}> へようこそ!"
print(msg)
await alert_channel.send(msg)
elif after.channel is None:
msg = f"== {now:%m/%d %H:%M} ==\n{member.name} さん <#{before.channel.id}> へまた来てね!"
print(msg)
await alert_channel.send(msg)
# クライアントクラスを実行する。
client.run(TOKEN)
コード中の必須情報
<サーバーID>
は記録するサーバーのIDです。
記録したいサーバーのアイコンを右クリックして「IDをコピー」から取得してください。
<テキストID>
はログを吐き出すテキストチャンネルのIDです。
テキストチャンネル上で右クリックをして「IDをコピー」から取得してください。
次にBOTのトークンを入れるファイル(token
)を作ります。
token
トークンをここに書き込む
ここまでのコードをGitHubに置いておきました。
実行
VCに入退出した時にメッセージが送信されて、標準出力に書き出されていればOKです。
ホスティングサービスに乗っける
shellからdiscord.py
の導入
以下コマンドで導入する。
> pip3 install -U discord.py[voice]
導入できたことを確認するにはConsole
にて以下コマンド。
>>> import discord
こんな感じでエラーが出なければ、良きです。
Gitからクローンする
> git clone https://github.com/ayato-shitomi/discord_vc_logger.git
あとはReplitで実行すればOK!
常時動かす
常時起動したい!って方はこちらを参考にしてみるといいかもです!
参考リンク