首页 > 解决方案 > 名称“create_dm”未定义

问题描述

用户被踢出服务器后如何向用户发送消息?每当我尝试以下代码时,它都无法正常工作。

import discord
from discord.ext import commands  

intents = discord.Intents(messages=True, guilds=True, reactions=True, members=True,presences=True,guild_messages=True)

client = commands.Bot(command_prefix="!dc ", intents=intents)

@client.event
async def on_ready():  
    print("I am ready!")

@client.command(aliases=["ban"])
@commands.has_role("admin")

async def ban_user(self,ctx, member: discord.Member, *, reason=None):
    await member.ban(reason=reason)
    await ctx.send(f"{member} has been kicked from server.")
    dm_channel = await create_dm(member)  #These two code lines are where I got this error
    await dm_channel.send("You've been banned from the server.You won't join the server until admin opens your ban.")
        
@commands.command(aliases=["kick"])
@commands.has_role("admin")

async def kick_user(self,ctx, member: discord.Member, *, reason=None):
    await member.kick(reason=reason)
    await ctx.send(f"{member} has been kicked from the server.")

client.run(myToken)

标签: pythondiscord.py

解决方案


根据您的问题,我假设您想要 dm 被禁止的用户。为此,您可以,

async def ban(self, ctx, member: discord.Member, *, reason=None):
    await ctx.send(f'{member} has banned from the server.') # sends the message in the server
    await member.send(f'You have been banned from {member.guild.name}.') #dms the member that he has been banned.
    await member.ban(reason = reason) #bans the user from the server.

注意:如果你先封禁会员,然后再尝试在服务器和dm中发送消息,你会得到一个错误,因为找不到该会员。


推荐阅读