I'm just trying to get a discord bot to join a VC and play a song Pause & Stop but I am getting these errors.
*Edit: With me being new to Python I am not exactly sure how to fix this. I have read up about examples of these kinds of issues while trying to fix this and transferring them over to this problem has been uneventful with me just gaining more errors in the process.
Old Error
Traceback (most recent call last):
File "main.py", line 3, in <module>
import music
File "/home/runner/Adonnis/music.py", line 13, in <module>
async def join(self,ctx):
File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/core.py", line 1432, in decorator
raise TypeError('Callback is already a command.')
TypeError: Callback is already a command.
New Error
Ignoring exception in command None:
discord.ext.commands.errors.CommandNotFound: Command "join" is not found
Main.py
import discord
from discord.ext import commands
import music
print("Discord version ",discord.__version__)
print("Bot Running")
cogs = [music]
client = commands.Bot(command_prefix='?', intents = discord.Intents.all())
for i in range(len(cogs)):
cogs[i].setup(client)
client.run(Token)
Music.py
import discord
from discord.ext import commands
import youtube_dl
class music(commands.Cog):
def __innit__(self,client):
self.client = client
# #commands.command()
#commands.command()
async def join(self,ctx):
if ctx.author.voice is None:
await ctx.send("You're not in a voice channel")
voice_channel = ctx.author.voice.channel
if ctx.voice_client is None:
await voice_channel.connect()
else:
await ctx.voice_channel.move_to(voice_channel)
#commands.command()
async def disconnect(self,ctx):
await ctx.voice.client.disconnect()
#commands.command()
async def play(self,ctx,url):
ctx.voice_client.stop()
FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': 'vn'}
YDL_OPTIONS = {'format': "bestaudio"}
vc = ctx.voice_client
with youtube_dl.YoutubeDL(YDL_OPTIONS) as ydl:
info = ydl.extract_info(url, download=False)
url2 = info['formats'][0]['url']
source = await discord.FFmpegOpusAudio.from_probe(url2, **FFMPEG_OPTIONS)
vc.play(source)
#commands.command()
async def pause(self,ctx):
await ctx.voice.client.pause()
await ctx.send("Audio Paused ⏸")
#commands.command()
async def resume(self,ctx):
await ctx.voice.client.resume()
await ctx.send("Audio Resumed ⏯")
def setup(client):
client.add_cog(music(client))
I've coded this off of https://www.youtube.com/watch?v=jHZlvRr9KxM
Is anyone able to assist me with the debugging of this?
*Edit: I have updated the "Error" sorry that was from an older version where I was trying what worked for someone else.
*Edit:
Packages used:
Discord
Discord.py
Youtube_DL
Pineapple
Just in case anyone wants to know what this was coded on also this was made on Replit.
Related
I'm making a Discord bot, here is my code.
I don't know if the #commands.command() is right.
I tried to fix it but i couldn't do it.
And you can see the commands are right there so I don't know what is wrong whit this
main.py
import discord
from discord.ext import commands
#import all of the cogs
from music_cog import music_cog
bot = commands.Bot(command_prefix='!', intents = discord.Intents.all())
#remove the default help command so that we can write out own
bot.remove_command('help')
async def setup(bot):
await bot.add_cog(music_cog(bot))
#start the bot with our token
bot.run("TOKEN")
music_cog.py
from ast import alias
import discord
from discord.ext import commands
class music(commands.Cog):
def __init__(self,client):
self.client = client
#commands.command()
async def join(self,ctx):
if ctx.author.voice is None:
await ctx.send("Flaco, no estas en ningun canal de voz. Despertate perro")
voice_channel = ctx.author.voice.channel
if ctx.voice_client is None:
await voice_channel.connect()
else:
await ctx.voice_channel.move_to(voice_channel)
#commands.command()
async def disconnect(self,ctx):
ctx.voice_client.disconnect()
#commands.command()
async def play(self, ctx, url):
ctx.voice_client.stop()
FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delax_max 5', 'options': '-vn'}
YDL_OPTIONS = {'format': 'bestaudio'}
vc = ctx.voice_client
with youtube_dl.YoutubeDL(YDL_OPTIONS) as ydl:
info = ydl.extract_info(url, download = False)
url2 = info['formats'][0]['url']
source = await discord.FFmpegOpusAudio.from_probe(url2,
**FFMPEG_OPTIONS)
vc.play(source)
#commands.command()
async def pause(self,ctx):
ctx.voice_client.pause()
await ctx.send("Dale master ahi te freno la musiquita 👍🏼")
#commands.command()
async def resume(self,ctx):
ctx.voice_client.resume()
await ctx.send("Suena como un Duna planchado al piso OAAA")
def setup(client):
client.add_cog(music(client))
And I get this error:
discord.ext.commands.errors.CommandNotFound: Command "join" is not found
I don't know how to solve it
when I run this code, it works completely fine, your imports are not at the top so I have no idea if you left those out or if you don't have them in your actual code, make sure you have your imports
the code works fine with the correct imports at the top
import discord
from discord.ext import commands
import youtube_dl
class music(commands.Cog):
def __init__(self, client):
self.client = client
#commands.command()
async def join(self,ctx):
if ctx.author.voice is None:
await ctx.send('no one is here')
voice_channel = ctx.author.voice.channel
if ctx.voice_client in None:
await voice_channel.connect()
else:
await ctx.voice_client.move_to(voice_channel)
def setup(client):
client.add_cog(music(client))
I made the main file and the music file, and this code is the command in the music file.
Commands in the main file work, but commands in the music file don't work.
And if you enter the join command, discord.ext.commands.errors.CommandNotFound: Command "join" is not found
An error occurs.
THIS QUESTION HAS BEEN SOLVED BY FURAS IN THE COMMENTS.
So I was following this tutorial on how to create a discord music bot like Rythm using discord.py. I had troubleshooted my code and fixed a few errors to do with coroutine.
EDIT: I have called the r function and now get this error upon running the code:
main.py:15: RuntimeWarning: coroutine 'r' was never awaited
r()
When I run the code everything boots up successfully until I try to use a command. If I put '#join' in the chat it should have joined the voice chat or said "You're not in a voice channel!". Instead I get this error:
2022-09-02 20:07:08 ERROR discord.ext.commands.bot Ignoring exception in command None
discord.ext.commands.errors.CommandNotFound: Command "join" is not found
I have tried swapping out #commands.command for #client.command (whilst also defining client in music.py) but more of the same. Any help would be much appreciated.
I have two files, main.py and music.py.
MAIN.PY
import discord
from discord.ext import commands
import music
cogs = [music]
client = commands.Bot(command_prefix='#', intents=discord.Intents.all())
async def r():
for i in range(len(cogs)):
await cogs[i].setup(client)
r()
client.run(
"my token")
MUSIC.PY
import discord
from discord.ext import commands
import youtube_dl
class music(commands.Cog):
def __init__(self, client):
self.client = client
#commands.command()
async def join(self, ctx):
if ctx.author.voice is None:
await ctx.send("You're not in a voice channel!")
voice_channel = ctx.author.voice.channel
if ctx.voice_client is None:
await voice_channel.connect()
else:
await ctx.voice_client.move_to(voice_channel)
#commands.command()
async def disconnect(self, ctx):
await ctx.voice_client.disconnect()
#commands.command()
async def play(self, ctx, url):
ctx.voice_client.stop()
FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -
reconnect_delay_max 5', 'options': '-vn'}
YDL_OPTIONS = {'format': "bestaudio"}
vc = ctx.voice_client
with youtube_dl.YoutubeDL(YDL_OPTIONS) as ydl:
info = ydl.extract_info(url, download=False)
url2 = info['formats'][0]['url']
source = await discord.FFmpegOpusAudio.from_probe(
url2, **FFMPEG_OPTIONS)
vc.play(source)
#commands.command()
async def pause(self, ctx):
await ctx.voice_client.pause()
await ctx.send("Paused")
#commands.command()
async def resume(self, ctx):
await ctx.voice_client.resume()
await ctx.send("Resumed")
async def setup(client):
await client.add_cog(music(client))
When you define async function like async def r() then you would have to run it await r(). Problem is that you can't run await outside functions. You would have to run it in some async function - but it make the same problem with running this async function.
You may try to run it in event on_ready() which is async function.
#client.event
async def on_ready():
for item in cogs:
await item.setup(client)
I am trying to code a discord music bot but i am getting errors.
Discord.py library doesn't work for me.
The errors like "discord.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'NoneType' object has no attribute 'stop'."
These type error for almost every attribute for voice_client. Can someone correct my code. Because i can't see my fault.
My Code is (in music.py);
import discord
from discord.ext import commands
import youtube_dl
import ffmpeg
class music(commands.Cog):
def __init__(self, client):
self.client = client
#commands.command()
async def join(self, ctx):
if ctx.author.voice is None:
await ctx.send("Ses kanalına gir")
voice_channel = ctx.author.voice.channel
if ctx.voice_client is None:
await voice_channel.connect()
else:
await ctx.voice_client.move_to(voice_channel)
#commands.command()
async def disconnect(self, ctx):
await ctx.voice_client.disconnect()
#commands.command()
async def play(self, ctx, url):
ctx.voice_client.stop()
FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -
reconnect_delay_max 5',
'options': '-vn'}
YDL_OPTIONS = {'format': "bestaudio"}
vc = ctx.voice_client
with youtube_dl.YoutubeDL(YDL_OPTIONS) as ydl:
info = ydl.extract_info(url, download=False)
url2 = info['formats'][0]['url']
source = await discord.FFmpegOpusAudio.from_probe(url2, **FFMPEG_OPTIONS)
vc.play(source)
#commands.command()
async def pause(self, ctx):
await ctx.voice_client.pause()
await ctx.send("paused")
#commands.command()
async def resume(self, ctx):
await ctx.voice_client.resume()
await ctx.send("resumed")
def setup(client):
client.add_cog(music(client))
My code is (in main.py);
import discord
from discord.ext import commands
import music
cogs = [music]
client = commands.Bot(command_prefix='?', intents = discord.Intents.all())
for i in range(len(cogs)):
cogs[i].setup(client)
client.run("My_Token")
ctx.voice_client doesn't have the stop property.
Solutions:
Either CTX or ctx.voice_client is None
Or, voice_client doesn't have the stop() function.
I started coding a music bot using discord.py, but when I run the program, It gives me this error:
ImportError: cannot import name 'core' from partially initialized module 'music' (most likely due to a circular import) (/opt/virtualenvs/python3/lib/python3.8/site-packages/music/__init__.py)
Here is the code:
import music
import discord
import youtube_dl
from discord.ext import commands
cogs=[music]
client = commands.Bot (command_prefix= "|", intents = discord.intends.all())
for i in range(len(cogs)):
cogs[i].setup(client)
class music(commands.cog):
def __init__(self, client):
self.client = client
#commands.command()
async def join(self,ctx):
if ctx.author.voice is None:
await ctx.send("You are not in a voice channel!")
voice_channel = ctx.author.voice.channel
if ctx.voice_client is None:
await voice_channel.connect()
else:
await ctx.voice_client.move_to(voice_channel)
#commands.command()
async def dissconnect(self,ctx):
await ctx.voice_client.dissconnect()
#commands.command()
async def play(self,ctx,url):
ctx.voice_client.stop()
FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn'}
YDL_OPTIONS = {'format':"bestaudio"}
vc = ctx.voice_client
with youtube_dl.YoutubeDl(YDL_OPTIONS) as ydl:
info = ydl.extract_info(url, download=False)
url2 = info['formats'][0]['url']
source = await discord.FFmpegOpusAudio.from_probe[url2,--FFMPEG_OPTIONS] #try n
vc.play(source)
#commands.command()
async def pause(self, ctx):
ctx.voice_client.pause()
await ctx.send("Paused ⏸️")
#commands.command()
async def resume(self, ctx):
ctx.voice_client.resume()
await ctx.send("Resumed ▶️")
def setup(client):
client.add_cog(music(client))
The code above was written in another file. I wrote some code in the main file so it could run this file.
I even renamed the file which had the same name of that of the module, but that also does not seem to work.
The music module you're trying to import has a bug in which it tries to import part of itself. You could report this on its GitHub repo. You could try installing a different version of the library or using a different library for your needs.
As a side note, it's probably ill advised to name a class the same thing as a library that you're importing to prevent namespace clashes.