Example #1
0
        public async Task Process(Say say)
        {
            if (!IsLoggedIn)
            {
                return;
            }
            if (User.BanMute)
            {
                return;               // block all say for muted
            }
            say.User = Name;
            say.Time = DateTime.UtcNow;

            if (say.Ring)
            { // ring permissions - bot/admin anywhere, others only to own battle
                if (!User.IsAdmin)
                {
                    if ((say.Place != SayPlace.Battle && say.Place != SayPlace.BattlePrivate) || MyBattle == null || MyBattle.Founder != User)
                    {
                        say.Ring = false;
                    }
                }
            }

            switch (say.Place)
            {
            case SayPlace.Channel:
                Channel channel;
                if (state.Rooms.TryGetValue(say.Target, out channel))
                {
                    if (channel.Users.ContainsKey(Name))
                    {
                        await state.Broadcast(channel.Users.Keys, say);

                        await state.OfflineMessageHandler.StoreChatHistory(say);
                    }
                }
                break;

            case SayPlace.User:
                ConnectedUser connectedUser;
                if (state.ConnectedUsers.TryGetValue(say.Target, out connectedUser))
                {
                    await connectedUser.SendCommand(say);
                }
                else
                {
                    await state.OfflineMessageHandler.StoreChatHistory(say);
                }
                await SendCommand(say);

                break;

            case SayPlace.Battle:
                if (MyBattle != null)
                {
                    await state.Broadcast(MyBattle.Users.Keys, say);
                }
                break;

            case SayPlace.BattlePrivate:
                if (MyBattle != null && MyBattle.Founder.Name == Name)
                {
                    ConnectedUser cli;
                    if (MyBattle.Users.ContainsKey(say.Target))
                    {
                        if (state.ConnectedUsers.TryGetValue(say.Target, out cli))
                        {
                            await cli.SendCommand(say);
                        }
                    }
                }
                break;

            case SayPlace.MessageBox:
                if (User.IsAdmin)
                {
                    await state.Broadcast(state.ConnectedUsers.Values, say);
                }
                break;
            }

            await state.OnSaid(say);
        }