👾

【Discord.py】スレッドを自動生成するbotを作る

2025/03/08に公開

概要

もともとThread Managerというbotを利用していたのですが、botがダウンしてスレッドが作られないことが多くあり、困っておりました。

ということで、自分でスレッドを自動で作成するbotを開発しようと思います。

Botの仕様

以下の仕様でbotを作成します

  • スレッドタイトル: メッセージ投稿したユーザーの表示名をタイトルに設定
  • 自動アーカイブ: 作成したスレッドは1週間(10080分)で自動的にアーカイブ
  • Botの挙動: スレッド作成後、Botはそのスレッドから退出する(スレッドにbotが残っていると、スレッドのメッセージにも反応してしまうため)

Discord側の仕様

  • スレッドに招待できるメンバの制限: 最大1000人(公式FAQ
  • サーバーで存在できるスレッドの数:1000個(らしい。調査中)

botに必要な権限

  • 公開スレッドの作成:Botがメッセージを受信したチャンネルでスレッドを自動作成するための権限が必要

実装内容

botが存在するチャンネルにメッセージが送信された際に、自動でスレッドを生成してBotをスレッド退出させるコードです。

import os
import discord
from dotenv import load_dotenv
load_dotenv()

TOKEN = os.environ['TOKEN']

intents = discord.Intents.default()
client = discord.Client(intents=intents)

@client.event
async def on_message(message):
    # テキストチャンネルかつ通常のメッセージの場合にのみ処理
    if isinstance(message.channel, discord.channel.TextChannel) and message.type == discord.MessageType.default:
        # メッセージ送信者の表示名を利用してスレッド名を設定し、1週間の自動アーカイブを指定
        thread = await message.create_thread(name=f"{message.author.display_name}'s thread", auto_archive_duration=10080)
        # スレッド作成後、Botはそのスレッドから退出する
        await thread.leave()

@client.event
async def on_ready():
    print("discord.py v" + discord.__version__)

client.run(str(TOKEN))

動作チェック

では実際にbotを起動して、スレッドが作られるか確認しましょう。

問題なさそうですね。

最後に

約1年ほど、複数のサーバーで稼働してる実績があるのでコード的にも問題ないと思います。

Discussion