Как проверить, является ли discord bot голосовым или уже подключенным

#python #python-3.x #discord #discord.py #discord.py-rewrite

#python #python-3.x #Discord #discord.py #discord.py-перезаписать

Вопрос:

Я создаю бота, в котором боту необходимо подключиться к голосовому каналу, вот мой код:

 import discord
from discord.ext import commands
from discord.utils import get

b = commands.Bot(command_prefix=".")

@b.event
async def on_ready():
    print("Bot is logged in")

@b.command(pass_context=True, aliases=['j'])
async def join(ctx):
    channel = ctx.message.author.voice.channel
    voice = get(b.voice_clients, guild=ctx.guild)

    if voice and voice.is_connected():
        await voice.move_to(channel)
        await ctx.send("Moved to the voice channel")

    elif #Check if the user is in the voice channel and the bot is not:
        voice = await channel.connect()
        await ctx.send("Connected to the voice channel")

    elif #Check if the user is in the voice channel
        await ctx.send("**Get in a voice channel**")

    elif #Check if the bot is already in the channel
        await ctx.send("**Already in the channel**")

b.run("stack overflow")
 

Итак, есть пара вещей, которые я хочу проверить перед входом в голосовой канал, я понял, как подключиться и перейти с другого голосового канала, но застрял там, я новичок в python, поэтому, если мой код можно упростить, любые предложения будут высоко оценены.

Комментарии:

1. Для первого вопроса проверьте, есть ли у человека VoiceState, и проверьте, есть ли у бота VoiceState, если у пользователя нет голосового состояния, попросите его присоединиться к голосовому каналу, 3-му, такому же, как if voice and voice.is_connected():

Ответ №1:

 @b.command(aliases=['j'])
async def join(ctx):
    bot_voice = ctx.guild.voice_client
    author_voice = ctx.author.voice

    if bot_voice and bot_voice.is_connected():
        await voice.move_to(author_voice.channel)
        await ctx.send("Moved to the voice channel")

    elif author_voice and not bot_voice: # Author connected but bot not connected
        voice = await author_voice.channel.connect()
        await ctx.send("Connected to the voice channel")

    elif not author_voice: # Author not connected
        await ctx.send("**Get in a voice channel**")

    elif ctx.bot.user in author_voice.channel.members # Bot and Author both connected
        await ctx.send("**Already in the channel**")
 

кстати, пожалуйста, не называйте своего бота b, это плохая практика