Skip to content

Instantly share code, notes, and snippets.

@pedroricardo
Created August 7, 2018 14:38
Show Gist options
  • Save pedroricardo/efd3223f6e502e30ae8935ae41f7f0ed to your computer and use it in GitHub Desktop.
Save pedroricardo/efd3223f6e502e30ae8935ae41f7f0ed to your computer and use it in GitHub Desktop.
Criando Bot Para Discord #7 - Música (PARTE 2) [Python] [PT-BR]
import discord
#VOCÊ PRECISA DO YOUTUBE-DL INSTALADO, PARA ISSO DIGITE "pip install youtube_dl" NO CMD!
client = discord.Client()
players = {}
COR = 0xF7FE2E
@client.event
async def on_ready():
print(client.user.name)
print("===================")
@client.event
async def on_message(message):
if message.content.startswith('!entrar'):
try:
channel = message.author.voice.voice_channel
await client.join_voice_channel(channel)
except discord.errors.InvalidArgument:
await client.send_message(message.channel, "O bot ja esta em um canal de voz")
except Exception as error:
await client.send_message(message.channel, "Ein Error: ```{error}```".format(error=error))
if message.content.startswith('!sair'):
try:
mscleave = discord.Embed(
title="\n",
color=COR,
description="Sai do canal de voz e a musica parou!"
)
voice_client = client.voice_client_in(message.server)
await client.send_message(message.channel, embed=mscleave)
await voice_client.disconnect()
except AttributeError:
await client.send_message(message.channel, "O bot não esta em nenhum canal de voz.")
except Exception as Hugo:
await client.send_message(message.channel, "Ein Error: ```{haus}```".format(haus=Hugo))
if message.content.startswith('!play'):
try:
yt_url = message.content[6:]
if client.is_voice_connected(message.server):
try:
voice = client.voice_client_in(message.server)
players[message.server.id].stop()
player = await voice.create_ytdl_player('ytsearch: {}'.format(yt_url))
players[message.server.id] = player
player.start()
mscemb = discord.Embed(
title="Música para tocar:",
color=COR
)
mscemb.add_field(name="Nome:", value="`{}`".format(player.title))
mscemb.add_field(name="Visualizações:", value="`{}`".format(player.views))
mscemb.add_field(name="Enviado em:", value="`{}`".format(player.uploaded_date))
mscemb.add_field(name="Enviado por:", value="`{}`".format(player.uploadeder))
mscemb.add_field(name="Duraçao:", value="`{}`".format(player.uploadeder))
mscemb.add_field(name="Likes:", value="`{}`".format(player.likes))
mscemb.add_field(name="Deslikes:", value="`{}`".format(player.dislikes))
await client.send_message(message.channel, embed=mscemb)
except Exception as e:
await client.send_message(message.server, "Error: [{error}]".format(error=e))
if not client.is_voice_connected(message.server):
try:
channel = message.author.voice.voice_channel
voice = await client.join_voice_channel(channel)
player = await voice.create_ytdl_player('ytsearch: {}'.format(yt_url))
players[message.server.id] = player
player.start()
mscemb2 = discord.Embed(
title="Música para tocar:",
color=COR
)
mscemb2.add_field(name="Nome:", value="`{}`".format(player.title))
mscemb2.add_field(name="Visualizações:", value="`{}`".format(player.views))
mscemb2.add_field(name="Enviado em:", value="`{}`".format(player.upload_date))
mscemb2.add_field(name="Enviado por:", value="`{}`".format(player.uploader))
mscemb2.add_field(name="Duraçao:", value="`{}`".format(player.duration))
mscemb2.add_field(name="Likes:", value="`{}`".format(player.likes))
mscemb2.add_field(name="Deslikes:", value="`{}`".format(player.dislikes))
await client.send_message(message.channel, embed=mscemb2)
except Exception as error:
await client.send_message(message.channel, "Error: [{error}]".format(error=error))
except Exception as e:
await client.send_message(message.channel, "Error: [{error}]".format(error=e))
if message.content.startswith('!pause'):
try:
mscpause = discord.Embed(
title="\n",
color=COR,
description="Musica pausada com sucesso!"
)
await client.send_message(message.channel, embed=mscpause)
players[message.server.id].pause()
except Exception as error:
await client.send_message(message.channel, "Error: [{error}]".format(error=error))
if message.content.startswith('!resume'):
try:
mscresume = discord.Embed(
title="\n",
color=COR,
description="Musica pausada com sucesso!"
)
await client.send_message(message.channel, embed=mscresume)
players[message.server.id].resume()
except Exception as error:
await client.send_message(message.channel, "Error: [{error}]".format(error=error))
client.run('token')
Copy link

