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
Related
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.
i'm currently using these commands to make my bot leave/join a vc. Joining works fine, but leaving won't work.
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_channel.move_to(voice_channel)
#commands.command()
async def disconnect(self,ctx):
await ctx.voice_client.disconnect()
Any help in understanding why would be really appreciated!
try with:
#commands.command()
async def disconnect(self,arg):
await arg.voice_client.disconnect(force=True)
and also replace channel name from ctx to arg cause it takes ctx as current channel (its not possible to type in voice channel afaik)
I've got a problem with my music bot
It shows the same error again and again. Everytime when I type ?join or something like that (a command) it shows this message: Ignoring exception in command None:
discord.ext.command.errors.CommandNotFound: Command "(the command I've used)" is not found
Can someone help pls?
Code:
main.py:
import discord
from discord.ext import commands
import music
import os
import requests
import json
token = os.environ['botpw']
cogs = [music]
client = commands.Bot(command_prefix='?', intents = discord.Intents.all())
for i in range(len(cogs)):
cogs[i].setup(client)
#client.event
async def on_ready():
print('We have logged in as {0.user}'.format(client))
client.run(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("Du bist nicht in einem 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_steamed 1 -reconnect_delay_max 5', 'options': '-vn'
}
YDL_OPTIONS = {'format':'bestaudio'}
vc = ctx.voice_client
with youtube_dl.Youtube_dl(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('pausiert ')
#commands.command()
async def resume(self, ctx):
await ctx.voice_client.resume
await ctx.send('play ')
def setup (client):
client.add_cog(music(client))
If your indents are same as you pasted here. The problem is here.
play, pause, etc are separated functions but not music class methods.
You should add indents to it:
class music(commands.Cog):
def __init__(self, client):
self.client = client
→→#commands.command()
→→async def join(self,ctx):
→→→→...
...
#commands.command()
async def pause(self, ctx):
...
#commands.command()
async def resume(self, ctx):
...