-
-
Save peco2282/b8bb9231e3a301d97d1d4a5ff4966be5 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# main.py | |
import discord | |
client = discord.Client(intents=discord.Intents.all()) | |
# テキストチャンネルの先頭につける文字 | |
CHANNEL_PREFIX = "private_" | |
# botたちのロール名 (botはテキストチャンネルに参加していてほしい) | |
BOT_ROLE_NAME = "bot" | |
voice_channelID_1 = "ボイスチャンネルID" | |
voice_channelID_2 = "ボイスチャンネルID2" | |
@client.event | |
async def on_ready(): | |
print("ready") | |
def _initial_permissions(member: discord.Member): | |
guild = member.guild | |
channel = member.voice.channel | |
overwrites = { | |
guild.default_role: discord.PermissionOverwrite(read_messages=False), | |
member: discord.PermissionOverwrite(read_messages=True) | |
} | |
bot_role = discord.utils.get(guild.roles, name=BOT_ROLE_NAME) | |
if bot_role: | |
bot_overwrites = { | |
bot_role: discord.PermissionOverwrite(read_messages=True) | |
} | |
overwrites.update(bot_overwrites) | |
return overwrites | |
async def _create_new_channel(member: discord.Member, channel: discord.VoiceChannel): | |
# 権限追加したい場合はここで | |
overwrites = _initial_permissions(member) | |
# 以下同じカテゴリにチャンネル作成 | |
# {CHANNEL_PREFIX}{member.name}_voiceという名前で新規VC作成 | |
vc = await channel.category.create_voice_channel( | |
f"{CHANNEL_PREFIX}{member.name}_voice", | |
overwrites=overwrites | |
) | |
# {CHANNEL_PREFIX}{member.name}_textという名前で新規TC作成 | |
await channel.category.create_text_channel( | |
f"{CHANNEL_PREFIX}{member.name}_text", | |
overwrites=overwrites | |
) | |
# 作成したVCに移動 | |
await member.move_to(vc) | |
async def _delete_channels(member: discord.Member): | |
category = member.voice.channel.category | |
# メンバーのいるカテゴリで | |
# `{CHANNEL_PREFIX}{member.name}_text`, `{CHANNEL_PREFIX}{member.name}_voice` | |
# を探し、見つかった場合削除する | |
text_ch = discord.utils.get(category.text_channels, name=f"{CHANNEL_PREFIX}{member.name}_text") | |
vc = discord.utils.get(category.voice_channels, name=f"{CHANNEL_PREFIX}{member.name}_voice") | |
if text_ch: | |
await text_ch.delete() | |
if vc: | |
await vc.delete() | |
@client.event | |
async def on_voice_state_update( | |
member: discord.Member, | |
before: discord.VoiceState, | |
after: discord.VoiceState | |
): | |
if before.channel == after.channel: | |
return | |
# 新規参加 | |
if (before.channel is None) and after.channel: | |
# 参加先が指定したところの場合 | |
if after.channel.id == voice_channelID_1: | |
# 新しくちゃんねる作成 | |
await _create_new_channel(member, after.channel) | |
# ボイチャを抜けた時 | |
if before.channel and (after.channel is None): | |
# ボイチャ削除 | |
await _delete_channels(member) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment