#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, это плохая практика