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 = True
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, voice_channel.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, voice_channel_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():
channel = bot.get_channel(voice_channel_id)
# 招待されたユーザーが現在チャンネルにいるか、期限切れでないかをチェック
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.1 (2024/09/30)
ダウンロード – ver 0.1.0 (2024/06/24)
ダウンロード – ver 0.0.1 (2024/06/10)
使用方法
- Pythonのインストール
- Pythonの公式サイトからPythonをダウンロードする
- 公式サイトのDownloadsタブ → Windows
- Latest Python 3 Release – Python 3.**.** を選択
- 下の方にあるFilesの中からWindows Installer をクリックでDL(32/64bitはお使いの環境に合わせてください)
- ダウンロードしたファイルを実行しインストール
- インストールファイル実行時の最初の画面一番下にある「Add python.exe to PATH」にチェックを入れる
- Pythonの公式サイトからPythonをダウンロードする
- Discord.pyのインストール
- 「python -m pip install discord.py」を入力してENTER
- 確認作業直後に行う場合(入力欄左が>>>になってる場合)は、Ctrl+Zを押してENTERを押し一度pythonから抜けてから行う
- 「python -m pip install discord.py」を入力してENTER
- botファイルをダウンロードし、解凍して出てきたpyファイルを適当なフォルダに配置
- メモ帳等でファイルを開き、botトークン等の設定を行う
- コマンドプロンプトからbotファイルを実行
- コマンドプロンプトで「python (配置先フォルダ)\discordinvitebot.py」
- 例) 「python C:\discordinvitebot\discordinvitebot.py」
- コマンドプロンプトで「python (配置先フォルダ)\discordinvitebot.py」
動作
- @***** でメンションを飛ばす
- 1で送ったメンションメッセージが削除され、botによる招待リンクが貼られる
- 3招待リンクを使用が使用される(≒招待チャンネルに対象者が参加する)とbotによる招待リンクが自動で削除される
コメント