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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 11:12:41