ghost commented Aug 7, 2018

poggers

@LuisOtavioMirandaReis
Copy link

Muito legal!

@yuukiee
Copy link

yuukiee commented Aug 23, 2018

Error: [NOT FOUND (status code: 404): Unknown Channel]

@Killergim50
Copy link

No bot de musica está dando 2 erros chamados:

Error: [NOT FOUND (status code: 404): Unknown Channel]

Error: [ffmpeg/avconv was not found in your PATH environment variable]

e eu nao sei como corrigir vc sabe oque fazer ?

@yuukiee
Copy link

yuukiee commented Sep 22, 2018

Error: [NOT FOUND (status code: 404): Unknown Channel]

@Joker0001
Copy link

bom dia

@Gardenram
Copy link

Esqueceu de importar o yt_dl...

Copy link

ghost commented Apr 21, 2019

como coloco em meu bot? dou node . e ele n pega

@londarks
Copy link

'VoiceState' object has no attribute 'voice_channel'
ta dando isso depois de resolver vários problemas

Copy link

ghost commented Mar 24, 2020

Nice! 🖖

@siryaek
Copy link

siryaek commented Oct 10, 2020

Se o erro ser ffmpeg/acov ia not fundo instelem o ffmpeg em seu computador! se for uknow Channel, é porque ele não tem perm de entrar no canal ou o canal de música não existe!

@mdsdias
Copy link

mdsdias commented Jun 8, 2021

como coloco em meu bot? dou node . e ele n pega

Você tem que pegar o nome do arquivo, deixar nesse formato aqui ó <arquivo>.py e pra rodar é simples
python <nome do arquivo>.py

@Kuregani
Copy link

eu coloco a musica para testar aparece esse erro aqui e nao sei como resolver:
Ignoring exception in on_message
Traceback (most recent call last):
File "main.py", line 42, in on_message
if client.is_voice_connected(message.server):
AttributeError: 'Client' object has no attribute 'is_voice_connected'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/client.py", line 343, in _run_event
await coro(*args, **kwargs)
File "main.py", line 86, in on_message
await client.send_message(message.channel, "Error: [{error}]".format(error=e))
AttributeError: 'Client' object has no attribute 'send_message'

@xguisl
Copy link

xguisl commented Sep 20, 2021

como eu coloco o bot online agora?

@mdsdias
Copy link

mdsdias commented Sep 20, 2021

@Guiizoka

como eu coloco o bot online agora?

Metodo Comum no propio PC

obs: se você de algum jeito fechar a janela na qual esta rodando o bot ou desligar o pc, o bot para também.

Windows
python -3 -m pip install discord youtube_dl
python main.py
Linux
pip3 install discord youtube_dl
python3 main.py

Metodo DisCloud ( Recomendado )

  1. Vá no site da DisCloud
  2. Clique em "Entrar"
  3. Autorize sua conta da Discord
  4. Agora siga o passo a passo com imagens da propia equipe da DisCloud

Metodo Replit

  1. Pode usar a plataforma Replit.com
  2. Para isso é só fazer uma conta coisa de minutinhos;
  3. Na pagina inicial vai ter lá, um Simbolo de mais;
  4. Selecione a linguagem Python;
  5. Coloque o nome do projeto;
  6. Clique em " + Create Repl";
  • Dentro do arquivo "main.py" cole o codigo,

ATENÇÃO AGORA

  1. Copie o token do bot
  2. Clique no cadeado com o nome de "Secrets"
  3. Dentro do key coloque "TOKEN"
  4. Em value coloque o token do bot
  5. Agora, perto de "Files" tem um papel com um mais dentro
  6. Clicando nele, vai criar um novo arquivo, no nome escreva keep_alive.py
  7. Dentro dele cole o codigo abaixo:
