久しぶりの投稿ですね…
discord botはdisocrd.pyとInteractions.pyを使用しました。(スラッシュコマンドはInteractions.pyを使っています)
なんで、discord botを作ろうと思ったかと言うと、動画投稿者で新しい動画を手動で動画のURLを送信していたのでなんか自動化したいなと思ったので作りました。
disocrd botに追加したいのはyoutubeで新しい動画が上がったら自動的にdiscordのチャットに送信する機能です。
使い言語はpythonです。
youtubeで新しい動画を投稿されたのを確認するためにyoutubeのfeeds(RSS)を使います。
処理の仕方は新しい動画を投稿されたらサブプロセスで、youtube_send.pyを起動してdiscordに送信するという謎のやり方でします。
例のコード
何度も同じ動画URLを送り続けるのでデータベースなどに新しい動画のIDを登録していたほうがいいです
import feedparser, subprocess, time, shlex, sys
youtube_channel_ID = ""
youtube_URL = 'https://www.youtube.com/feeds/videos.xml?channel_id='+youtube_channel_ID
def all_reset():
response = None
latest_entry = None
video_url = None
video_id = None
video_title = None
while True:
response = feedparser.parse(youtube_URL)
latest_entry = response.entries[0]
video_url = latest_entry.link
video_id = video_url.split("v=")[1]
video_title = latest_entry.title
video_url = shlex.quote(video_url)
video_title = shlex.quote(video_title)
subprocess.run(f"python3 ./youtube_send.py {video_title} {video_url}", shell=True)
all_reset()
try:
time.sleep(120)
except KeyboardInterrupt:
sys.exit()
import sys, discord
token = ""
discord_channel_ID = ""
intents = discord.Intents.default()
title = sys.argv[1]
url = sys.argv[2]
title = title.replace("'", '')
url = url.replace("'", '')
client = discord.Client(intents=intents)
@bot.event
async def on_ready():
for channel in bot.get_all_channels():
if str(channel.id) == discord_channel_ID:
message_content = f'動画タイトル: {title}\n動画URL: {url}'
await channel.send(message_content)
await bot.close()
sys.exit()
client.run(token)
youtube.pyのコードの解説
youtube_channel_ID = ""
動画更新情報を知りたいチャンネルのIDを入れてください。
チャンネルIDの調べ方はググったらすぐに出ます。
all_reset()
一部の変数を全て初期化する関数ですが、必要かは分かりません。
あとは見たらわかるレベルだと思います。
例のコードには120秒ごとに新しい動画のチェックをしますが、通常は3600秒とかでいいと思います。
流石に、1秒などの短い時間でチェックはyoutube側にブロックされると思うためやめといたほうがいいです。
youtube_send.pyのコード解説
discord_channel_ID = ""
送信したいチャットチャンネルのIDを入れてください。
botがチャットチャンネルにyoutubeの動画を送信すると送信プログラムは終了します。
動画投稿者のdiscordサーバーで動いてるbotはこれ以外にも無駄機能がいっぱいあります。
例えば、スラッシュコマンドでChatGPTを会話できるとかです。(無効化してますけど)
pythonはphpよりも使える場面が多いのでpythonでしばらく何か書こうと思います。
コメントを残す