You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord机器人成员加入无欢迎消息+私信功能故障求助

Discord机器人功能故障排查与修复

问题1:成员加入欢迎消息未生效

错误原因

  1. 属性名大小写错误:member.Guild应为小写的member.guild(Discord.py中对象属性均为小写)
  2. 未开启成员特权意图: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指令功能失效

错误原因

  1. 拼写错误:所有massage应为message(事件名、变量名均写错)
  2. 属性调用错误:ctx.member不存在,应使用ctx.author获取指令发送者
  3. 消息内容调用错误:直接发送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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 14:45:46