Reputation: 133
I'm trying to make a discord bot, and I am following a simple tutorial, and I can't get the simplest command to work. I am on python 3.6 and running discord.py version 0.16.12
#Imports
import time
import discord
import asyncio
from discord.ext import commands
#Initialize
client = discord.Client()#Creates Client
bot = commands.Bot(command_prefix='!')#Sets prefix for commands(!Command)
#Code
@bot.command()
async def SendMessage(ctx):
await ctx.send('Hello')
The code should work but it gives me the error discord.ext.commands.errors.MissingRequiredArgument: ctx is a required argument that is missing.
Upvotes: 4
Views: 36369
Reputation: 1
Try this: (choose your own prefix)
import time
from discord.ext import commands
client = commands.Bot(command_prefix = '/')
@client.command()
async def SendMessage(ctx):
await ctx.send('Hello')
Upvotes: 0
Reputation: 133
You shouldn't initialize commands.Bot()
and discord.Client()
at the same time. Just remove client
variable and everything should work.
# Imports
import time
import discord
import asyncio
from discord.ext import commands
# Initialize
bot = commands.Bot(command_prefix='!')
# Code
@bot.command()
async def SendMessage(ctx):
await ctx.send('Hello')
Upvotes: 0
Reputation: 1
Try this:
@client.command() async def Konnichiwa(ctx): await ctx.send("Konnichiwa, my Tomodachi!")
Upvotes: -3
Reputation: 1
discord.ext.commands.errors.MissingRequiredArgument: ctx is a required argument that is missing.
The reason your getting this is because you need to define ctx
.
Upvotes: -1
Reputation: 1
There is an easy fix for this :
bot = discord.Client()#Creates Client
bot = commands.Bot(command_prefix='!')#Sets prefix for commands(!Command)
Just change client to bot that'll do.
Upvotes: 0
Reputation: 3001
From the documentation:
A command must always have at least one parameter, ctx, which is the Context as the first one.
Upvotes: 1
Reputation: 70267
Discord.py commands do not, by default, pass the context. You specify that you would like the context passed by saying so as an argument to the decorator.
@bot.command(pass_context=True)
async def SendMessage(ctx):
await ctx.send('Hello')
Upvotes: 7