public void DiscordUserUpdated(object s, DiscordUserUpdatedEventArgs e) { var bridgeUser = UserLinks[e.Current.Username]; if (!DiscordUserConsideredOnline(e.Previous.Status) && DiscordUserConsideredOnline(e.Current.Status)) { IrcLink.SetAway(bridgeUser.IrcUid, false); } else if (DiscordUserConsideredOnline(e.Previous.Status) && !DiscordUserConsideredOnline(e.Current.Status)) { IrcLink.SetAway(bridgeUser.IrcUid, true); } // Join new channels foreach (var channel in e.NewChannels) { IrcLink.JoinChannel(bridgeUser.IrcUserName, Config.DiscordServer.ChannelMapping.FirstOrDefault(x => x.Discord == channel.Id)?.IRC); } // Leave removed channels foreach (var channel in e.RemovedChannels) { IrcLink.PartChannel(bridgeUser.IrcUserName, Config.DiscordServer.ChannelMapping.FirstOrDefault(x => x.Discord == channel.Id)?.IRC); } }
private async Task UserUpdatedAsync(SocketGuildUser previousUser, SocketGuildUser currentUser) { if (previousUser.Guild.Id == Config.GuildId) { var channels = UserChannels[currentUser.Id].ToList(); var removedChannels = currentUser.GetRemovedChannels(channels).ToList(); var newChannels = currentUser.GetNewChannels(channels).ToList(); var args = new DiscordUserUpdatedEventArgs(previousUser, currentUser, newChannels, removedChannels); OnUserUpdated?.Invoke(this, args); if (args.NewChannels.Any() || args.RemovedChannels.Any()) { AddUserChannels(currentUser); } EventLog($"{currentUser.Username} Status Updated: {currentUser.Status}"); } }
public static IEnumerable <SocketRole> GetRemovedRoles(this DiscordUserUpdatedEventArgs args) { var currentRoles = args.Current.Roles.ToList(); return(args.Previous.Roles.Where(x => !currentRoles.Exists(y => y.Id == x.Id))); }