【问题标题】:UserJoined event handler not being called?未调用 UserJoined 事件处理程序?
【发布时间】:2018-12-13 11:59:47
【问题描述】:

我正在使用 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)}");
    }

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

[2018 年 12 月 8 日晚上 10:01:30 在网关] 收到派送 (GUILD_MEMBER_ADD)

但是,调用事件处理程序的 client.UserJoined 行永远不会运行。我尝试在此处放置断点,但从未触发断点。我推测问题可能在于未能指定行会来观察 UserJoined 事件,但我不确定如何继续。任何建议将不胜感激。

【问题讨论】:

  • 你不需要向Client_AnnounceJoinUser 函数传递一些东西吗?
  • 由于public async Task MainAsync() 没有返回,发布的代码无法编译。
  • 如果你能提供minimal reproducible example就太好了

标签: c# discord.net


【解决方案1】:

我想通了。这在我发布的初始代码(哎呀)中并不清楚,但我的事件调用行位于我的 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);
    }

【讨论】:

    猜你喜欢
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 2023-03-11
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多