Discord机器人成员加入无欢迎消息+私信功能故障求助
Discord机器人功能故障排查与修复
问题1:成员加入欢迎消息未生效
错误原因
- 属性名大小写错误:
member.Guild应为小写的member.guild(Discord.py中对象属性均为小写) - 未开启成员特权意图:Discord.py v1.5+需要在开发者门户开启Server Members Intent,否则机器人无法接收
on_member_join事件
修正后的代码片段
@client.event async def on_member_join(member): # 修正属性大小写,明确指定获取频道列表 channel = discord.util.get(member.guild.channels, name='general') if channel: # 增加判断,避免找不到频道时报错 await channel.send(f'Hey welcome to my server {member.mention}, hope you enjoy this server!')
问题2:DM指令功能失效
错误原因
- 拼写错误:所有
massage应为message(事件名、变量名均写错) - 属性调用错误:
ctx.member不存在,应使用ctx.author获取指令发送者 - 消息内容调用错误:直接发送
message对象会输出内置信息,需取message.content获取实际消息文本
修正后的代码片段
@client.command() async def dm(ctx, member: discord.Member): await ctx.send('what do u want to say bitch!') def check(m): # 增加频道校验,只响应指令所在频道的消息 return m.author.id == ctx.author.id and m.channel == ctx.channel # 修正拼写:massage → message message = await client.wait_for('message', check=check) await ctx.send(f'send message to {member} ') # 修正属性与消息内容调用 await member.send(f'{ctx.author.mention} has a message for you: \n {message.content}')
完整修复代码
import os, discord, asyncio import keep_alive from discord.ext import commands # 启用必要的特权意图 intents = discord.Intents.default() intents.members = True # 开启成员意图,用于接收on_member_join事件 client = commands.Bot(command_prefix="!", intents=intents) token = os.environ.get('Token') GUILD = os.environ.get('Guild') @client.event async def on_ready(): print(f'{client.user} is connected') @client.command() async def dm(ctx, member: discord.Member): await ctx.send('what do u want to say bitch!') def check(m): return m.author.id == ctx.author.id and m.channel == ctx.channel message = await client.wait_for('message', check=check) await ctx.send(f'send message to {member} ') await member.send(f'{ctx.author.mention} has a message for you: \n {message.content}') @client.event async def on_member_join(member): channel = discord.util.get(member.guild.channels, name='general') if channel: await channel.send(f'Hey welcome to my server {member.mention}, hope you enjoy this server!') keep_alive.keep_alive() client.run(token)
额外注意事项
- 前往Discord开发者门户,找到你的机器人应用,在Privileged Gateway Intents中开启
Server Members Intent - 确保机器人在服务器中有发送消息到
general频道的权限 - 测试DM功能时,确保目标成员未关闭来自服务器成员的私信
内容的提问来源于stack exchange,提问作者Mr Mortal
相关产品推荐
相关产品推荐

