Задать вопрос
@progerstas

Как сделать боту комманду включения музыки по ссылки с ютуба на голосовом канале?

Вот мой код (он не работает):
import discord
from discord.ext import commands
from pytube import YouTube

bot = commands.Bot(command_prefix="!")
TOKEN = "Njc1MzUwNTkzOTIwODI3Mzk0.Xj1-Cg.QOAvnyBEMdB-**********"
yt_url = 'https://www.youtube.com/results?'
game = discord.Game("Krunker.io")

@bot.event # загрузка
async def on_ready():
    print("Bot was launched!")
    await bot.change_presence(activity=game)

@bot.command(pass_context=True)
async def music(ctx, channel):
    url = ctx.message.content
    url = url.strip('https://www.youtube.com/watch?v=naIKplXzxTY')

    vc = await bot.connect()
    vc.play(discord.FFmpegPCMAudio(url))
    vc.is_playing()
    vc.pause()
    vc.resume()
    vc.stop()

bot.run(TOKEN)

Но выдает ошибку:
raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'NoneType' object has no attribute 'play'
  • Вопрос задан
  • 5972 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
h0w4rd
@h0w4rd
Python dev.
Я даже не стал вникать в суть, просто посмотрел на код 30 секунд. Рекомендую почитать комментарии и последовать советам. И пожелаю удачи.
import discord
from discord.ext import commands
# У меня зрение -3,5, но использования этого я не увидел.
from pytube import YouTube

bot = commands.Bot(command_prefix="!")
# Все что, не закрыто иксами - можно узнать. А, что закрыто - секретно и ДОЛЖНО быть скрыто. А лучше вообще токен не показывать)
TOKEN = "Njc1MzUwNTkzOTIwODI3Mzk0.xxxxx.xxxxx-xxxxx"
yt_url = 'https://www.youtube.com/results?'
game = discord.Game("Krunker.io")

@bot.event # загрузка
async def on_ready():
    print("Bot was launched!")
    await bot.change_presence(activity=game)

@bot.command(pass_context=True)
async def music(ctx, channel):
    url = ctx.message.content # вернет что-то вроде "!music youtube.com/watch"
    url = url.strip('https://www.youtube.com/watch?v=naIKplXzxTY') # почитайте что делает strip()

    vc = await bot.connect() # "бот, подключись!", а куда не сказано.
    vc.play(discord.FFmpegPCMAudio(url)) # ссылка на HTML страницу... а нужно АУДИО поток, а не станица. библиотека не может догадаться, что от нее хотят.
    vc.is_playing() # почитайте про "if"
    vc.pause() # зачем останавливать поток
    vc.resume() # и включать ._.
    vc.stop() # а после останавливать

bot.run(TOKEN)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы