I'm making a discord bot on python using disnake, but because I'm very new to this, I don't understand how to do what I want. The idea is to have one voice channel called "Create voice chat" and when user joines it, bot automatically creates new voice channel and moves that user to it. After there's no one in the created channel, it destroys.
I've found what I've need on autocode.com, but I can't figure out how to rewrite this on python using disnake. Any ideas?
That code from autocode(js)
const lib = require('lib')({token: process.env.STDLIB_SECRET_TOKEN});
const event = context.params.event;
const { guild_id, channel_id, user_id } = event
// The 'central' voice channel users must join first
const voiceChannelId = process.env.VOICE_CHANNEL_ID
// The voice channel name to create for the user
const voiceChannelName = `vc_${user_id}`
// Create a new voice channel when the user joins the specifc voice channel
const joinedChannel = channel_id === voiceChannelId
if (joinedChannel) {
const channel = await lib.discord.guilds['@0.1.0'].channels.create({
guild_id,
name: voiceChannelName,
type: 2, // vc
})
await lib.discord.guilds['@0.1.0'].members.update({
guild_id, user_id,
channel_id: channel.id,
});
return
}
// Delete the user's voice channel when the user disconnects
const leftChannel = !channel_id
if (leftChannel) {
const channels = await lib.discord.guilds['@0.1.0'].channels.list({ guild_id });
const channel = channels.find(c => c.name === voiceChannelName)
if (channel)
await lib.discord.channels['@0.2.0'].destroy({ channel_id: channel.id });
return
}
What I've done by myself(not working)
def _get_channel(self) -> disnake.abc.GuildChannel:
return self.channel
def __init__(self):
self.auto_channel = 1030505142820282408
self.auto_channel = self.guild.get_channel(self.auto_channel)
@bot.event
async def on_voice_state_update(self, member = disnake.Member, before = disnake.VoiceState, after = disnake.VoiceState) -> None:
if after.channel is not None and after.channel == auto_channel:
ch = await self.auto_channel.category.create_voice_channel(name=member.display_name, overwrites={**self.auto_channel.category.overwrites, member: disnake.PermissionOverwrite(connect=True, move_members=True, manage_channels=True, manage_roles=True)})
try:
await member.move_to(ch, reason='autochannel')
except disnake.HTTPException:
pass
if before.channel is not None and before.channel.id != auto_channel and before.channel.category.id == auto_channel and len(before.channel.members) == 0:
try:
await before.channel.delete()
except disnake.NotFound:
pass