from flask import Flask
from threading import Thread
import random


app = Flask('')

@app.route('/')
def home():
	return 'Estou Online!'

def run():
  app.run(
		host='0.0.0.0',
		port=random.randint(2000,9000)
	)

def keep_alive():
	'''
	Cria uma Thread e inicia para poder rodar a função
	'''
	t = Thread(target=run)
	t.start()
  1. Dentro do main.py agora!
    Escreva isso:
import os
token = os.environ['TOKEN']
from keep_alive import keep_alive
# aqui tem o codigo normal do bot na qual foi colado
keep_alive()
client.run(token)

Se tudo deu certo vai aparecer um link mais ou menos assim

https://<nome do projeto>.<seu nick>.repl.co

Agora registre-se aqui

  1. Apos registrado você ira para uma tela de dashboard
  2. Clique em "Add New Monitor"
  3. Em "monitor type" selecione HTTP(S)
  4. Em "Friendly Name" Coloque o nome do projeto
  5. Em "URL" coloque o link que pegou lá na replit
  6. Clique lá em baixo em "Create Monitor" Duas vezes

E pronto!!

qualquer duvida só comentar

@xguisl
Copy link

xguisl commented Sep 20, 2021

eu coloco a musica para testar aparece esse erro aqui e nao sei como resolver:
Ignoring exception in on_message
Traceback (most recent call last):
File "main.py", line 42, in on_message
if client.is_voice_connected(message.server):
AttributeError: 'Client' object has no attribute 'is_voice_connected'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/client.py", line 343, in _run_event
await coro(*args, **kwargs)
File "main.py", line 86, in on_message
await client.send_message(message.channel, "Error: [{error}]".format(error=e))
AttributeError: 'Client' object has no attribute 'send_message'

estou com o mesmo problema

@xguisl
Copy link

xguisl commented Sep 20, 2021

@Guiizoka

como eu coloco o bot online agora?

Metodo Comum no propio PC

obs: se você de algum jeito fechar uma janela na qual esta rodando o bot ou desligar o pc, o bot para também.

janelas
python -3  - m pip instalar discord youtube_dl
python main.py
Linux
pip3 install discord youtube_dl
python3 main.py

Metodo DisCloud ( Recomendado )

  1. Vá no site da DisCloud
  2. Clique em "Entrar"
  3. Autorize sua conta da Discord
  4. Agora siga o passo a passo com imagens da propia equipe da DisCloud

Metodo Replit

  1. Pode usar uma plataforma Replit.com
  2. Para isso é só fazer uma conta coisa de minutinhos;
  3. Na pagina inicial vai ter lá, um Simbolo de mais;
  4. Selecione uma linguagem Python;
  5. Coloque o nome do projeto;
  6. Clique em "+ Criar Repl";
  • Dentro do arquivo "main.py" cole o codigo,

ATENÇÃO AGORA

  1. Copie o token do bot
  2. Clique no cadeado com o nome de "Secrets"
  3. Dentro do key coloque "TOKEN"
  4. Em value coloque o token do bot
  5. Agora, perto de "Files" tem um papel com um mais dentro
  6. Clicando nele, vai criar um novo arquivo, no nome escreva keep_alive.py
  7. Dentro dele cole o codigo abaixo:
from flask import Flask
from threading import Thread
import random


app = Flask('')

@app.route('/')
def home():
	return 'Estou Online!'

def run():
  app.run(
		host='0.0.0.0',
		port=random.randint(2000,9000)
	)

def keep_alive():
	'''
	Cria uma Thread e inicia para poder rodar a função
	'''
	t = Thread(target=run)
	t.start()
  1. Dentro do main.py agora!
    Escreva isso:
import os
token = os.environ['TOKEN']
from keep_alive import keep_alive
# aqui tem o codigo normal do bot na qual foi colado
keep_alive()
client.run(token)

Se tudo deu certo vai aparecer um link mais ou menos assim

https://<nome do projeto>.<seu nick>.repl.co

