如何用discord.py实现新成员加入时给Admin角色成员发私信?
实现新成员加入时给Admin角色发私信的Discord机器人方案
嘿,作为编程新手搞Discord机器人确实会有点懵,不过这个需求其实不难实现,我给你一步步拆解,用Python的discord.py库来做(这个库对新手友好,上手门槛低):
第一步:准备工作
- 安装
discord.py:打开命令行,输入pip install discord.py完成安装 - 创建Discord机器人账号:
- 去Discord开发者平台创建一个新应用,然后添加Bot用户
- 把机器人邀请到你的服务器,邀请链接要包含
bot权限,新手阶段可以直接给机器人Administrator权限方便测试 - 关键操作:在开发者平台的Bot页面,开启
Privileged Gateway Intents下的Server Members Intent,不然机器人监听不到成员加入事件!
第二步:核心代码实现
下面是完整的代码示例,每一行都加了注释,你可以直接复制修改:
import discord from discord.ext import commands # 初始化机器人,必须开启成员意图才能监听新成员加入 intents = discord.Intents.default() intents.members = True # 这行一定要加!否则监听不到成员加入事件 bot = commands.Bot(command_prefix="!", intents=intents) # 机器人登录成功后的提示 @bot.event async def on_ready(): print(f"机器人已上线!当前登录账号:{bot.user}") # 监听新成员加入事件 @bot.event async def on_member_join(member): # 找到服务器里的Admin角色,这里替换成你服务器的角色名称(注意大小写完全匹配) # 如果想用角色ID更可靠,把name换成id,比如id=123456789012345678 admin_role = discord.utils.get(member.guild.roles, name="Admin") # 检查是否找到Admin角色 if not admin_role: print("警告:找不到名为Admin的角色,请检查角色名称是否正确!") return # 遍历所有拥有Admin角色的成员,逐个发私信 for admin_member in admin_role.members: try: # 发送私信内容,你可以自定义消息格式 await admin_member.send(f"📢 新成员 {member.name}#{member.discriminator} 加入了服务器!") print(f"已通知管理员:{admin_member.name}") except discord.Forbidden: # 有些用户关闭了私信权限,捕获这个异常避免机器人崩溃 print(f"无法通知 {admin_member.name}:对方关闭了私信接收权限") # 替换成你的机器人Token(从开发者平台Bot页面复制) bot.run("你的机器人Token")
新手容易踩的坑
- 忘记开启成员意图:代码里的
intents.members = True和开发者平台的Server Members Intent必须同时开启,否则机器人完全监听不到新成员加入的事件 - 角色名称不匹配:一定要确保代码里的角色名称和服务器里的完全一致(包括大小写、空格),用角色ID会更稳定(开启Discord开发者模式后,右键角色就能复制ID)
- Token泄露:绝对不要把你的机器人Token上传到GitHub或者公开分享,一旦泄露别人就能控制你的机器人
- 私信发送失败:有些用户设置了不接收陌生人私信,所以一定要加异常捕获,不然机器人会因为这个报错停止运行
内容的提问来源于stack exchange,提问作者smuggie




