Discord.py实现仅向特定服务器用户发送欢迎私信的技术问询
你的需求完全可行!我来帮你解决问题
首先得帮你理清之前的错误:on_member_join事件的参数只有member,并没有ctx对象,所以你用ctx.author.send才会触发AttributeError。实际上member本身就是刚加入服务器的用户实例,直接调用member.send()就能给用户发私信啦。
下面分两种场景给你具体实现方案:
方案一:为每个服务器配置专属欢迎消息
你可以先定义一个字典,把服务器ID和对应的专属欢迎消息绑定起来,然后在用户加入时判断所属服务器,发送对应内容:
@client.event async def on_member_join(member): # 定义服务器ID与专属欢迎消息的映射(服务器ID是整数类型) server_specific_welcomes = { 123456789012345678: "欢迎来到「服务器A」!请先阅读频道置顶的规则帖哦~", 987654321098765432: "嗨!欢迎加入「服务器B」,快和大家打个招呼吧😎" } # 获取用户加入的服务器ID joined_guild_id = member.guild.id # 如果当前服务器有配置专属消息,就发送私信给用户 if joined_guild_id in server_specific_welcomes: await member.send(server_specific_welcomes[joined_guild_id]) # 如果你想把消息发到服务器的指定欢迎频道,也可以这么写: # welcome_channel = member.guild.get_channel(111222333444555666) # 替换成你的频道ID # if welcome_channel and joined_guild_id in server_specific_welcomes: # await welcome_channel.send(f"{member.mention} {server_specific_welcomes[joined_guild_id]}")
方案二:仅向加入特定服务器的用户发送欢迎私信
如果你只需要给某个特定服务器的新成员发私信,直接判断用户加入的服务器ID是否匹配即可:
@client.event async def on_member_join(member): # 替换成你指定的目标服务器ID target_guild_id = 123456789012345678 # 判断用户加入的是否是目标服务器 if member.guild.id == target_guild_id: await member.send("欢迎加入我们的专属服务器!这里有超多干货和有趣的伙伴,期待你的参与~") # 非目标服务器的用户不会收到任何私信
额外提醒
- 确保你的机器人拥有「发送私信」的权限,并且用户没有屏蔽机器人的私信功能;
- 服务器ID可以通过Discord客户端开启「开发者模式」后,右键服务器名称复制得到;
- 如果需要更灵活的配置(比如从数据库读取欢迎消息),可以把上述字典替换成数据库查询逻辑,扩展性会更好。
内容的提问来源于stack exchange,提问作者2tbc1887
相关产品推荐
相关产品推荐

