Discord self bot slow - discord

from discord.ext.commands import Bot
from discord.ext import commands
import asyncio
#TOKEN
TOKEN = "token"
client = discord.Client()
b = Bot(command_prefix = "!")
#b.event
async def on_ready():
print("on")
#b.event
async def on_message(message):
if "here" in message.content:
try:
await message.author.dm_channel.send("Message I choose")
except:
print('The DM could not be send due to privacy permissions')
b.run(TOKEN, bot = False)
So I have this self bot in discord. Basically it just checks when a person in a server says "#here" it will auto dm them with the message I choose as quick as possible. I would just like to know how would I make this self bot check if the person said that said #here faster.

Related

Discord py. How to get if user is online without commands

i need a help with a python code. All I need is to get if user selected (by myself) ID is currently online. How can I do that?
The code for now looks like this, but its dosnt print anserw
import discord
from discord.ext import commands
from discord import Member
TOKEN = "token"
intents = discord.Intents.default()
intents.message_content = True
intents.members = True
client = commands.Bot(command_prefix=".", intents=intents)
#client.event
async def on_ready():
return
#client.event
async def on_message(message, member : discord.Member=None):
if member == MyID:
print("draziv online")
if message.author == client.user:
return
if "hello" in message.content or "hi" in message.content:
return
# await message.channel.send(f'Hello there {message.author.mention}. I hope you have a fantastic day so far. ')
client.run(TOKEN)
I was trying all the methods I found over the internet, but almost all of them are outdated

discord bot doesn't respond [duplicate]

I'm trying to understand how migrating from discord.py version 1.7.3 to 2.0 works. In particular, this is test code I'm using:
from discord.ext import commands
with open('token.txt', 'r') as f:
TOKEN = f.read()
bot = commands.Bot(command_prefix='$', help_command=None)
#bot.event
async def on_ready():
print('bot is ready')
#bot.command()
async def test1(ctx):
print('test command')
bot.run(TOKEN)
In discord.py 1.7.3, the bot prints 'bot is ready', and I can do the command $test1.
In discord.py 2.0, the bot prints 'bot is ready', but I can't do the command, and there isn't any error message in the console when I'm trying to do the command.
Why does this occur, and how can I restore the behaviour of version 1.7.3 in my bot?
Use Intents with discord.py
Enable Intents
On Discord Developer Portal
Select your application
Click on the Bot section
And check MESSAGE CONTENT INTENT
Add your intents to the bot
Let's add the message_content Intent now.
import discord
from discord.ext import commands
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix='$', intents=intents, help_command=None)
Put it together
The code should look like this now.
import discord
from discord.ext import commands
with open('token.txt', 'r') as f: TOKEN = f.read()
# Intents declaration
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix='$', intents=intents, help_command=None)
#bot.event
async def on_ready():
print('bot is ready')
# Make sure you have set the name parameter here
#bot.command(name='test1', aliases=['t1'])
async def test1(ctx):
print('test command')
bot.run(TOKEN)

Discord.py autorole issue

I'm new at programming.I want to create an autorole system in my Discord server.I tried this:
class MyClient(discord.Client):
async def on_member_join(member):
server = client.get_guild(serverid)
role = server.get_role(roleid)
await member.add_roles(role)
But it's not working.Thanks for helping.
This works for me so I guess this will be useful for you:
import discord
from discord.ext import commands
from discord.utils import get
client = commands.Bot(command_prefix='!', intents=discord.Intents.all())
#client.event
async def on_ready():
print(f'{client.user} Started!')
#client.event
async def on_member_join(member: discord.Member):
role_id = 1234567890123456
role = get(member.guild.roles, id=role_id)
await member.add_roles(role)
client.run('your bot token here')
role_id is Integer.
must have member intents turned on, if you don't know how to enable read this:
Here

Discord.py bot reads message and if it encounters a particular word, copy and dm it to a particular user

I want my bot to read the messages and if it encounters the word "John" in any of the messages, it should copy and dm the message to a specific user. Below is the code i've written but it's not doing anything. Any help would be greatly appreciated.
import discord
from discord import Client
TOKEN = "insert token"
client = discord.Client()
#bot.event
async def on_message(message):
MessageContent = message.content.lower()
if "john" in MessageContent:
user = client.get_user("insert user_id")
await user.send(MessageContent)
bot.run(TOKEN, bot = False)
rename client = discord.Client() to bot = discord.Client()

Making my discord bot listen for specific messages and answer back when it identifies one

So, I'm new to python and even more to coding bots on discord. At the moment I'm using discord.py and red-bot (https://docs.discord.red/en/stable/index.html).
At the moment I'm trying to make the bot listen to a new message and print something in response to it, but I just can't figure it out. Since I'm using red-bot I didn't go through the steps of using client = discord.Client() and setting a token on the code itself so using #client.event() doesn't seem to work, nor #bot.event(), and I can't really find any other way to make the bot listen for an on_message() event.
Edit with part of my code:
import discord
from discord.ext import commands
from redbot.core import commands
class MyCog(commands.Cog):
client = discord.Client()
def __init__(self, bot):
self.bot = bot
#bot.event()
async def on_message(self, message):
if 'test' in message.content:
await self.send_message(message.channel, 'it works!')
Console returns that bot in #bot.event() is not defined.
Also a separate initialization file, it's done this way to follow Red's guide of how to make a cog.
from .remind import MyCog
def setup(bot):
bot.add_cog(MyCog(bot))
Here is an example of a cog that replies to a specific word mentioned. It also has a cooldown to prevent the bot spamming which I find absolutely neccesary to include.
from curses.panel import bottom_panel
import discord
from discord.ext import commands
class brilliant(commands.Cog):
def __init__(self, bot):
self.bot = bot
self._cd = commands.CooldownMapping.from_cooldown(1, 60.0, commands.BucketType.member) # Change accordingly
# rate, per, BucketType
def ratelimit_check(self, message):
"""Returns the ratelimit left"""
bucket = self._cd.get_bucket(message)
return bucket.update_rate_limit()
#commands.Cog.listener()
async def on_message(self, message):
if message.author == self.bot.user:
return
msg = message.content.lower()
brilliant = ['brilliant', 'Brilliant', 'brilliant!', 'Brilliant!']
if any(word in msg for word in brilliant):
retry_after = self.ratelimit_check(message)
if retry_after is None:
await message.channel.send("Brilliant!")
await self.bot.process_commands(message)
else:
return
async def setup(bot):
await bot.add_cog(brilliant(bot))
If you want it in the main file, you can put something a lot simpler:
brilliant = ['brilliant', 'Brilliant', 'brilliant!', 'Brilliant!']
#bot.event
async def on_message(message):
if message.author == bot.user:
return
msg = message.content.lower()
if any(word in msg for word in brilliant):
await message.channel.send("Brilliant!")
await bot.process_commands(message)
Hope it helps.

Resources