Задать вопрос
py_aidar
@py_aidar
Просто изучаю Языки Программирования.

Почему мой бот discord.py не может подключиться к голосовому каналу?

Бот включается в онлайн, но при вводе команды исполнении музыки выдаёт следующую ошибку:

Ignoring exception in command play:
Traceback (most recent call last):
  File "C:\Users\User\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\core.py", line 85, in wrapped
    ret = await coro(*args, **kwargs)
  File "C:\Users\User\Desktop\music saul v15\main.py", line 40, in play
    voice_channel = discord.utils.get(server.voice_channels, name = name_channel)
AttributeError: 'NoneType' object has no attribute 'voice_channels'

Исходный код:
# -*- coding: utf-8 -*-

import discord
from discord.ext import commands
from config import token

import youtube_dl
import os

bot = commands.Bot(command_prefix="S.")

@bot.event
async def on_ready():
    print('Saul is here')

server, server_id, name_channel = None, None, None

domains = ['https://www.youtube.com/', 'http://www.youtube.com/', 'https://www.yotu.be/', 'http://www.youtu.be/']
async def check_domains(link):
    for x in domains:
        if link.startwith(x):
            return True
    return False


@bot.command()
async def play(ctx, *, command = None):
    """Воспроизводит музяку!"""
    global server, server_id, name_channel
    author = ctx.author
    if command == None:
        server = ctx.guild
        name_channel = author.voice.channel.name
        voice_channel = discord.utils.get(server.voice_commands, name=name_channel)
    params = command.split(' ')
    
    if len(params) == 1:
        sourse = params[0]
        name_channel = author.voice.channel.name
        voice_channel = discord.utils.get(server.voice_channels, name=name_channel)
        print('param 1')
    elif len(params) == 3:
        server_id = params[0] 
        voice_id = params[1]
        sourse = params[2]
        try:
            server_id = int(server_id)
            voice_id = int(voice_id)
        except:
            await ctx.channel.send(f'{author.mention}, id сервака или войсв должен быть целочисленным!')
            return
        print('param 3')
        server = bot.get_guild(server_id)
        voice_channel = discord.utils.get(server.voice_channels, id=voice_id)
    else:
        await ctx.channel.send(f'{author.mention} команада не корректна, пупсик')
        return

    voice = discord.utils.get(bot.voice_clients, guild=server)
    if voice is None:
        await voice_channel.connect()
        voice = discord.utils.get(bot.voice_clients, guild=server)

    if sourse == None:
        pass
    elif sourse.startswitch('http'):
        if not check_domains(sourse):
            await ctx.channel.send(f'{author.mention} ссылка не является разрешенной, долбоёб')
            return
        song_there = os.path.isfile('music/song.mp3')
        try:
            if song_there:
                os.remove('song.mp3')
        except PermissionError:
            await ctx.channel.send('Недостаточно прав для удаления файла!')
            return

        ydl_opts = {
            'format': 'bestaudio/best',
            'postprocessors': [
                {
                    'key': 'FFmpegExtractAudio',
                    'preferredcodec': 'mp3',
                    'preferredquality': '192',

                }
            ],
        }

        with youtube_dl.YoutubeDL(ydl_opts) as ydl:
            ydl.download([sourse])
        for file in os.listdir('music/'):
            if file.endswitch('.mp3'):
                os.rename(file, 'song.mp3')
        voice.play(discord.FFmpegPCMAudio('music/song.mp3'))
    else:
        voice.play(discord.FFmpegPCMAudio('music/{sourse}'))



bot.run(token)
  • Вопрос задан
  • 358 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 1
phaggi
@phaggi
лужу, паяю, ЭВМы починяю
Переменная server в 40-ю строку вашего кода приходит со значением None. У None нет метода .voice_channels
Вам надо понять, где и почему переменная serverне получила ссылку на объект, который ожидается в server

Разбираться в ваших длиннющих «комбо-функциях» нет никакого желания. Рекомендую рефакторить код, разбить функции на много мелких и отлаживать их по-отдельности.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
fenrir1121
@fenrir1121 Куратор тега discord.py
Начни с документации
Почему мой бот discord.py не может подключиться к голосовому каналу?
Потому что
слушал и писал как показано в одном видеоуроке на disord.py

Если не способны перевести и понять ошибку начните с изучения основ языка.
И бросайте смотреть видео на которых учат писать подобный код, автор даже на Джуна не тянет.
Ответ написан
Ваш ответ на вопрос

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

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