discord bot作ってみた

久しぶりの投稿ですね…

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でしばらく何か書こうと思います。

この記事が良かったら、シェアしてね!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です