Discord 招待リンク生成BOT ver 0.1.0

自作アプリアイキャッチ Discord Bot
この記事は約7分で読めます。

Discord 招待リンク生成BOT

ちょっと更新しました
botの説明とかは以下参照

更新内容

  • 招待者の名前を表示するようにした
  • 招待リンクの期限が切れた場合にも自動で削除するようにした

ソースコード

import discord
import time
from discord.ext import commands, tasks

### 設定 ###
# Botトークン
BOT_TOKEN = "BOT用トークン"
# 招待リンク期限(秒)
INVITE_LIMIT = 3000
# ボイスチャンネルに居ない時にボイスチャンネルに入るよう促すメッセージを表示するかどうか
# True = 表示する / False = 表示しない
VOICE_CHANNEL_CHECK_MESSAGE = False


intents = discord.Intents.default()
intents.members = True
intents.voice_states = True
intents.message_content = True

bot = commands.Bot(command_prefix="!", intents=intents)

# 招待リンクとメッセージID、テキストチャンネルID、ユーザーIDを保存する辞書
invite_to_message = {}

@bot.event
async def on_ready():
    print("Bot is ready!")
    # 定期的にボイスチャンネルのメンバーをチェックするタスクを開始
    check_channel_members.start()

@bot.event
async def on_message(message):
    # メッセージ送信者がBOTじゃないことを確認
    if message.author.bot:
        return

    # メンションがあるかどうかを確認
    if message.mentions:
        # メンションされたユーザーを取得
        mentioned_user = message.mentions[0]
        # メンションの内容を取得
        message_content = message.content

        # メッセージにメンションのみが含まれているかどうかを確認
        if message_content == mentioned_user.mention:
            # メッセージ送信者のいるボイスチャンネルを取得
            voice_state = message.author.voice
            if not voice_state or not voice_state.channel:
                if VOICE_CHANNEL_CHECK_MESSAGE:
                    await message.channel.send(f"{mentioned_user.mention} さん、ボイスチャンネルに参加してからもう一度メンションしてください。")
                return
            
            # ボイスチャンネル取得
            voice_channel = voice_state.channel
            # 招待リンクの期限を設定
            invite = await voice_channel.create_invite(max_age=INVITE_LIMIT)
            # 招待リンクメッセージ設定
            invite_message = await message.channel.send(f"{mentioned_user.mention} さん、{message.author.display_name} さんが{voice_channel.name} で一緒に遊びたがっています\n{invite.url}")

            # 辞書に招待リンクコードとメッセージID、テキストチャンネルID、メンションされたユーザーIDを保存(削除処理用)
            invite_to_message[invite.code] = (invite_message.id, message.channel.id, mentioned_user.id, time.time() + INVITE_LIMIT)
            # 最初のメンションメッセージを削除
            await message.delete()

# ボイスチャンネルのメンバーを定期的にチェックするタスク
@tasks.loop(seconds=10)
async def check_channel_members():
    for invite_code, (message_id, text_channel_id, user_id, limit_time) in list(invite_to_message.items()):
        text_channel = bot.get_channel(text_channel_id)
        # 招待があるかチェック
        if text_channel is not None:
            for channel in bot.get_all_channels():
                # 招待されたユーザーが現在チャンネルにいるか、期限切れでないかをチェック
                if isinstance(channel, discord.VoiceChannel) and any(member.id == user_id for member in channel.members) or time.time() > limit_time:
                    try:
                        message = await text_channel.fetch_message(message_id)
                        await message.delete()
                    except discord.NotFound:
                        pass # メッセージが既に削除されている場合は無視
                    # 招待リンクとメッセージの情報を辞書から削除
                    del invite_to_message[invite_code]
                    break

bot.run(BOT_TOKEN)

ダウンロード

ダウンロード – ver 0.1.0 (2024/06/24)
ダウンロード – ver 0.0.1 (2024/06/10)

使用方法

  1. Pythonのインストール
    • Pythonの公式サイトからPythonをダウンロードする
      • 公式サイトのDownloadsタブ → Windows
      • Latest Python 3 Release – Python 3.**.** を選択
      • 下の方にあるFilesの中からWindows Installer をクリックでDL(32/64bitはお使いの環境に合わせてください)
      • ダウンロードしたファイルを実行しインストール
        • インストールファイル実行時の最初の画面一番下にある「Add python.exe to PATH」にチェックを入れる
  2. Discord.pyのインストール
    • 「python -m pip install discord.py」を入力してENTER
      • 確認作業直後に行う場合(入力欄左が>>>になってる場合)は、Ctrl+Zを押してENTERを押し一度pythonから抜けてから行う
  3. botファイルをダウンロードし、回答して出てきたpyファイルを適当なフォルダに配置
    • メモ帳等でファイルを開き、botトークン等の設定を行う
    • コマンドプロンプトからbotファイルを実行
      • コマンドプロンプトで「python (配置先フォルダ)\discordinvitebot.py」
        • 例) 「python C:\discordinvitebot\discordinvitebot.py」

動作

  1. @***** でメンションを飛ばす
  2. 1で送ったメンションメッセージが削除され、botによる招待リンクが貼られる
  3. 3招待リンクを使用が使用される(≒招待チャンネルに対象者が参加する)とbotによる招待リンクが自動で削除される

スクリーンショット

コメント

タイトルとURLをコピーしました