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)
  • Вопрос задан
  • 306 просмотров
Решения вопроса 1
phaggi
@phaggi
лужу, паяю, ЭВМы починяю
Переменная server в 40-ю строку вашего кода приходит со значением None. У None нет метода .voice_channels
Вам надо понять, где и почему переменная serverне получила ссылку на объект, который ожидается в server

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

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

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

Войти через центр авторизации
Похожие вопросы