CYCNO
CYCNO

Reputation: 86

Not able to DM or direct messages in discord.py-self latest version

i am not been able to send dm it gives me an error using module discord.py-self

here is the code

import discord

class MyClient(discord.Client):
    async def on_ready(self):
        print(f'Logged in as {self.user} (ID: {self.user.id})')
        print('BOT IS RUNNING')
        
    async def on_message(self, message):
        
        if message.content.startswith('.hello'):
            await message.channel.send('Hello!', mention_author=True)
            for member in message.guild.members:
                if (member.id != self.user.id):
                    user = client.get_user(member.id)
                    await user.send('hllo')
                   

client = MyClient()
client.run('my token')

error

raise HTTPException(r, data)
discord.errors.HTTPException: 400 Bad Request (error code: 0)

In server it is only me and a offilne bot i trying to send a message to bot (as you can see in code)

Upvotes: 0

Views: 703

Answers (1)

clxrity
clxrity

Reputation: 336

I would try defining your bot like this:

import discord
from discord.ext import commands

## (Make sure you define your intents)
intents = discord.Intents.default()
# What I always add for example:
intents.members = True
intents.guilds = True
intents.messages = True
intents.reactions = True
intents.presences = True

## Define your bot here
client = commands.Bot(command_prefix= '.', description="Description.", intents=intents)

## Run bot here
client.run(TOKEN)

Then, instead of rendering a client on_message event, I'd instead just set it up like a command which will utilize the prefix as defined for the bot above.

@client.command()
async def hello(ctx):
    user = ctx.author
    await ctx.send(f"Hello, {user.mention}")
    dm = await user.create_dm()
    await dm.send('hllo')

Better practice: (in my opinion)

Use cogs to keep your code neat. Set up this command in an entirely different file (say within a /commands folder for instance):

/commands/hello.py

import discord
from discord.ext import commands


class HelloCog(commands.Cog):
    def __init__(self, bot):
        self.bot = bot

    @commands.command()
    async def hello(self, ctx):
        user = ctx.author
        await ctx.send(f"Hello, {user.mention}")
        dm = await user.create_dm()
        await dm.send('hllo')

Then import the cog into your main file:

from commands.hello import HelloCog

client.add_cog(HelloCog(client))

Hope this helps.

Upvotes: 1

Related Questions