We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
'FFmpegPCMAudio' object has no attribute '_process'
When I run the music file, I have this error while using the !play command.
# This example requires the 'message_content' privileged intent for prefixed commands. import asyncio import youtube_dl import discord 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 at certain times } ffmpeg_options = {'options': '-vn'} ytdl = youtube_dl.YoutubeDL(ytdl_format_options) class YTDLSource(discord.PCMVolumeTransformer): def __init__(self, source: discord.AudioSource, *, data: dict, volume: float = 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: # Takes the 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_: commands.Bot): self.bot = bot_ @commands.command() async def join(self, ctx: commands.Context): """Joins the voice channel of the member who executed the command""" channel = ctx.author.voice.channel if channel: if ctx.voice_client is not None: return await ctx.voice_client.move_to(channel) await channel.connect() else: await ctx.send("You are not connected to a voice channel.") @commands.command() async def play(self, ctx: commands.Context, *, query: str): """Plays a file from the local filesystem""" source = discord.PCMVolumeTransformer(discord.FFmpegPCMAudio(query)) ctx.voice_client.play( source, after=lambda e: print(f"Player error: {e}") if e else None ) await ctx.send(f"Now playing: {query}") @commands.command() async def yt(self, ctx: commands.Context, *, url: str): """Plays from a url (almost anything youtube_dl supports)""" async with ctx.typing(): player = await YTDLSource.from_url(url, loop=self.bot.loop) ctx.voice_client.play( player, after=lambda e: print(f"Player error: {e}") if e else None ) await ctx.send(f"Now playing: {player.title}") @commands.command() async def stream(self, ctx: commands.Context, *, url: str): """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(f"Player error: {e}") if e else None ) await ctx.send(f"Now playing: {player.title}") @commands.command() async def volume(self, ctx: commands.Context, 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(f"Changed volume to {volume}%") @commands.command() async def stop(self, ctx: commands.Context): """Stops and disconnects the bot from voice""" await ctx.voice_client.disconnect(force=True) @play.before_invoke @yt.before_invoke @stream.before_invoke async def ensure_voice(self, ctx: commands.Context): 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() intents = discord.Intents.default() intents.message_content = True bot = commands.Bot( command_prefix=commands.when_mentioned_or("!"), description="Relatively simple music bot example", intents=intents, ) @bot.event async def on_ready(): print(f"Logged in as {bot.user} (ID: {bot.user.id})") print("------") bot.add_cog(Music(bot)) bot.run("token")
The bos is supposed to play music
AttributeError: 'FFmpegPCMAudio' object has no attribute '_process'
message intent
No response
The text was updated successfully, but these errors were encountered:
Have you installed ffmpeg or avconv on your computer and put their path in the %PATH% env variable?
Sorry, something went wrong.
See above comment and if that doesn't solve it share the full traceback.
No branches or pull requests
Summary
'FFmpegPCMAudio' object has no attribute '_process'
Reproduction Steps
When I run the music file, I have this error while using the !play command.
Minimal Reproducible Code
Expected Results
The bos is supposed to play music
Actual Results
AttributeError: 'FFmpegPCMAudio' object has no attribute '_process'
Intents
message intent
System Information
Checklist
Additional Context
No response
The text was updated successfully, but these errors were encountered: