LoginSignup
4
8

More than 1 year has passed since last update.

完全無料ホスティングでDiscordBotを作った話。

Posted at

:stuck_out_tongue: 概要

on_voice_state_updateを利用してDiscordの通話を記録するBOTを作成する。
無料のホスティングサービスを使う。

:stuck_out_tongue: 環境

まずホスティングは「replit」を使用する。

:stuck_out_tongue: 実装

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)

コード中の必須情報

Discordの開発者モードをオンにします。
image.png

<サーバーID>は記録するサーバーのIDです。
記録したいサーバーのアイコンを右クリックして「IDをコピー」から取得してください。
image.png

<テキストID>はログを吐き出すテキストチャンネルのIDです。
テキストチャンネル上で右クリックをして「IDをコピー」から取得してください。
image.png

次にBOTのトークンを入れるファイル(token)を作ります。

token
トークンをここに書き込む

ここまでのコードをGitHubに置いておきました。

実行

VCに入退出した時にメッセージが送信されて、標準出力に書き出されていればOKです。
image.png

:stuck_out_tongue: ホスティングサービスに乗っける

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!

常時動かす

常時起動したい!って方はこちらを参考にしてみるといいかもです!

:stuck_out_tongue: 参考リンク

4
8
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
4
8