未调用 UserJoined 事件处理程序?

UserJoined event handler not being called?

我正在使用 Discord.net API 构建一个机器人。机器人的功能之一是欢迎新用户。这是通过挂接到 UserJoined 事件的事件处理程序完成的。

public class Program
{
    private DiscordSocketClient client;

    public async Task MainAsync()
    {
        client = new DiscordSocketClient(new DiscordSocketConfig
        {
            LogLevel = LogSeverity.Debug
        });

        client.UserJoined += Client_AnnounceJoinUser;

    }

    public async Task Client_AnnounceJoinUser(SocketGuildUser guildUser)
    {
        Console.WriteLine($"[{DateTime.Now} at AnnounceJoinUser] a new user has joined!");
        var guild = client.GetGuild(//Guild Id);
        var channel = client.GetChannel(//Channel Id) as SocketTextChannel; 
        var rookieRole = guild.GetRole(//Role Id);

        await guildUser.AddRoleAsync(rookieRole);
        await channel.SendMessageAsync($"Hello {guildUser.Mention}, and welcome to {channel.Guild.Name}!/n/n{GetMessage(0)}");
    }

当用户被添加到公会时,我收到来自网关确认的日志记录。

[12/8/2018 10:01:30 PM at Gateway] Received Dispatch (GUILD_MEMBER_ADD)

但是,调用事件处理程序的 client.UserJoined 行永远不会是 运行。我试图在这里放置一个断点,但从未触发断点。我推测问题可能出在未能指定公会以观察其中的 UserJoined 事件,但我不确定如何进行。任何建议将不胜感激。

我明白了。这在我发布的初始代码中并不清楚(糟糕),但我的事件调用行位于我的 MainAsync 任务的底部。通过将此(和其他)事件的调用行移动到我的行上方以登录机器人,该行运行并且事件处理程序被成功调用。我的完整 MainAsync 如下:

public async Task MainAsync()
    {
        client = new DiscordSocketClient(new DiscordSocketConfig
        {
            LogLevel = LogSeverity.Debug
        });

        Commands = new CommandService(new CommandServiceConfig
        {
            CaseSensitiveCommands = false,
            DefaultRunMode = RunMode.Async,
            LogLevel = LogSeverity.Debug
        });

        client.MessageReceived += Client_MessageReceived;
        await Commands.AddModulesAsync(Assembly.GetEntryAssembly());

        client.Ready += Client_Ready;
        client.Log += Client_Log;
        client.UserJoined += Client_AnnounceJoinUser;
        client.GuildMemberUpdated += Client_AnnounceUpgradeUser;

        string token;
        FileStream stream = new FileStream($"{Directory.GetCurrentDirectory()}/data/token.txt", FileMode.Open, FileAccess.Read);
        StreamReader readToken = new StreamReader(stream);
        token = readToken.ReadToEnd();

        await client.LoginAsync(TokenType.Bot, token);

        await client.StartAsync();

        await Task.Delay(-1);
    }