Python как узнать, что человек вошел в голосовой канал в Дискорде?
Подскажите, как узнать, что человек вошел в голосовой канал Дискорде? и как узнать, кто этот человек? Спасибо.
Я нашел вот такой код, чтобы скинуть имена всех, кто в голосовых чатах и перекинуть их в один. Может быть, можно как-то доработать этот код?
@bot.command()
@commands.has_permissions(administrator=True)
async def mtm(ctx):
c = 1
for channel in ctx.guild.voice_channels:
for member in channel.members:
await member.move_to(ctx.author.voice.channel)
await ctx.author.create_dm()
await ctx.author.dm_channel.send(
f'{c}) {member.name}'
)
c += 1
Главная проблема в том, чтобы проверять наличие людей постоянно, а не при вызове команды.
Ответы (1 шт):
Автор решения: xZartsust
→ Ссылка
Вот вам полностю рабочий код, пользуйтесь)
import logging
import config
import discord
from discord.ext import commands
from discord.utils import get
class PrivateChannel(commands.Cog):
def __init__(self, bot: commands.Bot) -> None:
super().__init__()
self.bot = bot
self.all_channel = []
@commands.Cog.listener()
async def on_voice_state_update(self, member: discord.Member, before: discord.VoiceState, after: discord.VoiceState):
category = int(config.category_id) # здесь айди категори в которой находиться канал с которого создается новый канал
if after.channel is not None and member.voice.channel.id == int(config.voice_id) and member.voice.channel is not None: # тут int(config.voice_id) надо указать айди канала с которого будет создаваться новый канал и в него переноситься пользователь
try:
category_main: discord.CategoryChannel = get(member.guild.categories, id = category)
channel: discord.VoiceChannel = await member.guild.create_voice_channel(name = f'Приватный ({member.display_name})', category = category_main)
await channel.set_permissions(member, connect = True, mute_members = True, move_members = True, manage_channels = True, manage_roles = True)
await member.move_to(channel)
self.all_channel.append(channel.id)
except Exception as e:
logging.exception(e)
elif after.channel is None and before.channel.id in self.all_channel and len(before.channel.members) == 0:
try:
del_channel: discord.VoiceChannel = get(member.guild.voice_channels, id = before.channel.id)
await del_channel.delete()
except Exception as e:
logging.exception(e)
def setup(bot: commands.Bot):
bot.add_cog(PrivateChannel(bot))