Agora registre-se aqui

  1. Apos registrado você ira para uma tela de dashboard
  2. Clique em "Add New Monitor"
  3. Em "monitor type" selecione HTTP(S)
  4. Em "Friendly Name" Coloque o nome do projeto
  5. Em "URL" coloque o link que pegou lá na replit
  6. Clique lá em baixo em "Create Monitor" Duas vezes

E pronto!!

qualquer duvida só comentar

o meu dá aquele erro quando eu coloco na replic e uso o comando do bot no ds

@xguisl
Copy link

xguisl commented Sep 20, 2021

quando eu copio esse código e coloco ele no replit com o meu token ele liga normalmente porém quando dou o comando para o bot tocar a música nao acontece nada e no console aparece os seguintes erros:
eplit: Updating package configuration

--> python3 -m poetry init --no-interaction --name repl_python3_BOT
BOT TESTE

Ignoring exception in on_message
Traceback (most recent call last):
File "main.py", line 17, in on_message
channel = message.author.voice.voice_channel
AttributeError: 'VoiceState' object has no attribute 'voice_channel'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/client.py", line 343, in _run_event
await coro(*args, **kwargs)
File "main.py", line 22, in on_message
await client.send_message(message.channel, "Ein Error: {error}".format(error=error))
AttributeError: 'Client' object has no attribute 'send_message'

@mdsdias
Copy link

mdsdias commented Sep 20, 2021

quando eu copio esse código e coloco ele no replit com o meu token ele liga normalmente porém quando dou o comando para o bot tocar a música nao acontece nada e no console aparece os seguintes erros:
eplit: Updating package configuration

--> python3 -m poetry init --no-interaction --name repl_python3_BOT

BOT TESTE
Ignoring exception in on_message
Traceback (most recent call last):
File "main.py", line 17, in on_message
channel = message.author.voice.voice_channel
AttributeError: 'VoiceState' object has no attribute 'voice_channel'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/client.py", line 343, in _run_event
await coro(*args, **kwargs)
File "main.py", line 22, in on_message
await client.send_message(message.channel, "Ein Error: {error}".format(error=error))
AttributeError: 'Client' object has no attribute 'send_message'

Pelo o meu ver o erro está no código do propio Pedro Ricardo; estou vendo muito desse erro por agora, acho que possa ser uma atualização na própria versão do Discord.py, verei o erro com mais calma, assim que possível retornarei a solução para todos que estiverem com o erro

@mdsdias
Copy link

mdsdias commented Sep 22, 2021

@guiizoka | @Kuregani

Voltei!

Olha eu acho que talvez se baixar uma verção um pouco antiga vá funcionar, porem nos meus testes sempre teve erros, mais talvez você tenha mais sorte kk

pip install discord.py==1.0.0

Tente baixar dessa verção pra baixo


Agora caso não funcione eu acho que...

bom após vasculhar, eu descobri que modificaram diversas coisas do Discord.py 1.0.0 pra frente e por conta do metodo create_ytdl_player foi retirado das atuais verções a unica verção funcional é totalmente inviavel pois teria que baixar musica por musica, e isso seria alem de demorado para musicas longas, seria muito pesado, requisitando em gastos adicionais, então recomendo que tente ver bots em node.js, pois o antigo metodo não está mais viavel

Desculpe, mais nem tudo são flores

@zSilencez
Copy link

como faço para adicionar meu bot em varios servidores sem interferir um no outro? tentei pesquisar, mas so achei para Discord.js e como sou bem iniciante sobre linguagem de programação, nao sei como fazer

@Theus-Alves
Copy link

No bot de musica está dando 2 erros chamados:

Error: [NOT FOUND (status code: 404): Unknown Channel]

Error: [ffmpeg/avconv was not found in your PATH environment variable]

e eu nao sei como corrigir vc sabe oque fazer ?

Olá meu amigo, para isso você vai precisar adicionar o ffmpeg no PATCH no disco C, caso precisar de ajuda ainda, pode entrar em contato comigo. Tmj

@WeversonCavalcanti
Copy link

o meu ta dando o seguinte erro "Traceback (most recent call last):
File "C:\Users\wever\PycharmProjects\pythonProject5\main.py", line 3, in
client = discord.Client()
TypeError: init() missing 1 required keyword-only argument: 'intents'

Process finished with exit code 1"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment