Я создаю бота для Discord на Python, используя disnake, но поскольку я новичок в этом деле, я не понимаю, как делать то, что хочу. Идея состоит в том, чтобы иметь один голосовой канал под названием «Создать голосовой чат», и когда пользователь присоединяется к нему, бот автоматически создает новый голосовой канал и перемещает в него этого пользователя. После того, как в созданном канале никого нет, он уничтожается.
Нашел на autocode.com то, что мне нужно, но не могу сообразить, как это переписать на python с помощью диснейка. Есть идеи?
Этот код из 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
}
Что я сделал сам (не работает)
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
Подробнее здесь: https://stackoverflow.com/questions/740 ... on-disnake
Как написать бот Discord Auto-voice на python disnake? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Музыкальный бот Discord, когда я пропускаю трек, бот пропускает сразу 2 трека
Anonymous » » в форуме Python - 0 Ответы
- 39 Просмотры
-
Последнее сообщение Anonymous
-