Exemple #1
0
 private async Task DiscordShardedClientOnUserLeft(SocketGuildUser arg)
 {
     if (UserLeft != null)
     {
         await UserLeft.Invoke(this, arg).ConfigureAwait(false);
     }
 }
Exemple #2
0
        void ReceivePart(IrcMessage message)
        {
            string user = message.ExtractUser();

            users.Remove(user);
            UserLeft?.Invoke(this, user);
        }
Exemple #3
0
        public async Task OnUserLeft(SocketGuildUser user)
        {
            var method = new UserLeft(Client, Config);
            await method.ProcessAsync(user).ConfigureAwait(false);

            IncrementEventHandle("UserLeft");
        }
        private void Bt_LogIn_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtUserName.Text.Trim()))
            {
                try
                {
                    NewJoin     += new UserJoined(ChatClient_NewJoin);
                    MessageSent += new UserSendMessage(ChatClient_MessageSent);
                    RemoveUser  += new UserLeft(ChatClient_RemoveUser);

                    channel       = null;
                    this.userName = txtUserName.Text.Trim();
                    InstanceContext context = new InstanceContext(new MainWindow(txtUserName.Text.Trim()));
                    factory = new DuplexChannelFactory <IChatChannel>(context, "ChatEndPoint");
                    channel = factory.CreateChannel();
                    IOnlineStatus status = channel.GetProperty <IOnlineStatus>();
                    status.Offline += new EventHandler(Offline);
                    status.Online  += new EventHandler(Online);
                    channel.Open();
                    channel.Join(this.userName);
                    rtbMessages.AppendText("*****************************WEL-COME to Chat Application*****************************\r\n");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
        }
 private void btnJoin_Click(object sender, EventArgs e)
 {
     if (txtUserName.Text.Trim() != "")
     {
         try
         {
             NewJoin      += new UserJoined(Form1_NewJoin);
             MessageSent  += new UserSendMessage(Form1_MessageSent);
             RemoveUser   += new UserLeft(Form1_RemoveUser);
             channel       = null;
             this.userName = txtUserName.Text.Trim();
             InstanceContext context = new InstanceContext(new Form1(txtUserName.Text.Trim()));
             factory = new DuplexChannelFactory <IChatChannel>(context, "ChatEndPoint");
             channel = factory.CreateChannel();
             channel.Open();
             channel.Join(this.userName);
             gbChatWindow.Enabled = true;
             gbUserInfo.Enabled   = false;
             this.AcceptButton    = btnSend;
             txtChatMessages.AppendText("******Welcome to Turn Shop Automobile Chat Application****\r\n");
             txtSendMessage.Select();
             txtSendMessage.Focus();
             this.Text = "Chat Clent-" + txtUserName.Text;
         }
         catch (Exception ex)
         {
             MessageBox.Show(ex.ToString(), "Error");
         }
     }
 }
 /// <summary>
 /// Constructs a new <see cref="BaseSocketClientAbstraction"/> around an existing <see cref="WebSocket.BaseSocketClient"/>.
 /// </summary>
 /// <param name="baseSocketClient">The value to use for <see cref="WebSocket.BaseSocketClient"/>.</param>
 /// <exception cref="ArgumentNullException">Throws for <paramref name="baseSocketClient"/>.</exception>
 protected BaseSocketClientAbstraction(BaseSocketClient baseSocketClient)
     : base(baseSocketClient)
 {
     baseSocketClient.ChannelCreated         += x => ChannelCreated?.InvokeAsync(x.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.ChannelDestroyed       += x => ChannelDestroyed?.InvokeAsync(x.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.ChannelUpdated         += (x, y) => ChannelUpdated?.InvokeAsync(x.Abstract(), y.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.CurrentUserUpdated     += (x, y) => CurrentUserUpdated?.InvokeAsync(x.Abstract(), y.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.GuildAvailable         += x => GuildAvailable?.InvokeAsync(x.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.GuildMembersDownloaded += x => GuildMembersDownloaded?.InvokeAsync(x.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.GuildMemberUpdated     += (x, y) => GuildMemberUpdated?.InvokeAsync(x.Abstract(), y.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.GuildUnavailable       += x => GuildUnavailable?.InvokeAsync(x.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.GuildUpdated           += (x, y) => GuildUpdated?.InvokeAsync(x.Abstract(), y.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.JoinedGuild            += x => JoinedGuild?.InvokeAsync(x.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.LeftGuild             += x => LeftGuild?.InvokeAsync(x.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.MessageReceived       += x => MessageReceived?.InvokeAsync(x.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.MessageUpdated        += (x, y, z) => MessageUpdated?.InvokeAsync(x.Abstract(), y.Abstract(), z.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.MessageDeleted        += (x, y) => MessageDeleted?.InvokeAsync(x.Abstract(), y.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.ReactionAdded         += (x, y, z) => ReactionAdded?.InvokeAsync(x.Abstract(), y.Abstract(), z.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.ReactionRemoved       += (x, y, z) => ReactionRemoved?.InvokeAsync(x.Abstract(), y.Abstract(), z.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.ReactionsCleared      += (x, y) => ReactionsCleared?.InvokeAsync(x.Abstract(), y.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.RecipientAdded        += x => RecipientAdded?.InvokeAsync(x.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.RecipientRemoved      += x => RecipientRemoved?.InvokeAsync(x.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.RoleCreated           += x => RoleCreated?.InvokeAsync(x.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.RoleDeleted           += x => RoleDeleted?.InvokeAsync(x.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.RoleUpdated           += (x, y) => RoleUpdated?.InvokeAsync(x.Abstract(), y.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.UserBanned            += (x, y) => UserBanned?.InvokeAsync(x.Abstract(), y.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.UserIsTyping          += (x, y) => UserIsTyping?.InvokeAsync(x.Abstract(), y.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.UserJoined            += x => UserJoined?.InvokeAsync(x.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.UserLeft              += x => UserLeft?.InvokeAsync(x.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.UserUnbanned          += (x, y) => UserUnbanned?.InvokeAsync(x.Abstract(), y.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.UserUpdated           += (x, y) => UserUpdated?.InvokeAsync(x.Abstract(), y.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.UserVoiceStateUpdated += (x, y, z) => UserVoiceStateUpdated?.InvokeAsync(x.Abstract(), y.Abstract(), z.Abstract()) ?? Task.CompletedTask;
     baseSocketClient.VoiceServerUpdated    += x => VoiceServerUpdated?.InvokeAsync(x.Abstract()) ?? Task.CompletedTask;
 }
Exemple #7
0
 void Given(UserLeft e)
 {
     if (Users.Any(user => user == e.UserId))
     {
         Users.Remove(e.UserId);
     }
 }
Exemple #8
0
        public void LoadEvents()
        {
            Client.UserJoined += async(u) =>
            {
                Task.Run(() => UserJoin?.Invoke(new RuntimeUser(u)));
            };

            Client.UserLeft += async(u) =>
            {
                Task.Run(() => UserLeft?.Invoke(new RuntimeUser(u)));
            };

            Client.UserUpdated += async(u, unew) =>
            {
                RuntimeUser userOld = new RuntimeUser(u);
                RuntimeUser userNew = new RuntimeUser(unew);
                Task.Run(() => UserUpdated?.Invoke(userOld, userNew));
            };

            Client.MessageReceived += async(m) =>
            {
                RuntimeMessage newMessage = new RuntimeMessage(m);
                if (MessageReceived != null)
                {
                    await MessageReceived.Invoke(newMessage);
                }
            };

            Client.JoinedGuild += async(g) =>
            {
                Task.Run(async() =>
                {
                    RuntimeGuild guild = new RuntimeGuild(g);
                    await GuildJoin?.Invoke(guild);
                });
            };

            Client.LeftGuild += async(g) =>
            {
                RuntimeGuild guild = new RuntimeGuild(g);
                await GuildLeave?.Invoke(guild);
            };

            foreach (var shard in Client.Shards)
            {
                shard.Disconnected += async(ex) =>
                {
                    await OnShardDisconnect?.Invoke(ex, shard.ShardId);
                };
                shard.Connected += async() =>
                {
                    if (OnShardConnect != null)
                    {
                        await OnShardConnect.Invoke(shard.ShardId);
                    }
                };
            }
        }
        /// <summary>
        /// Clears the current session, removing any users being tracked.
        /// This should be called whenever the current session changes, to reset this class
        /// and handle a new current session.
        /// </summary>
        private void ClearCurrentSession()
        {
            for (int i = 0; i < CurrentUsers.Count; i++)
            {
                UserLeft.RaiseEvent(CurrentUsers[i]);
            }

            CurrentUsers.Clear();
        }
        private void OnUserLeft(Session session, User user)
        {
            UserLeft.RaiseEvent(session, user);

            if (IsLocalUser(user))
            {
                CurrentUserLeft.RaiseEvent(session);
            }
        }
        public void RemoveUser(string sid)
        {
            var user = joinedUsers.FirstOrDefault(x => x.Id == sid);

            if (user != null)
            {
                joinedUsers.Remove(user);
                UserLeft?.Invoke(user);
            }
        }
Exemple #12
0
 private void _TwitchClient_OnUserLeft(object sender, OnUserLeftArgs e)
 {
     UserLeft?.Invoke(this, new ChatUserInfoEventArgs
     {
         ChannelId   = 0,
         ServiceName = "Twitch",
         UserId      = 0,
         UserName    = e.Username
     });
 }
Exemple #13
0
        public void RemoveUser(string sid)
        {
            var findedUser = _joinedUsersList.SingleOrDefault(item => item.Id == sid);

            if (findedUser != null)
            {
                _joinedUsersList.Remove(findedUser);
                UserLeft?.Invoke(findedUser);
            }
        }
        public void OnUserLeft(string userName)
        {
            if (users.Remove(userName))
            {
                if (notifyOnUserListChange)
                {
                    AddMessage(new ChatMessage(userName + " has left from " + UIName + "."));
                }

                UserLeft?.Invoke(this, new UserNameEventArgs(userName));
            }
        }
Exemple #15
0
        public async Task OnUserLeft(SocketGuildUser user)
        {
            if (!CanProcessEvent("UserLeft"))
            {
                return;
            }

            var method = new UserLeft(Client, Config);
            await method.ProcessAsync(user).ConfigureAwait(false);

            EventPostProcess("UserLeft");
        }
Exemple #16
0
        private void OnUserLeftSession(Session session, User user)
        {
            if (!session.IsJoined())
            {
                return;
            }

            if (CurrentUsers.RemoveAll(x => x.GetID() == user.GetID()) > 0)
            {
                //Debug.LogFormat("User {0} left current session.", user.GetName());
                UserLeft.RaiseEvent(user);
            }
        }
Exemple #17
0
        public static UserLeft AddUserLeftEventHandler <T>(
            this RoomWatcher <T> rw,
            Action <int> callback)
            where T : IWebSocket
        {
            callback.ThrowIfNull(nameof(callback));

            var eventProcessor = new UserLeft();

            eventProcessor.OnEvent += callback;

            rw.EventRouter.AddProcessor(eventProcessor);

            return(eventProcessor);
        }
 void OnUserLeft(ChatChannel twitchchannel, string user)
 {
     try
     {
         UserLeft?.Invoke(this, new UserInformation
         {
             Service  = Service,
             Username = user
         });
     }
     catch (Exception e)
     {
         Logger.Error(this, "Error triggering UserLeft event", e);
     }
 }
Exemple #19
0
        public void OnUserLeft(string userName)
        {
            int index = users.FindIndex(u => u.IRCUser.Name == userName);

            if (index == -1)
            {
                return;
            }

            if (notifyOnUserListChange)
            {
                AddMessage(new ChatMessage(userName + " has left from " + UIName + "."));
            }

            users.RemoveAt(index);
            UserLeft?.Invoke(this, new UserNameIndexEventArgs(index, userName));
        }
        private void OnUserLeftSession(Session session, User user)
        {
            if (!session.IsJoined())
            {
                return;
            }

            for (int i = CurrentUsers.Count - 1; i >= 0; i--)
            {
                if (CurrentUsers[i].GetID() == user.GetID())
                {
                    CurrentUsers.RemoveAt(i);
                    UserLeft.RaiseEvent(user);
                    // Debug.LogFormat("User {0} left current session.", user.GetName());
                }
            }
        }
        private void btnLogin_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtUserName.Text.Trim()))
            {
                try
                {
                    // Register an event
                    NewJoin     += new UserJoined(ChatClient_NewJoin);
                    MessageSent += new UserSendMessage
                                       (ChatClient_MessageSent);
                    RemoveUser += new UserLeft(ChatClient_RemoveUser);

                    channel       = null;
                    this.userName = txtUserName.Text.Trim();
                    // Create InstanceContext to handle call back interface
                    // Pass the object of the CallbackContract implementor
                    InstanceContext context = new InstanceContext(
                        new ChatClient(txtUserName.Text.Trim()));
                    // We create a participant with the given end point
                    // The communication is managed with CHAT MESH and
                    // each client creates a duplex
                    // end point with the mesh. Mesh is nothing but the
                    // named collection of nodes.
                    factory =
                        new DuplexChannelFactory <IChatChannel>(context, "ChatEndPoint");
                    channel = factory.CreateChannel();
                    channel.Open();
                    channel.Join(this.userName);
                    grpMessageWindow.Enabled   = true;
                    grpUserList.Enabled        = true;
                    grpUserCredentials.Enabled = false;
                    this.AcceptButton          = btnSend;
                    rtbMessages.AppendText
                        ("****WEL-COME to Chat Application*****\r\n");
                    txtSendMessage.Select();
                    txtSendMessage.Focus();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
        }
Exemple #22
0
        public static UserLeft AddUserLeftEventHandler <T>(
            this RoomWatcher <T> rw,
            Action <Chat.User> callback)
            where T : IWebSocket
        {
            callback.ThrowIfNull(nameof(callback));

            var eventProcessor = new UserLeft();

            eventProcessor.OnEvent += id =>
            {
                var user = new Chat.User(rw.Host, id, rw.Auth);

                callback(user);
            };

            rw.EventRouter.AddProcessor(eventProcessor);

            return(eventProcessor);
        }
Exemple #23
0
        public void LoadEvents()
        {
            Client.UserJoined += async(u) =>
            {
                await MeruUtils.TryAsync(async() =>
                {
                    Task.Run(() => UserJoin?.Invoke(new RuntimeUser(u)));
                });
            };

            Client.UserLeft += async(u) =>
            {
                await MeruUtils.TryAsync(async() =>
                {
                    Task.Run(() => UserLeft?.Invoke(new RuntimeUser(u)));
                });
            };

            Client.UserUpdated += async(u, unew) =>
            {
                RuntimeUser userOld = new RuntimeUser(u);
                RuntimeUser userNew = new RuntimeUser(unew);
                Task.Run(() => UserUpdated?.Invoke(userOld, userNew));
            };

            Client.MessageReceived += async(m) =>
            {
                Task.Run(async() =>
                {
                    await MeruUtils.TryAsync(async() =>
                    {
                        RuntimeMessage newMessage = new RuntimeMessage(m);
                        await MessageReceived?.Invoke(newMessage);
                    });
                });
            };
        }
Exemple #24
0
        private void btnLogin_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtUserName.Text.Trim()))
            {
                try
                {
                    NewJoin += new UserJoined(ChatClient_NewJoin);
                    MessageSent += new UserSendMessage(ChatClient_MessageSent);
                    RemoveUser += new UserLeft(ChatClient_RemoveUser);

                    channel = null;
                    this.userName = txtUserName.Text.Trim();
                    InstanceContext context = new InstanceContext(
                        new ChatClient(txtUserName.Text.Trim()));
                    factory =
                        new DuplexChannelFactory<IChatChannel>(context, "ChatEndPoint");
                    channel = factory.CreateChannel();
                    IOnlineStatus status = channel.GetProperty<IOnlineStatus>();
                    status.Offline += new EventHandler(Offline);
                    status.Online += new EventHandler(Online);                    
                    channel.Open();                    
                    channel.Join(this.userName);
                    grpMessageWindow.Enabled = true;
                    grpUserList.Enabled = true;                    
                    grpUserCredentials.Enabled = false;                    
                    this.AcceptButton = btnSend;
                    rtbMessages.AppendText("*****************************WEL-COME to Chat Application*****************************\r\n");
                    txtSendMessage.Select();
                    txtSendMessage.Focus();
                   
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
        }
Exemple #25
0
        public Task OnMessageReceived(string clientId, ReadOnlySpan <byte> data)
        {
            var messageType = (EventType)BitConverter.ToInt32(data.Slice(Constants.EventTypeOffset));

            _logger.LogDebug("Client[{clientId}] send {messageType} message", clientId, messageType);

            switch (messageType)
            {
            case EventType.UserJoined:
                var joinMessage = _serializer.Deserialize <UserJoined>(data);
                return(PublishMessage(clientId, joinMessage));

            case EventType.UserLeft:
                var leftMessage = new UserLeft(LeftReason.Voluntarily);
                return(PublishMessage(clientId, leftMessage));

            case EventType.UserSendMessage:
                var textMessage = _serializer.Deserialize <TextMessage>(data);
                return(PublishMessage(clientId, textMessage));
            }

            _logger.LogWarning("Unknown EventType: {messageType}", messageType);
            return(Task.CompletedTask);
        }
Exemple #26
0
        private void HandleUserData(string sender, string[] content, string data)
        {
            var username = sender.Substring(0, sender.IndexOf('!'));

            if (!_cachedUsers.TryGetValue(username, out var user))
            {
                user = new User(this)
                {
                    Username = username
                };

                _cachedUsers.TryAdd(username, user);
            }

            switch (content[0])
            {
            case "JOIN":
            {
                if (!_cachedChannels.TryGetValue(content[1], out var channel))
                {
                    channel = new Channel(this)
                    {
                        Name = content[1]
                    };

                    _cachedChannels.TryAdd(content[1], channel);

                    Send($"MODE {channel.Name}");
                    Send($"NAMES {channel.Name}");
                    Send($"MODE {channel.Name} +b");
                }

                var channelUser = new ChannelUser(this, user, channel);
                if (channel._users.All(x => x != user))
                {
                    channel._users.Add(channelUser);
                }

                if (user._channels.All(x => x != channel))
                {
                    user._channels.Add(channel);
                }

                UserJoined?.Invoke(new UserJoinedEventArgs
                    {
                        Client      = this,
                        CurrentUser = CurrentUser,
                        Channel     = channel,
                        User        = channelUser
                    });

                return;
            }

            case "PART":
            {
                var channelName = content[1];
                if (channelName.StartsWith(':'))
                {
                    channelName = channelName.Substring(1);
                }

                if (!_cachedChannels.TryGetValue(channelName, out var channel))
                {
                    channel = new Channel(this)
                    {
                        Name = channelName
                    };

                    _cachedChannels.TryAdd(channelName, channel);
                }

                if (user._channels.Any(x => x == channel))
                {
                    user._channels.Remove(channel);
                }

                if (channel._users.Any(x => x == user))
                {
                    channel._users.RemoveAll(x => x == user);
                }

                UserLeft?.Invoke(new UserLeftEventArgs
                    {
                        Client      = this,
                        CurrentUser = CurrentUser,
                        Channel     = channel,
                        User        = user,
                        Reason      = content.Length > 2 ? data.Substring(data.IndexOf(':') + 1) : ""
                    });

                return;
            }

            case "QUIT":
            {
                _cachedUsers.TryRemove(user.Username, out _);

                foreach (var channel in _cachedChannels.Values)
                {
                    channel._users.RemoveAll(x => x == user);
                }

                var reason = "";
                var idof   = data.IndexOf(':');
                if (idof != -1)
                {
                    reason = data.Substring(idof + 1);
                }

                UserQuit?.Invoke(new UserQuitEventArgs
                    {
                        Client      = this,
                        CurrentUser = CurrentUser,
                        User        = user,
                        Reason      = reason
                    });

                return;
            }

            case "NICK":
            {
                _cachedUsers.TryRemove(user.Username, out var oldUser);
                user.Username = content[1].Substring(1);
                _cachedUsers.TryRemove(user.Username, out _);
                _cachedUsers.TryAdd(user.Username, user);

                NicknameChanged?.Invoke(new NicknameChangedEventArgs
                    {
                        Client      = this,
                        CurrentUser = CurrentUser,
                        User        = user,
                        OldUsername = oldUser.Username,
                        NewUsername = user.Username
                    });

                return;
            }

            case "PRIVMSG":
            {
                var cnt     = data.Substring(1);
                var message = cnt.Substring(cnt.IndexOf(':') + 1);
                if (!user._channelMessages.TryGetValue(content[1], out var list))
                {
                    list = new List <string> {
                        message
                    };
                    user._channelMessages.TryAdd(content[1], list);
                }
                else
                {
                    list.Add(message);
                }

                if (content[1][0] == '#')
                {
                    if (!_cachedChannels.TryGetValue(content[1], out var channel))
                    {
                        channel = new Channel(this)
                        {
                            Name = content[1]
                        };

                        _cachedChannels.TryAdd(content[1], channel);
                    }

                    channel._messages.Add((user, message));

                    MessageReceived?.Invoke(new MessageReceivedEventArgs
                        {
                            Client      = this,
                            Channel     = channel,
                            CurrentUser = CurrentUser,
                            Message     = message,
                            User        = channel.Users.FirstOrDefault(x => x == user) ?? user
                        });

                    return;
                }

                MessageReceived?.Invoke(new MessageReceivedEventArgs
                    {
                        Client      = this,
                        Channel     = null,
                        CurrentUser = CurrentUser,
                        Message     = message,
                        User        = user
                    });

                return;
            }

            case "NOTICE":
            {
                var message = data.Substring(data.IndexOf(':') + 1);
                if (!user._channelMessages.TryGetValue(content[1], out var list))
                {
                    list = new List <string> {
                        message
                    };
                    user._channelMessages.TryAdd(content[1], list);
                }
                else
                {
                    list.Add(message);
                }

                NoticeReceived?.Invoke(new NoticeReceivedEventArgs
                    {
                        Client      = this,
                        CurrentUser = CurrentUser,
                        Message     = message,
                        User        = user
                    });

                return;
            }

            case "MODE":
            {
                if (!_cachedChannels.TryGetValue(content[1], out var channel))
                {
                    channel = new Channel(this)
                    {
                        Name = content[1]
                    };

                    _cachedChannels.TryAdd(content[1], channel);
                }

                var iofplus  = content[2].IndexOf('+');
                var iofminus = content[2].IndexOf('-');

                var modesPlus  = Array.Empty <char>();
                var modesMinus = Array.Empty <char>();

                if (iofplus != -1)
                {
                    modesPlus = content[2].Substring(iofplus + 1).ToCharArray();
                }
                if (iofminus != -1)
                {
                    modesMinus = iofplus != -1
                                ? content[2].Substring(iofminus + 1, content[2].Length - iofplus - 1).ToCharArray()
                                : content[2].Substring(iofminus + 1).ToCharArray();
                }

                for (var i = 0; i < modesPlus.Length; i++)
                {
                    if (!channel._modes.Contains(modesPlus[i]) && modesPlus[i] != 'b')
                    {
                        channel._modes.Add(modesPlus[i]);
                    }
                }

                for (var i = 0; i < modesMinus.Length; i++)
                {
                    if (!channel._modes.Contains(modesMinus[i]) && modesMinus[i] != 'b')
                    {
                        channel._modes.Add(modesMinus[i]);
                    }
                }

                var complexModes = modesMinus.Where(x => _configuration.ComplexChanModes.Any(y => y == x && x != 'l')).ToList();
                complexModes.AddRange(modesPlus.Where(x => _configuration.ComplexChanModes.Any(y => y == x)));

                var extraArgs = content.Skip(3).ToList();

                var modesArgs = new Dictionary <char, (char, string)>();
                for (var i = 0; i < complexModes.Count && i < extraArgs.Count; i++)
                {
                    modesArgs.Add(complexModes[i], (modesMinus.Contains(complexModes[i]) ? '-' : '+', extraArgs[i]));
                }

                foreach (var complexMod in modesArgs)
                {
                    switch (complexMod.Key)
                    {
                    case 'b':
                        if (complexMod.Value.Item1 == '-')
                        {
                            channel._banList.RemoveWhere(x => x.Host == complexMod.Value.Item2);
                        }
                        else
                        {
                            channel._banList.Add(new ChannelBan
                                {
                                    IssuedBy = user.Username,
                                    Host     = complexMod.Value.Item2,
                                    IssuedOn = DateTimeOffset.UtcNow
                                });
                        }
                        break;

                    case 'l':
                        channel.Limit = int.Parse(complexMod.Value.Item2);
                        break;

                    case 'k':
                        channel.Key = complexMod.Value.Item1 == '+' ? complexMod.Value.Item2 : "";
                        break;
                    }
                }

                ChannelModeUpdated?.Invoke(new ChannelModesUpdatedEventArgs
                    {
                        Client       = this,
                        CurrentUser  = CurrentUser,
                        Channel      = channel,
                        ModesAdded   = new ReadOnlyCollection <char>(modesPlus),
                        ModesRemoved = new ReadOnlyCollection <char>(modesMinus),
                        ModesArgs    = new ReadOnlyDictionary <char, (char, string)>(modesArgs),
                        User         = channel.Users.FirstOrDefault(x => x == user)
                    });

                return;
            }
Exemple #27
0
 internal async Task OnUserLeft(SocketGuildUser user) => await(UserLeft?.Invoke(user) ?? Task.CompletedTask);
        public override void Update(IEnumerable <Body> bodies)
        {
            base.Update(bodies);

            var trackingIds = new HashSet <ulong>();

            foreach (var body in bodies)
            {
                if (body.IsTracked)
                {
                    trackingIds.Add(body.TrackingId);
                }
            }

            var currentCount  = trackingIds.Count;
            var previousCount = _trackingIds.Count;

            if (currentCount != previousCount)
            {
                _consecutiveFrames++;

                if (_consecutiveFrames >= WindowSize)
                {
                    // The users that entered or left.
                    var users = new HashSet <ulong>();

                    if (currentCount > previousCount)
                    {
                        // ONE OR MORE USERS ENTERED
                        foreach (var id in trackingIds)
                        {
                            if (!_trackingIds.Contains(id))
                            {
                                users.Add(id);
                            }
                        }

                        _args.Users = users;

                        UserEntered?.Invoke(this, _args);
                    }
                    else
                    {
                        // ONE OR MORE USERS LEFT
                        foreach (var id in _trackingIds)
                        {
                            if (!trackingIds.Contains(id))
                            {
                                users.Add(id);
                            }
                        }

                        _args.Users = users;

                        UserLeft?.Invoke(this, _args);
                    }

                    _trackingIds       = trackingIds;
                    _consecutiveFrames = 0;
                }
            }
        }
Exemple #29
0
 protected void OnUserLeft(UserInfo userInfo, string channel)
 {
     UserLeft?.Invoke(userInfo, channel);
 }
Exemple #30
0
 void OnChannelUserLeft(IChatChannel channel, UserInformation information)
 {
     UserLeft?.Invoke(information);
 }
Exemple #31
0
 public Task Handle(UserLeft notification, CancellationToken cancellationToken)
 {
     ClearCacheEntry(notification.Guild);
     return(Task.CompletedTask);
 }