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

如何用C#实现Discord用户欢迎消息?代码无消息问题排查

修复Discord.NET欢迎消息功能的问题

我来帮你一步步排查和修复这个问题,你的代码里有几个关键错误导致欢迎消息没触发:

  • 事件处理方法的签名不对
    Discord.NET的UserJoined事件要求方法接收一个SocketGuildUser类型的参数,用来获取刚加入的用户信息。你的方法既没有参数,还把方法名拼写错了(Userjoined应该是UserJoined,大小写是敏感的),这会让客户端没法正确绑定这个事件。

  • 错误获取用户ID
    你用了Context.Message.Author.Id,但UserJoined事件不是由消息触发的,这时候Context要么是空的,要么指向错误的上下文。正确的做法是直接用事件参数里的用户对象来拿ID。

  • 欢迎消息的提及格式错了
    你写的<@n{name}>是无效的Discord用户提及格式,正确的格式应该是<@{用户ID}>,多出来的那个n会导致没法正确@到新用户。

  • 别忘了注册事件
    就算方法写对了,你也得在客户端初始化的地方把这个事件注册上,不然它根本不会被触发。

下面是修复后的完整代码示例:

// 先在客户端启动的地方注册事件(比如在登录前)
Client.UserJoined += Client_UserJoined;

// 正确的事件处理方法
public async Task Client_UserJoined(SocketGuildUser user)
{
    // 替换成你的欢迎频道ID
    ulong welcomeChannelId = 447147292617736203;
    var welcomeChannel = Client.GetChannel(welcomeChannelId) as IMessageChannel;
    
    // 先检查频道是否存在且能发送消息
    if (welcomeChannel != null)
    {
        // 用正确的格式@用户,还可以加些更友好的内容
        await welcomeChannel.SendMessageAsync($"欢迎来到服务器,<@{user.Id}>!很高兴见到你😊");
    }
}

额外提醒几点:

  • 确保你的机器人有向目标频道发送消息的权限
  • 如果用的是新版本Discord.NET,也可以用SocketTextChannel替代IMessageChannel,两者基本兼容
  • 事件注册一定要放在客户端登录操作之前

内容的提问来源于stack exchange,提问作者Chabz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:52:14