Как сделать музыкального бота в Discord?
Сразу извиняюсь, если вопрос глупый, но я не могу понять из-за чего эта ошибка. Сам бот заходит в голосовой канал и подсвечивает, т.е. работает, но ничего не слышно.
import asyncio import discord import youtube_dl from discord.ext import commands # Suppress noise about console usage from errors youtube_dl.utils.bug_reports_message = lambda: '' ytdl_format_options = < 'format': 'bestaudio/best', 'outtmpl': '%(extractor)s-%(id)s-%(title)s.%(ext)s', 'restrictfilenames': True, 'noplaylist': True, 'nocheckcertificate': True, 'ignoreerrors': False, 'logtostderr': False, 'quiet': True, 'no_warnings': True, 'default_search': 'auto', 'source_address': '0.0.0.0' # bind to ipv4 since ipv6 addresses cause issues sometimes >ffmpeg_options = < 'options': '-vn' >ytdl = youtube_dl.YoutubeDL(ytdl_format_options) class YTDLSource(discord.PCMVolumeTransformer): def __init__(self, source, *, data, volume=0.5): super().__init__(source, volume) self.data = data self.title = data.get('title') self.url = data.get('url') @classmethod async def from_url(cls, url, *, loop=None, stream=False): loop = loop or asyncio.get_event_loop() data = await loop.run_in_executor(None, lambda: ytdl.extract_info(url, download=not stream)) if 'entries' in data: # take first item from a playlist data = data['entries'][0] filename = data['url'] if stream else ytdl.prepare_filename(data) return cls(discord.FFmpegPCMAudio(filename, **ffmpeg_options), data=data) class Music(commands.Cog): def __init__(self, bot): self.bot = bot @commands.command() async def join(self, ctx, *, channel: discord.VoiceChannel): """Joins a voice channel""" if ctx.voice_client is not None: return await ctx.voice_client.move_to(channel) await channel.connect() @commands.command() async def play(self, ctx, *, query): """Plays a file from the local filesystem""" source = discord.PCMVolumeTransformer(discord.FFmpegPCMAudio(query)) ctx.voice_client.play(source, after=lambda e: print('Player error: %s' % e) if e else None) await ctx.send('Now playing: <>'.format(query)) @commands.command() async def yt(self, ctx, *, url): """Plays from a url (almost anything youtube_dl supports)""" async with ctx.typing(): player = await YTDLSource.from_url(url, loop=self.bot.loop, stream=True) ctx.voice_client.play(player, after=lambda e: print('Player error: %s' % e) if e else None) await ctx.send('Now playing: <>'.format(player.title)) @commands.command() async def stream(self, ctx, *, url): """Streams from a url (same as yt, but doesn't predownload)""" async with ctx.typing(): player = await YTDLSource.from_url(url, loop=self.bot.loop, stream=True) ctx.voice_client.play(player, after=lambda e: print('Player error: %s' % e) if e else None) await ctx.send('Now playing: <>'.format(player.title)) @commands.command() async def volume(self, ctx, volume: int): """Changes the player's volume""" if ctx.voice_client is None: return await ctx.send("Not connected to a voice channel.") ctx.voice_client.source.volume = volume / 100 await ctx.send("Changed volume to <>%".format(volume)) @commands.command() async def stop(self, ctx): """Stops and disconnects the bot from voice""" await ctx.voice_client.disconnect() @play.before_invoke @yt.before_invoke @stream.before_invoke async def ensure_voice(self, ctx): if ctx.voice_client is None: if ctx.author.voice: await ctx.author.voice.channel.connect() else: await ctx.send("You are not connected to a voice channel.") raise commands.CommandError("Author not connected to a voice channel.") elif ctx.voice_client.is_playing(): ctx.voice_client.stop() def setup(client): client.add_cog(Music(client)) print('Music: activated')
Ignoring exception in command yt: Traceback (most recent call last): File "C:\Users\volva\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\volva\Desktop\botTest\cogs\music.py", line 82, in yt player = await YTDLSource.from_url(url, loop=self.bot.loop, stream=True) File "C:\Users\volva\Desktop\botTest\cogs\music.py", line 52, in from_url return cls(discord.FFmpegPCMAudio(filename, **ffmpeg_options), data=data) File "C:\Users\volva\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\player.py", line 225, in __init__ super().__init__(source, executable=executable, args=args, **subprocess_kwargs) File "C:\Users\volva\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\player.py", line 138, in __init__ self._process = self._spawn_process(args, **kwargs) File "C:\Users\volva\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\player.py", line 147, in _spawn_process raise ClientException(executable + ' was not found.') from None discord.errors.ClientException: ffmpeg was not found. The above exception was the direct cause of the following exception: Traceback (most recent call last): File "C:\Users\volva\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\bot.py", line 939, in invoke await ctx.command.invoke(ctx) File "C:\Users\volva\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\core.py", line 863, in invoke await injected(*ctx.args, **ctx.kwargs) File "C:\Users\volva\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\core.py", line 94, in wrapped raise CommandInvokeError(exc) from exc discord.ext.commands.errors.CommandInvokeError: Command raised an exception: ClientException: ffmpeg was not found.
- Вопрос задан более двух лет назад
- 9204 просмотра
Как написать бота на Python в дискорде: подробный гайд
Важное преимущество платформы Discord — возможность добавлять готовых ботов или создавать своих виртуальных помощников для решения самых разных задач: модерации чатов, настройки уведомлений, создания голосований, включения музыки и др.
В этой статье расскажем, как написать бота для дискорда, каким образом этот инструмент облегчает рабочие и повседневные дела и где учиться, чтобы создавать ботов на профессиональном уровне.
Содержание статьи скрыть
Какие бывают боты в дискорде и зачем они нужны
Виртуальные помощники или боты помогают упрощать и автоматизировать рутинные процессы и решать однотипные задачи по определённому алгоритму. Бот может напомнить о важном событии, включить музыку или ответить на стандартные вопросы новых пользователей рабочих чатов. В этой статье подробно остановимся на том, как создать написать бота специально под мессенджер Discord.
Короткая справка: что такое Discord
Discord, или дискорд — это популярный мессенджер с множеством разных функций для комфортного общения. Дискордом с удовольствием пользуются почти все геймеры в мире.
Также платформа популярна среди компании самых разных сфер и направлений, ведь возможности дискорда позволяют эффективно выстраивать удалённую работу: проводить видеоконференции и голосовые созвоны, общаться в общих и личных чатах, закреплять важные сообщения, настраивать уведомления и др.
Среди преимуществ дискорда — высокая скорость, бесплатные сервера, функция шумоподавления, возможность форматирования текста и др.
В дискорде уже есть много готовых ботов, которые можно купить и запустить. Они наделены разными возможностями и выполняет конкретный перечень действий.
Вот какие основные виды готовых ботов для дискорда можно выделить:
- музыкальные боты — необходимы для проигрывания музыки, могут воспроизводить треки в определённой последовательности, регулировать громкость или делать паузы между треками;
- боты администраторы — помогают модерировать рабочие чаты, могут поприветствовать новичков, очистить спам или напомнить о дне рождении одного из участников команды;
- боты для сбора мнений — такой помощник поможет быстро опросить участников чата и собрать результаты в небольшой отчёт;
- ролевые боты — необходимы, чтобы распределять роли в команде и наделять конкретных людей определёнными полномочиями;
- боты переводчики — помогут перевести сообщения в чатах, если переписка ведётся на нескольких языках;
- боты для определения рейтинга — такие помощники отмечают тех пользователей, которые наиболее активны;
- многофункциональные боты — такие помощники могут выполнять сразу несколько разных задач, всё чаще пользователи обращаются именно к таким ботам, чтобы упростить работу в дискорде и не тратить время на несколько разных программ.
Боты в дискороде: опыт Checkroi
Команда Checkroi тоже использует дискорд для построения рабочих процессов и общения. Создатель нашего блога, интернет-маркетолог и предприниматель Иван Буявец рассказал о возможностях использования готового виртуального помощника, которого он выбрал для упрощения работы нашей команды.
Мы пользуемся ботом mee6 — в нём есть ряд функций, которые влияют на вовлечение всех участников в общение. Бот помогает считать активность людей в чатах, позволяет получать внутреннюю валюту за активности и напоминает о днях рождения. Люди, видя свой рейтинг, чаще включаются в общение.
Ещё одна из фишек бота — воспроизведение музыки. По пятницам мы устраиваем радиоэфиры: включаем музыку, делимся тем, что любим и общаемся. Отличное чувство, когда ты на целый час делишься своим сокровенным — музыкой — и всем это нравится!
Помимо этого, мы используем дополнительные надстройки, которые делал наш программист: уведомление о трафике и лидах, оповещение о публикации новых статей и уведомление о новом отклике. Это позволяет всем быть в курсе, что происходит, видеть динамику по статьям и осознавать себя частью большего! Конечно, есть ещё куча других идей по ботам — и я уверен, мы их скоро реализуем
Если возможностей готовых ботов вам не хватает, создайте своего виртуального помощника самостоятельно, воспользовавшись языком программирования Python. Как это сделать — расскажем далее.
Ежедневные советы от диджитал-наставника Checkroi прямо в твоем телеграме!
Подписывайся на канал
Подписаться
Как создать бота в дискорде: пошаговая инструкция
На первый взгляд, создать бота — сложная задача. Отчасти это так — для реализации сложных ботов на языке Python, конечно, необходимо понимание основ программирования. Но запустить своего простого бота, который сможет выполнять элементарные функции, под силу любому. И мы вам сегодня это докажем.
Даже если вы обычный пользователь дискорда и никогда не программировали на питоне, просто следуйте нашей инструкции и у вас появится собственный бот. При этом вам не нужно ничего дополнительно устанавливать на свой компьютер или куда-то переводить деньги, чтобы бот заработал.
Шаг 1. Создаём учётную запись
Для создания бота вам потребуется библиотека Python и API Discord. Чтобы свободно работать с этими инструментами, необходимо создать учётную запись Discord Bot. Для этого войдите в Discord и откройте страницу приложения.
В правом верхнему углу нажмите на кнопку «New Application»:
Придумайте имя приложению и нажмите кнопку «Create», чтобы создать новую учётную запись:
Шаг 2. Создаём бота
После того как запись создана, можете приступать к созданию бота. Для этого откройте вкладку «Bot» и нажмите кнопку «Add Bot», чтобы добавить нового бота. После этого откроется окно, которое запросит подтверждения действий, поэтому кликните на «Yes, do it!»:
Поздравляем, вы создали бота, теперь вам нужно скопировать его токен — это своеобразный пароль, которым никто не должен завладеть. Нажмите на кнопку «Rest Token»:
Скопируйте полученную информацию, нажав на кнопку «Copy». Сохраните токен, он вам потребуется чуть позже:
Шаг 3. Настраиваем бота
Далее вам нужно настроить вашего бота, для этого перейдите во вкладку «OAuth2». Выберите из выпадающего списка «URL Generator» и поставьте галочку рядом с «bot»:
Выберите те функции, который должен выполнять ваш бот и скопируйте полученную ссылку, нажав кнопку «Copy»:
Шаг 4. Добавляем бота на сервер
Чтобы добавить бота, вам нужно иметь разрешение на управление сервером. Сервера в дискорде — это своеобразные сообщества, которые позволяют общаться сразу нескольким пользователям друг с другом. Вступить на новый сервер можно либо создав его, либо приняв от кого-то приглашение.
Вставьте URL-адрес в браузерную строку и выберите сервер, на который нужно добавить бота:
Как написать код на Python для бота в дискорде
Теперь вы знаете, как создать бота в дискорде, но это лишь первый этап. Дальше нам нужно научиться этим ботом управлять и наделять его дополнительными функциями — в этом нам поможет программный код.
Для написания кода нам понадобится специальный инструмент, благодаря которому одна компьютерная программа может взаимодействовать с другой. На языке программирования это называется оболочка API — оболочки бывают разные, нам нужна discord.py.
Для начала откройте любой редактор кода. Мы будем использовать Repl.it, регистрация в нём занимает две минуты. После того как авторизуетесь, нажмите на кнопку «Create», выберите язык Python и кликнете на «Create Repl»:
Затем свяжите редактор кода с библиотекой discord.py, записав в вверху main.py простую строчку «import discord». После того как введёте в поле «import discord», нажмите кнопку «Run»
Теперь сделаем так, чтобы наш бот научился отвечать на сообщения: для этого скопируем стандартный код из документации discord.py и вставим его в mai.py. Или скопируйте его отсюда:
async def on_ready ():
print(‘ We have logged in as ‘.format(client))
async def on_message( message):
if message.author == client.user:
if message.content.startswith(‘ $hello’ ):
await message.channel.send(‘ Hello! ‘)
client.run(‘ your token here ‘)
В последней строчке замените фразу «your token here» на ваш токен, который вы скопировали, когда создавали бота и кликните по кнопке «Run»:
Если вы всё сделали верно, переписка с ботом будет выглядеть примерно так:
Теперь давайте разберёмся, из чего состоит наш код и какие команды мы задали боту.
async def on_ready():
print(‘We have logged in as ’.format(client))
Используем декоратор Client.event() для регистрации события.
Мы работаем с асинхронной библиотекой, поэтому все действия выполняем по принципу «обратного вызова». В программировании «обратный вызов» — это реакция на событие: что-то произошло, значит должна включиться определённая функция.
В нашем примере событие on_ready() происходит, когда бот завершает вход в систему и настройку, а событие on_message() случается, когда бот получил сообщение
async def on_message(message):
if message.author == client.user:
Используем декоратор Client.event() для уточнения события.
Триггер событий срабатываем каждый раз при получении сообщения on_message(). Но боту не нужно отвечать, если мы сами написали сообщение. Поэтому, если бот видит Message.author он понимает, что это сообщение от Client.user и совершает возврат действия
Если бот получил в сообщении «привет», он ответит той же фразой
Не забудьте заменить «your token here» на ваш токен
Мы привели лишь самый простой пример того, как написать бота для дискорда на Python. Прописывая в коде новые функции, вы сможете улучшать виртуального помощника. Если хотите ускорить работу по созданию и усовершенствованию ботов и начать делать это на профессиональном уровне, рекомендуем пройти один из онлайн-курсов.
Лучшие курсы для профессионального создания ботов на Python
Python — один из наиболее популярных на сегодняшний день языков программирования. Его ценят за широкие возможности и простую точку входа: написать базовый код на питоне сможет каждый. Изучить этот язык на более профессиональном уровне самостоятельно тоже возможно. Однако для этого потребуется время, дисциплина и усидчивость, к тому же вы должны быть готовы самостоятельно разбирать свои ошибки.
Ускорить процесс освоения питона позволят дистанционные программы обучения, где вы не только получите необходимые знания, но и отработаете их на онлайн-тренажёрах и практических заданиях под руководством опытных экспертов-программистов. В сети представлено большое количество онлайн-курсов по Python, мы расскажем про три лучших на наш взгляд.
Лучший курс по программированию на Python с гарантией трудоустройства
Курс от Skillbox для начинающих разработчиков. Вы поймёте, как устроены популярные фреймворки, библиотеки, базы данных и другие инструменты для разработки. Вы научитесь создавать программы разной сложности: от консольных скриптов до чат-ботов, упаковывать проекты, публиковать рабочую версию продукта на сервере и работать в команде.
Длительность. 12 месяцев
Какой получите результат. 3 проекта в портфолио, диплом об окончании курса, трудоустройства
Какие будут бонусы. Индивидуальные и групповые практические задания, бесплатный доступ к среде разработки IDE, бонусные курсы и рассрочка
Лучший курс для освоения профессии Python-разработчик
Курс от Яндекс.Практикум подойдёт даже тем, кто никогда не программировал. Вы научитесь писать чистый код, разрабатывать сайты, программы и веб-приложения и настраивать серверы для размещения проектов. Вы освоите самые популярные инструменты разработчика и узнаете, как создаются информационные продукты в командах.
Длительность. 9 месяцев
Какой получите результат. Дипломный проект, 6 проектов в портфолио и дипломы о профессиональной переподготовке на русском и английском языке
Какие будут бонусы. Отработка полученных знаний на онлайн-тренажёрах и много практических заданий. Также вам вернут деньги, если вы передумаете учиться, а в случае необходимости оформят академический отпуск
Лучший курс для знакомства с Python
Курс от Skypro поможет вам с нуля освоить популярный язык программирования. Вы поймёте, как устроен синтаксис Python и принципы объектно-ориентированного программирования. Вы узнаете, как пользоваться библиотеками Python и писать стабильный код. Вы научитесь разрабатывать архитектуру сервисов различной сложности и писать серверы для интернет-магазинов, приложений и игр.
Длительность. 10 месяцев
Какой получите результат. Диплом и помощь с трудоустройством
Какие будут бонусы. Много практических заданий в реальной среде разработки, онлайн-встречи с преподавателями и возврат денег, если передумаете учиться
Лучший курс для практикующих разработчиков
Для тех, кто уже знает основы программирования на Python, но хочет повысить свой уровень и создана учебная программа образовательной платформы Otus. Вы углубитесь в «промышленную» разработку на питоне, выполните большое количество практических задач и реализуете собственный проект на любую тему. Вы не только овладеете новыми инструментами программирования, но и сформируете прагматичный подход к решению задач.
Длительность. 5 месяцев
Какой получите результат. Сильное портфолио и сертификат об окончании курса
Какие будут бонусы. Домашние работы, дополнительные материалы для углублённого изучения, пожизненный доступ к записям всех вебинаров
Заключение
Популярность Python растёт: всё больше тех, кто хочет освоить этот язык программирования. Но не все знают, где практиковаться. Один из простых способов понять, насколько вам интересно программировать на питоне и «пощупать» этот язык — создать бота в дискорде. У этой платформы масса возможностей, поэтому разработчикам ботов есть где развернуться.
Умение создавать таких виртуальных помощников, упростит использование популярной платформы и автоматизирует рутинные задачи, к тому же это прямой путь в престижную профессию.
Если вы всерьёз заинтересовались разработкой на питоне, но пока не выбрали оптимальный вариант обучения, рекомендуем ознакомиться с ещё одной нашей статьёй. В материале «Как грамотно выстроить обучение Python» рассказываем про курсы, видеоуроки и профессиональные сообщества
Сайт читов, скриптов и кодов для онлайн игр — YouGame.Biz
Я начал программировать весьма недавно и код написал через костыли , но работает. Попробую кратко объяснить суть. У меня есть bot.event который получает сколько времени я провел в войсе, есть команда с помощью которой можно сделать начисление валюты за проведенное в войсе время. Я хочу сделать.
- St1zy3
- Тема
- 27 Ноя 2022
- Ответы: 1
- Форум: Python
Вопрос Нужна помощь или совет в написании кода для дискорд бота.. Python
Может у кого-нибудь есть исходный код или кто-то может рассказать как написать бота для приватных войс каналов? На самом деле я не чайник, просто вот в этой теме разобраться не могу. Написал уже 3 бота для разных функций сервера, но вот с этим действительно проблема. Пример бота на скрине.
- suzona
- Тема
- 19 Май 2022
- Ответы: 0
- Форум: Общее программирование
Вопрос Есть ли такая штука?
Автоматом заходит на акк и фармит карточки либо часы На питоне :da:
- B00merang
- Тема
- 13 Дек 2021
- Ответы: 2
- Форум: Python
Исходник V1.1 | LogUPD | ФывБот написанный на python. [Minecraft + python(rcon)]
Ну что-ж. Ещё 2 бесполезно проведённых часа и это бусполезное чудо написано. Это просто ФывБот с съёмок ФывФыва, если вы вообще знаете кто это. Вкратце, этот бот рандомно выбирает написанное вами число игроков и выдает им специальную роль. А так-же юзер может записаться в whitelist. Скрины тип.
- popCat
- Тема
- 4 Июн 2021
- Ответы: 0
- Форум: Python
Исходник PowerB — Самый удобный бот Discord (Slash API)
Github Repo — https://github.com/Flowseal/PowerB Полное описание и инструкции находятся на странице репозитория (в readme) Основной идеей является упрощение действий обычным юзерам, которые не хотят сильно заморачиваться в изучении структуры кода. Для этого была реализована следующая идея: все.
- Flowseal
- Тема
- 5 Май 2021
- Ответы: 1
- Форум: Python
Гайд Как поставить python бота на VDS/VPS (Linux Ubuntu 16.04)
Всем привет! Многие не знают как поставить бота (telegram, discord) на сервер VDS/VPS. В этом гайде я научу вас устанавливать бота на VDS/VPS. На примере FirstVDS (1VDS) (noad) p.s Я не использую heroku, т.к. там лимит на активные часы. Вроде так. 1. Установка Python на VDS. Нужно: Putty и.
- popCat
- Тема
- 1 Май 2021
- Ответы: 5
- Форум: Python
Исходник Ticket System для Discord бота | Discord.py
Продолжаем парад селфкод функций для дискорд бота на пайтоне На повествке дня система тикетов: имеет +- чистый код, комментарии по коду, нетипичный функционал Возможности: Создание тикета с уникальным id Создание тикета с несколькими участниками Открытие тикета Закрытие тикета Создание.
- Flowseal
- Тема
- 12 Апр 2021
- Ответы: 9
- Форум: Python
Исходник Handmade [Discord] bot — V2
Discord bot using discord.py v1.5.1 Скачать — https://drive.google.com/file/d/1-2Ha5AjzqajoXlMTcnEdC2qjkiIkLaE9/view?usp=sharing Мой личный проект, над которым я работал почти каждый день. Реализовано множество интересных механик. Функционал бота: картиночки эротического содержания были.
- Flowseal
- Тема
- 12 Мар 2021
- Ответы: 19
- Форум: Python
Исходник Blackjack для бота Discord | Discord.py
Продолжаем парад игр для бота дискорда, теперь это двадцать одно. Вроде как работает, правда не реализована система сплита. Исходный код полон комментариями.
- Flowseal
- Тема
- 24 Фев 2021
- Ответы: 4
- Форум: Python
Исходник Личные комнаты | Discord bot
Система личных комнат для дискорд бота (Discord.py) API: https://discordpy.readthedocs.io/en/latest/api.html Доступна автоматическая настройка при запуске, а также ручная настройка командами: temp_category_set — ID категории, в которой будет располагаться система личных комнат temp_rooms_set -.
- Flowseal
- Тема
- 4 Фев 2021
- Ответы: 3
- Форум: Python
Исходник [Python] Камень-ножницы-бумага для вашего бота
Создано на : discord.py (docs) from collections.abc import Sequence # удаление созданного канала по id async def delete_channel(guild, channel_id): channel = guild.get_channel(channel_id) await channel.delete() # создание нового канала в определённой категории async def.
- Flowseal
- Тема
- 28 Янв 2021
- Ответы: 1
- Форум: Python
Исходник Handmade discord bot
За 2 дня написал простенького бота для дискорда, используя либу discord.py, ну и там ещё кое-что юзал До этого опыта в написании было 0, так что не знаю, как получилось. Для меня главное что работает и ладно. Функционал: Из интересного: Проигрывание музыки, рандомные картинки с выбранной(-ых).
- Flowseal
- Тема
- 9 Ноя 2020
- Ответы: 7
- Форум: Python
Гайд Cоздаём дискорд бота на python #1
Короче новичкам в python привет (я сам новичёк), сегодня я вас научу создавать бота дискорд. Если чё не втирайте про ошибки в тексте, школьник ещё :CoolCat: 1. Создание бота 2. Пишем бота Далее можно использовать редакторы текста: Sublime Text 3(мой выбор), Visual Studio Code, и тд.. Это.
- popCat
- Тема
- 26 Сен 2020
- Ответы: 7
- Форум: Python
discord.py | not connected else: музыкальный бот не воспроизводит больше 1 песни
Бот в Discord по команде fb!play воспроизводит музыку. Если добавить параметр album, он должен прочитать ссылки из файла с названием из второго аргумента (например fb!play album LIVINGTHINGS). Работаю с ffmpeg. Команда voice.play(discord.FFmpegPCMAudio(track)) работает только на одной песне, а на следующей всегда вызывает ошибку discord.errors.clientexception: not connected to voice. Проверял список файлов, условия — все корректно.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178
@bot.command() async def play(ctx, *, song=None): author = ctx.author #Кто отправил сообщение x = 0 source = '' #Ссылка или файл if song==None: server = ctx.guild name_channel = author.voice.channel.name voice_channel = discord.utils.get(server.voice_channels, name = name_channel) params = song.split(' ') if len(params)==1: source = params[0] server = ctx.guild name_channel = author.voice.channel.name voice_channel = discord.utils.get(server.voice_channels, name = name_channel) print('param 1') elif len(params)==2: #проигрывание альбома if params[0] == 'album': server = ctx.guild name_channel = author.voice.channel.name channel = author.voice.channel voice_channel = discord.utils.get(server.voice_channels, name=name_channel) fname = params[1] + '.txt' dir = os.listdir('.') if fname in dir: with open(fname, 'r', encoding='utf-8') as songs: for line in songs: #server = ctx.guild #name_channel = author.voice.channel.name #voice_channel = discord.utils.get(server.voice_channels, name=name_channel) #print(type(voice_channel)) if line[-1]=='\n': line = line[:-1] voice = discord.utils.get(bot.voice_clients, guild=server) print('First: ', type(voice)) #if voice is None: #await author.guild.voice_client.connect() channels = author.guild.voice_channels for channel in channels: print(channel) #await channel[0].connect() # voice = discord.utils.get(bot.voice_clients, guild=server) ############################# channel = ctx.message.author.voice.channel print(type(voice)) #print(type(bot.voice_clients[0])) voice = discord.utils.get(bot.voice_clients, guild=server) print('second: ', type(voice)) if voice and voice.is_connected(): await voice.move_to(channel) else: voice = await channel.connect() ############################# if line[:4]=='http': if not await check_domains(line): # Проверка на соответсвие доменам youtube await ctx.channel.send(f' неразрешенная ссылка') return with youtube_dl.YoutubeDL(ydl_opts) as ydl: ydl.download([line]) if voice is None: await voice_channel.connect() voice = discord.utils.get(bot.voice_clients, guild=server) print('Third: ', type(voice)) files = os.listdir('.') # Получаем список файлов в папке программы track = '' print(files) for file in files: if file.find('.mp3') != -1 and file != track: if file not in Queue: print('file is not in queue') track = file Queue.append(file) print(Queue) print('tr') print(track) vichannel = ctx.author.voice.channel print('trh') if ctx.voice_client is None: await ctx.channel.send('No play') else: await ctx.channel.send('Bot in party!') print('pt') print(track) print('Fourth', type(voice)) if not voice.is_connected(): print('No voice channel') chan = await channel.connect() else: print('Voice channel is already') try: voice.play(discord.FFmpegPCMAudio(track)) #даем команду проигрывать песню except discord.errors.ClientException: await ctx.channel.send('I am temporary not in a party') voice = discord.utils.get(bot.voice_clients, guild=server) if voice is None: print('voice is None') #await voice_channel.connect() print('We do with that something') voice = discord.utils.get(bot.voice_clients, guild=server) print(track) voice.play(discord.FFmpegPCMAudio(track)) # даем команду проигрывать песню time.sleep(60) #и ждем минуту, пока песня доиграет #voice.play(discord.FFmpegPCMAudio(track)) # Проигрываем трек songs.close() return else: print('There is not that album in current directory') else: await ctx.channel.send(f', option does not exist. Try again') elif len(params)==3: server_id = params[0] voice_id = params[1] source = params[2] try: server_id = int(server_id) voice_id = int(voice_id) except: await ctx.channel.send(f', 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', command is incorrect') 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) begin, end = '', '' if source!='': begin = source[0:4] if source==None: pass elif begin=='http': #Обработка ссылки if not await check_domains(source): #Проверка на соответсвие доменам youtube await ctx.channel.send(f' неразрешенная ссылка') return with youtube_dl.YoutubeDL(ydl_opts) as ydl: ydl.download([source]) #Скачиваем аудио files = os.listdir('.') #Получаем список файлов в папке программы Track = '' for file in files: if file.find('.mp3')!=-1: Track = file Queue.append(Track) print(Queue) voice_channel = ctx.author.voice.channel if ctx.voice_client is None: await ctx.channel.send('No play') else: await ctx.channel.send('Bot in party!') for track in Queue: voice.play(discord.FFmpegPCMAudio(track)) #Проигрываем трек #os.remove(track) #Удаление трэка else: voice.play(discord.FFmpegPCMAudio(f'Mus2/'))
