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