예제 #1
0
        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);
            }
        }
예제 #2
0
        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}");
            }
        }
예제 #3
0
        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)));
        }