示例#1
0
        public static ProcessingResult?ProcessMessage(ReceivedMessage message)
        {
            try
            {
                string?resultString = null;
                if (!String.IsNullOrWhiteSpace(message.Command))
                {
                    switch (message.Command)
                    {
                    case "u":
                        if (message.Parameter == "happy?")
                        {
                            return(ProcessingResult.CreateText(message, (new Random(DateTime.Now.Second).Next(0, 2) == 1) ? "Yes" : "No"));
                        }
                        return(null);

                    case "foo":
                        return(ProcessingManager.Foo(message));

                    case Constants.Commands.Start:
                    case Constants.Commands.Help:
                    case Constants.Commands.HelpShort:
                        return(ProcessingResult.CreateText(message, Constants.Replies.HELP));

                    case Constants.Commands.Address:
                        return(ProcessingManager.ProcessAddress(message));

                    case Constants.Commands.List:
                    case Constants.Commands.ListShort:
                        resultString = ListManager.GetList(message.ChatId);
                        if (resultString != null)
                        {
                            return(ProcessingResult.CreateText(message, resultString));
                        }
                        return(null);

                    case Constants.Commands.ListSorted:
                    case Constants.Commands.ListSortedShort:
                        resultString = ListManager.GetList(message.ChatId, true);
                        if (resultString != null)
                        {
                            return(ProcessingResult.CreateText(message, resultString));
                        }
                        return(null);

                    case Constants.Commands.ClearList:
                    case Constants.Commands.ClearListShort:
                        ListManager.ClearList(message.ChatId);
                        return(null);

                    case Constants.Commands.SaveCoordinates:
                        return(ProcessingManager.SaveCoordinates(message));

                    case Constants.Commands.GetChatId:
                        return(ProcessingResult.CreateText(message, message.ChatId.ToString()));

                    case Constants.Commands.DeleteMessage:
                        return(new ProcessingResult()
                        {
                            Delete = true, ChatId = message.ChatId, MessageId = message.Id
                        });

                    case Constants.Commands.GameSetup:
                        return(ProcessingManager.GameSetup(message));

                    case Constants.Commands.CreateDemoGame:
                        return(ProcessingManager.CreateGame(message, GameType.Demo));

                    case Constants.Commands.CreateQuestGame:
                        return(ProcessingManager.CreateGame(message, GameType.Quest));

                    case Constants.Commands.CreateEncxGame:
                        return(ProcessingManager.CreateGame(message, GameType.CustomEnCx));

                    case Constants.Commands.CreateIgraGame:
                        return(ProcessingManager.CreateGame(message, GameType.IgraLv));

                    case Constants.Commands.SetAuth:
                        return(ProcessingManager.StartSetingAuth(message));

                    case Constants.Commands.JoinGameLink:
                        return(ProcessingManager.JoinGame(message));

                    case Constants.Commands.ExitGame:
                        return(ProcessingManager.ExitFromGame(message));

                    case Constants.Commands.ShowGameSettings:
                        return(ProcessingManager.ShowGameSettings(message));

                    case Constants.Commands.GetTask:
                        return(ProcessingManager.GetTask(message));

                    case Constants.Commands.FindEncxGame:
                        return(ProcessingManager.FindEnCxGame(message));

                    case Constants.Commands.FoundEncxGame:
                        return(ProcessingManager.FoundEncxGame(message));

                    case Constants.Commands.SetPrefix:
                        return(ProcessingManager.SetPrefix(message));

                    case Constants.Commands.SetRadius:
                        return(ProcessingManager.SetRadius(message));

                    case Constants.Commands.GameTaskNoUpdates:
                    case Constants.Commands.GameTaskUpdateStatus:
                    case Constants.Commands.GameTaskUpdateText:
                        return(ProcessingManager.SetTaskUpdate(message));

                    case Constants.Commands.EnterCode:
                        return(ProcessingManager.EnterCode(message));

                    case Constants.Commands.MirrorLink:
                        return(ProcessingManager.MirrorLink(message));

                    default:
                        break;
                    }
                }
                if (message.Text != null && message.Text.StartsWith(Constants.SpecialCommands.AddListValue))
                {
                    ListManager.AddValue(message.ChatId, message.Text.Substring(Constants.SpecialCommands.AddListValue.Length));
                    return(null);
                }
                if (message.Text != null && message.Text.StartsWith(Constants.SpecialCommands.EnterCode))
                {
                    message.Parameter = message.Text.Substring(Constants.SpecialCommands.EnterCode.Length);
                    return(ProcessingManager.EnterCode(message));
                }
                var waiting4List = ConversationManager.WaitingList.Where(x => x.chatId == message.ChatId && x.sender == message.SenderId)?.ToList();
                var waiting4     = (waiting4List == null || !waiting4List.Any()) ? ConversationManager.WaitingReason.None : waiting4List.First().waitingFor;
                switch (waiting4)
                {
                case ConversationManager.WaitingReason.None:
                    break;

                case ConversationManager.WaitingReason.GameUrl:
                    var result = ProcessingManager.StartGameByUrl(message);
                    if (result != null)
                    {
                        return(result);
                    }
                    break;

                default:
                    break;
                }
                var chatPrefix = StaticData.Prefixes.Get(message.ChatId);
                if (chatPrefix != null &&
                    message.Text != null &&
                    message.Text.Length > chatPrefix.Length)
                {
                    if (chatPrefix == message.Text.Substring(0, chatPrefix.Length))
                    {
                        message.Parameter = message.Text;
                        return(ProcessingManager.EnterCode(message));
                    }
                }
                if (message.Coordinates != null)
                {
                    return(new ProcessingResult()
                    {
                        ChatId = message.ChatId,
                        ReplyTo = message.Id,
                        DisableWebPagePreview = true,
                        Markup = Constants.Keyboards.CoordinatesKeyboard(message.Coordinates),
                        Text = $"{message.Coordinates.Lat},{message.Coordinates.Lon}"
                    });
                }
                var location = Coordinates.ParseCoordinates(message.Text);
                if (location != null)
                {
                    return(ProcessingResult.CreateCoordinates(message, location));
                }
                if (message.ReplyToBot)
                {
                    return(ConversationManager.Process(message));
                }
            }
            catch (Exception ex)
            {
                //switch (ex.Level)
                //{
                //    case GCException.LevelType.Fatal:
                //        throw new Exception(ex.Message);
                //    case GCException.LevelType.Chat:
                //        return ProcessingResult.CreateText(message, ex.Message);
                //    case GCException.LevelType.ChatFull:
                //        return ProcessingResult.CreateText(message, $"Code:{ex.Code}, Message:{ex.Message}, Stack:{ex.StackTrace}");
                //    case GCException.LevelType.Log:
                //        Log.New(ex, message);
                //        break;
                //    case GCException.LevelType.Quiet:
                //        break;
                //}
                //return ProcessingResult.CreateText(message, $"Message: {ex.Message??""}; StackTrace: {ex.StackTrace??""};");
            }
            //return ProcessingResult.CreateText(message, "Nothing to see here");
            return(null);
        }