discord bot not responding - python - python

I am working on a discord bot in python, and it has suddenly stopped responding. Any reason why this might be happening?
Here is my code;
import discord
TOKEN = '(censored)'
client = discord.Client()
prefix = '!'
playername = []
playercredits = []
#client.event
async def on_message(message):
if message.content.startswith(prefix + 'hi'):
msg = f'Hi baldy.'
await message.channel.send(msg)
#client.event
async def on_ready():
print('------')
print(client.user.name)
print(client.user.id)
print('------')
client.run(TOKEN)
if you have any idea why my bot isn't responding, please assist me. Thanks!

on_message is overriding the default provided on_message which forbids any extra commands from running. To fix this, add a client.process_commands(message) line at the end of your on_message. For example:
#client.event
async def on_message(message):
# do some extra stuff here
await client.process_commands(message)

Related

Discord word filter bot doesn't delete anything

I made a discord.py bot for one of our members, as a joke. im testing it out and it doesnt work at all. can someone tell me what can be wrong with this code?
from http import client
import os
import discord
from dotenv import load_dotenv
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
client = discord.Client()
#client.event
async def on_ready():
print(f'{client.user} has connected to Discord!')
client.run(TOKEN)
#client.event
async def on_message(message):
await client.process_commands(message) # add this if also using command decorators
if message.author.id == 300677572683890688 and "tranime" in message.content.lower():
await message.delete()
await message.channel.send(f"You are in the process of behavioural therapy. please do not attempt to bypass it, {message.author.mention}")
The structure, how you build the bot, is wrong in many ways, that could cause the error.
To run the bot,
client.run(TOKEN)
always belongs at the end of your code!
To process commands, you put
await client.process_commands(message)
at the end of your on_message event, even though this is not necessary here as you just use discord.Client().
A new structure could be:
client = discord.Client()
#client.event
async def on_ready():
print(f'{client.user} has connected to Discord!')
#client.event
async def on_message(self, message):
if message.author.id == 300677572683890688 and "tranime" in message.content.lower():
await message.delete()
await message.channel.send(f"Your message here")
await client.process_commands(message)
client.run(TOKEN)
The code should also be indented correctly, otherwise there may be problems.

Can't run a join function because of a on_message event

i'm making a discord bot with python. I have some issues about running using #client.command and #client.event at the same time.
Here is the code:
when I comment the #client.event before the on message function, the join command run. This function cause a particular issue, do you know guys where it can come from? Thank you guys
import discord
import random
from discord.utils import get
from discord.ext import commands
#client.command(pass_context=True)
async def join(ctx):
channel = ctx.author.voice.channel
await channel.connect()
#client.command(pass_context=True)
async def leave(ctx):
await ctx.voice_client.disconnect()
#client.event
async def on_ready():
print("We have logged as {0.user}".format(client))
#client.event
async def on_message(message):
user = message.author.id
if message.content.lower() == "!poisson":
await message.delete()
with open('myimage.png', 'rb') as f:
picture = discord.File(f)
await message.channel.send(file=picture)
Put await client.process_commands(message) at the end of on_message()
If you're using on_message, then normal commands will be overridden unless you use process_commands.

Having trouble sending messages from a Discord Bot

I'm currently trying to make a Discord bot using Python, to automate some boring stuff. I'm currently just trying to make something that will respond to a message, and then send something back.
My code is Here:
import discord
TOKEN = '(The correct Token, hidden for obvious reasons)'
client = discord.Client()
#client.event
async def on_message(message):
# we do not want the bot to reply to itself
if message.author == client.user:
return
if message.content.startswith('!hello'):
msg = 'Hello {0.author.mention}'.format(message)
await client.send(message.channel, msg)
#client.event
async def on_ready():
print('Logged in as')
print(client.user.name)
print(client.user.id)
print('------')
client.run(TOKEN)
When I run this code, the bot appears online, and recognises when someone types !hello. However, Immediately after, it returns an error trying to send a message "AttributeError: 'Client' object has no attribute 'send'"
I've been at this for a fair few hours at this point, and any hep would be greatly appreciated
considering this has "!" at the beginning of it, instead of making this an on_message event, we can just turn this into a command by changing the following and make it more compact while doing so!.
original code:
import discord
TOKEN = '(The correct Token, hidden for obvious reasons)'
client = discord.Client()
#client.event
async def on_message(message):
# we do not want the bot to reply to itself
if message.author == client.user:
return
if message.content.startswith('!hello'):
msg = 'Hello {0.author.mention}'.format(message)
await client.send(message.channel, msg)
#client.event
async def on_ready():
print('Logged in as')
print(client.user.name)
print(client.user.id)
print('------')
client.run(TOKEN)
edited code:
import discord
from discord.ext import commands #imports the commands module
client = commands.Bot(command_prefix = '!')
#client.command()
async def Hello(ctx):
await ctx.send(f'Hello {ctx.message.author}')
#the rest is the same as your original code
#client.event
async def on_ready():
print('Logged in as')
print(client.user.name)
print(client.user.id)
print('------')
client.run('Token')
Hopefully that helps! Best of luck,
-Landon

Discord bot only responds to one command

I'm setting up a simple Python Discord bot, but it only seems to respond to one event/command. It only responds to when someone says "supreme sauce" it sends "raw sauce" but doesn't respond to anything else such as ".ping" or ".clear".
Is there anything that I'm doing wrong?
My code:
import discord
from discord.ext import commands
import time
client = commands.Bot(command_prefix = '.')
#client.event
async def on_ready():
print(f'{client.user} has successfully connected to Discord!')
#client.event
async def on_message(message):
if 'supreme sauce' in message.content:
await message.channel.send('raw sauce')
#client.command()
async def ping(ctx):
await ctx.send(f'Pong! {round(client.latency * 1000)}ms')
#client.command
async def clear(ctx, amount=10):
await ctx.channel.purge(limit=amount)
client.run('My Token')
on_message takes priority over commands.
If you want both things to happen, do like this:
async def on_message(message):
if message.author == bot.user: return #Makes sure it can't loop itself when making messages
await bot.process_commands(message)
#rest of your code here
This makes it so that when a message is sent, it will check if that message is a command and go from there, then it will execute the on_message code like normal

Commands not being recognized by discord.py

I have a simple discord.py set up trying to use .ping, but in this current instance, the actual sending of ".ping" results in nothing being sent by the bot. Is there something I'm missing here?
import discord
from discord.ext import commands
bot = commands.Bot(command_prefix = ".")
#bot.event
async def on_ready():
print("Everything's all ready to go~")
#bot.event
async def on_message(message):
author = message.author
content = message.content
print(content)
#bot.event
async def on_message_delete(message):
author = message.author
channel = message.channel
await bot.send_message(channel, message.content)
#bot.command()
async def ping():
await bot.say('Pong!')
bot.run('Token')
Ensure that you have await bot.process_commands(message) somewhere in your on_message event.
Why does on_message make my commands stop working?
Overriding the default provided on_message forbids any extra commands from running. To fix this, add a bot.process_commands(message) line at the end of your on_message. For example:
#bot.event
async def on_message(message):
# do some extra stuff here
await bot.process_commands(message)
https://discordpy.readthedocs.io/en/latest/faq.html#why-does-on-message-make-my-commands-stop-working

Categories