Discord py not recognizing command - python

client.event works fine, connection and messages are registered. But cannot get discord to recognize command when I type i.e. '.ping'
python 3.7 on anaconda distribution
import os
import discord
from discord.ext import commands
from dotenv import load_dotenv
load_dotenv('.env.txt')
TOKEN = os.getenv('DISCORD_TOKEN')
client = commands.Bot(command_prefix = '.')
#client.event
async def on_ready():
print(f'{client.user} has connected to Discord!')
#client.event
async def on_message(message):
print(f'{client.user} has sent a message')
#client.command()
async def ping(ctx):
print('test')
await ctx.send('test')
client.run(TOKEN)

Alright, you need to understand that overridng the default on_message forbids any extra commands from running.
An easy fix for this, is to add a client.process_commands(message) to the end of the on_message event.
So in your case:
import discord
from discord.ext import commands
from dotenv import load_dotenv
load_dotenv('.env.txt')
TOKEN = os.getenv('DISCORD_TOKEN')
client = commands.Bot(command_prefix = '.')
#client.event
async def on_ready():
print(f'{client.user} has connected to Discord!')
#client.event
async def on_message(message):
print(f'{client.user} has sent a message')
client.process_commands(message)
#client.command()
async def ping(ctx):
print('test')
await ctx.send('test')
client.run(TOKEN)```

Related

discord python bot isn't replying to commands

my discord bot isn't replying to commands does anyone know why? i also get an error that says discord.gateway: Shard ID None has connected to Gateway
token = 'mytoken'
import discord
client = discord.Client(intents=discord.Intents.default())
#client.event
async def on_ready():
print('we are logged in as {0.user}'.format(client))
#client.event
async def on_message(message):
if message.author == client:
return
if message.content.startswith('$info'):
message.channel.send(f'> i am a bot currently being developed by agent')
client.run(token)
You should use a bot instead of a client, and don't forget to await async functions.
try this:
import discord
from discord.ext import commands
token = 'mytoken'
bot = commands.Bot(command_prefix='$')
#bot.event
async def on_ready():
print('Ready!')
#bot.command()
async def info(ctx):
await ctx.send('> i am a bot currently being developed by agent')
bot.run(token)
now try $info with the bot running.
Try to use discord.ext.commands instead of discord.client
token = 'mytoken'
import discord
from discord.ext import commands
client = commands.Bot(intents=discord.Intents.default())
#client.event
async def on_ready():
print('we are logged in as {0.user}'.format(client))
#client.event
async def on_message(message):
if message.author == client:
return
if message.content.startswith('$info'):
message.channel.send(f'> i am a bot currently being developed by agent')
bot.process_commands(message)
client.run(token)

Discord Bot not responding to commands... (Using Pycord)

Im trying to make a discord bot, and I want its first command to be pretty simple, I just want it to respond "pong!" when someone types "!ping" but when I try to run the command, nothing happens.. I've tried using other commands too but they all result in errors.. I'm a beginner to using Python, so please, can someone tell me what's wrong with my code, and how I can fix it?
In short, my bot doesn't respond back when I type the command I made for it to do so.
import discord
import os
from discord.ext import commands
from discord.ext.commands import Bot
case_insensitive=True
client = discord.Client()
bot = commands.Bot(
command_prefix="!",
intents=discord.Intents(members=True, messages=True, guilds=True)
)
#client.event
async def on_ready():
print('logged in as {0.user}!'.format(client))
#client.event
async def on_message(message):
if message.author == client.user:
return
#bot.command(name="ping", description= "Find out!")
async def ping(ctx):
await ctx.send("Pong!")
client.run(os.getenv('TOKEN'))
Instead of #bot.command you should use #client.command.
Also no need for the from discord.ext.commands import Bot import
So your new code would be
import discord
import os
from discord.ext import commands
case_insensitive=True
client = discord.Client()
bot = commands.Bot(
command_prefix="!",
intents=discord.Intents(members=True, messages=True, guilds=True)
)
#client.event
async def on_ready():
print('logged in as {0.user}!'.format(client))
#client.event
async def on_message(message):
if message.author == client.user:
return
#client.command(name="ping", description= "Find out!")
async def ping(ctx):
await ctx.send("Pong!")
client.run(os.getenv('TOKEN'))
You could just do inside on_message code block
import discord
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)
#client.event
async def on_ready():
print(f'We have logged in as {client.user}')
#client.event
async def on_message(message):
if message.author == client.user:
return
if message.content.startswith('!ping'):
await message.channel.send('Pong!')
client.run('your token here')

Why can't my discord.py bot see messages?

I am making a discord.py bot and it does not "see" messages at all, it is supposed to print everything into the terminal and have a prefix, but it doesn't even print any message.
code:
import datetime
import os
import discord
from timeit import default_timer as timer
from dotenv import load_dotenv
from discord.ext import commands
load_dotenv()
bot = commands.Bot(command_prefix="!")
intents = discord.Intents.default()
intents.members = True
bot = commands.Bot(command_prefix="!", intents=intents)
TOKEN = ('boop')
client = discord.Client()
#client.event
async def on_ready():
print(f'{client.user} has connected to Discord!')
async def on_message(message):
print(f'USER - {message.author} texted - {message.content}')
#bot.command()
async def start(ctx):
await ctx.channel.send("you have started")
await ctx.guild.create_role(name= {message.author} + "w")
client.run(TOKEN)
(there are extra unused modules I'm planning to use later)
There are a few problems in your code:
You should only have one commands.Bot instance, events are not exclusive to discord.Client.
For your bot to catch commands, you need bot.process_commands at the end of your on_message event.
You were missing #bot.event above on_message.
You forgot the fstring in ctx.guild.create_role(...).
import discord
from discord.ext import commands
import os
import datetime
from dotenv import load_dotenv
from timeit import default_timer as timer
load_dotenv()
intents = discord.Intents.default()
intents.members = True
bot = commands.Bot(command_prefix="!", intents=intents)
#bot.event
async def on_ready():
print(f'{client.user} has connected to Discord!')
#bot.event
async def on_message(message):
print(f'USER - {message.author} texted - {message.content}')
await bot.process_commands(message)
#bot.command()
async def start(ctx):
await ctx.channel.send("You have started")
await ctx.guild.create_role(name=f"{message.author}w")
bot.run("TOKEN")

Discord.py Why will this client.command not work?

import discord
from discord.ext import commands
import asyncio
client = commands.Bot(command_prefix="-")
#client.event
async def on_message(message):
if message.content.startswith("uno regeln"):
await message.channel.send('http://www.uno-kartenspiel.de/spielregeln/')
#client.command()
async def test(ctx):
await ctx.send("Ok")
client.run("TOKEN")
When I try to run this and use -test nothing happens
But why?
I looked in the docs but in my opinion everything is fine
As given by the link provided by #Lukasz Kwieciński,
you need to change it to:
import discord
from discord.ext import commands
import asyncio
client = commands.Bot(command_prefix="-")
#client.event
async def on_message(message):
if message.content.startswith("uno regeln"):
await message.channel.send('http://www.uno-kartenspiel.de/spielregeln/')
await bot.process_commands(message)
#client.command()
async def test(ctx):
await ctx.send("Ok")
client.run("TOKEN")
import discord
from discord.ext import commands
intents = discord.Intents.default()
client = commands.Bot(command_prefix="!", intents=intents)
client.remove_command('help')
#client.event
async def on_ready():
print("Bot Is Ready")
await client.change_presence(activity=discord.Game(name="TYPE THERE ANYONE"))
#client.command()
async def test(ctx):
await ctx.send("Ok")
client.run('YOUR TOKEN')
Try this

command cant working on discord bot at new version

import discord
import random
from discord.ext import commands
client = commands.Bot(command_prefix = '!')
#client.event
async def on_message(message):
print('Message from {0.author}: {0.content}'.format(message))
#client.event
async def on_ready():
deneme=["Besim Tibuk Online!","Bu Kitap benim","Satacağız!","Özelleştireceğiz!"]
await client.get_channel(#########).send(random.choice(deneme))
#client.command()
async def ping(ctx):
await ctx.send("Pong")
"client.command()" side cant working.When ı write "ping" I cant get response
Its because of your on_message, you arent processing commands. To process commands, do await client.process_commands(message). Here is the reworked code.
#client.event
async def on_message(message):
print('Message from {0.author}: {0.content}'.format(message))
await client.process_commands(message)

Categories

Resources