Cubemation
Cubemation

Reputation: 37

Callback for join command is missing "ctx" parameter

I'm trying to make a music cog for my bot. I'm currently making commands for the bot to join and leave a voice channel. But everytime i try to launch both of these commands, the same error occurs.

Ignoring exception in on_message
Traceback (most recent call last):
  File "C:\Users\Daniel\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\ext\commands\core.py", line 663, in _parse_arguments
    next(iterator)
StopIteration

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Daniel\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\client.py", line 312, in _run_event
    await coro(*args, **kwargs)
  File "C:\Users\Daniel\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\ext\commands\bot.py", line 930, in on_message
    await self.process_commands(message)
  File "C:\Users\Daniel\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\ext\commands\bot.py", line 927, in process_commands
    await self.invoke(ctx)
  File "C:\Users\Daniel\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\ext\commands\bot.py", line 892, in invoke
    await ctx.command.invoke(ctx)
  File "C:\Users\Daniel\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\ext\commands\core.py", line 790, in invoke
    await self.prepare(ctx)
  File "C:\Users\Daniel\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\ext\commands\core.py", line 751, in prepare
    await self._parse_arguments(ctx)
  File "C:\Users\Daniel\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\ext\commands\core.py", line 666, in _parse_arguments
    raise discord.ClientException(fmt.format(self))
discord.errors.ClientException: Callback for join/leave command is missing "ctx" parameter.

Here's the code i have:

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(ctx):
        channel = ctx.message.author.voice.channel
        await channel.connect()

    @commands.command()
    async def leave(ctx):
        await ctx.voice_client.diconnect()


def setup(client):
    client.add_cog(Music(client))

Anyone know how i can fix this ?

Upvotes: 1

Views: 3739

Answers (1)

Treatybreaker
Treatybreaker

Reputation: 816

You need to put self in your function async def join as well as your leave function:

@commands.command()
async def join(self, ctx):
    channel = ctx.message.author.voice.channel
    await channel.connect()

You're using a cog so you have a class with self that must be passed to classes not decorated with @staticmethod or @classmethod. With discord.py I recommend you do not do either of those for command/event functions you have above.

See: https://discordpy.readthedocs.io/en/latest/ext/commands/cogs.html

For cogs in discord.py

Upvotes: 2

Related Questions