Discord bot with Interactions.py | on_message not receiving messages from any channel. How to listen for messages? - discord

My bot has fully functioning /slash commands and I would also like them to be text commands and add other functionality when users send messages in chat. However, I cannot seem to get the bot to listen for messages.
import interactions
# Create the bot
Bot = interactions.Client(
token = BotToken,
scope = ServerID
)
#Bot.event
async def on_message(message):
await HandleMessage(message)
return
Bot.start()
The code never enters the on_message method.
I had a working version with the discord.py module and they are very similar. I am not sure why it does not work with Interactions.py.
Working code with discord.py:
intents = discord.Intents.default()
intents.messages = True
intents.message_content = True
client = discord.Client(intents = intents)
#client.event
async def on_message(message):
await HandleMessage(message)
client.run(Token)

Related

Why wont my discord bot recognise commands?

I'm trying to make a discord bot that will provide the current price of crypto currencies when a command (!price) is used, below is my code i have taken out my bots token for obvious reasons
import requests
from discord import Client, Intents
intents = Intents.default()
intents.members = True
client = Client(intents=intents)
#client.event
async def on_ready():
print(f'Logged in as {client.user}')
#client.event
async def on_message(message):
if message.author == client.user:
return
if message.content.startswith('!price'):
symbol = message.content[6:].upper()
url = f'https://api.coingecko.com/api/v3/simple/price?ids={symbol}&vs_currencies=usd'
print(f'Fetching price for symbol: {symbol}')
response = requests.get(url)
print(f'API response: {response.json()}')
print(f'response.status_code: {response.status_code}')
try:
price = response.json()[symbol]['usd']
await message.channel.send(f'The price of {symbol} is ${price}')
except KeyError:
print(f'Error: Symbol {symbol} not found')
await message.channel.send(f'Error: Symbol {symbol} not found')
client.run('TOKEN GOES HERE')
i have tried literally everything, Ive added so many debugging tools and I'm fairly certain that the problem lies with my bot picking up my commands in the discord server,

discord.py changing bot status

I am trying to change my bot status but i keep on getting this error.
TypeError: Client.__init__() missing 1 required keyword-only argument: 'intents
my code
import discord
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)
#client.event
async def on_message(message):
if message.content.startswith('bruh'):
channel = message.channel
await channel.send('brah')
client = discord.Client(activity=discord.Game('Beep Boop'))
i added the intents to my code but i am still getting the same error message. I tried to google but all the answers are from pre discord.py v2.
You redefined the client in line 14 and didn't pass the intents keyword argument. And if you want to change the bot's status, just put it in the first client constructor.
import discord
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents, activity=discord.Game('Beep Boop'))
#client.event
async def on_message(message):
if message.content.startswith('bruh'):
channel = message.channel
await channel.send('brah')
# client = discord.Client(activity=discord.Game('Beep Boop'))

Discord.py send message when another user posts a message

I am making a bot in discord.py and want my bot to ping a role when a Webhook sends message in a specific channel. Is there anyway to do this? Right now all I have is the channel id and I am pretty sure it is a client Event
#client.event
async def pingrole():
channel = client.get_channel("channel id")
async def on_message(message):
if message.author.id == webhook.id:
await ctx.send(role.mention)

Discord.py welcome bot on_member_join event not getting callded

I've been interested in working with discord bots lately, and from what I'm seeing this code should work but it is not...
I'm simply just playing around with the API because it's fun so I'm pretty new with this. I just want the bot to welcome someone when they join.
import discord
client = discord.Client()
#client.event
async def on_ready():
print('We have logged in as {0.user}'.format(client))
channel = client.guilds[0].get_channel(CHANNEL ID)
await channel.send("Bot online")
#client.event
async def on_message(message):
if message.author == client.user:
return
if message.content.startswith('$hello'):
await message.channel.send('Hello!')
#client.event
async def on_member_join(member):
print(f'{member.name} has joined the server')
channel = client.guilds[0].get_channel(CHANNEL ID)
print(channel)
await channel.send(f'{member.name} has joined the server')
#client.event
async def on_member_remove(member):
print(f'{member.name} has left the server')
channel = client.guilds[0].get_channel(CHANNEL ID)
print(channel)
await channel.send(f'{member.name} has left the server')
client.run('TOKEN HERE')
instead of member.name use member and if that dosnt work add this where you have your variables intents = discord.Intents(messages = True, guilds = True, reactions = True, members = True, presences = True)
client = commands.Bot(command_prefix = '*', intents = intents)
FOR discord.py >= 1.5
1.5 adds support for Gateway Intents, by default your bot doesn't have access to guild members like it did in previous versions. If your bot is in less than 100 servers then you can enable these intents without verification. You should see these settings at the bottom of your Bot page on the Discord Developer Portal. If you enable both, then you need to change your Client (or commands.Bot) instantiation as such:
intents = discord.Intents.all()
client = discord.Client(intents=intents)
When I test this, the event is firing, but I'll bet your issue lies in the line:
channel = client.guilds[0].get_channel(CHANNEL ID)
It will be far more reliable to just use use client.get_channel to ensure you are actually grabbing the intended channel, all channel IDs on discord are unique so you do not need to use a guild object. Also CHANNEL ID will not be a valid variable, but I am guessing you just redacted it.
You forgot the brackets for the decorators.
#client.event
should be
#client.event()
EDIT: Not it, apparently. Will update this answer when OP replies with more information.

Trying to use ack and getingg ban from discord Why?

Code:
import discord
token = 'mytoken'
client = discord.Client()
#client.event
async def on_ready():
print("Online!")
for guild in client.guilds:
print(guild)
await guild.ack()
client.run(token, bot=False)
I am Getting ban from discord every time i using this
The owner of this website (discordapp.com) has banned you temporarily from accessing this website.
Because you sends more than normal human requests-per-second.
You can try to fix it with await asyncio.sleep() but I suggest you just stop using selfbots.
Possible fix:
#client.event
async def on_ready():
print("Online!")
for guild in client.guilds:
print(guild)
await guild.ack()
await asyncio.sleep(10) # Sleep for 10 seconds

Resources