private static void Test() { var api = new Telegram.Bot.Api("Paste some key for debugging purposes"); var flowEngine = new FlowEngine(api, new DatabaseStateProvider(@"Data Source=(localdb)\ProjectsV13;Initial Catalog=MafiaGM;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"), null); var mainMenu = flowEngine.AddCommand("start") .EchoReply(new OneLanguageString("Welcome")); flowEngine.AddAnyInput() .EchoReply(new OneLanguageString("Please, type /Start to start")); mainMenu.AddCommand("help") .EchoReply(new OneLanguageString("No help for now")); mainMenu.AddCommand("sum") .EchoReply(new OneLanguageString("Provide A")) .AddAnyInput() .EchoReply(new OneLanguageString("Provide B (A is {0}")) .AddAnyInput() .AddDelegateInput(context => (int.Parse(context[0]) + int.Parse(context[1])).ToString()) .EchoReply(new OneLanguageString("Result is {0}")) .Execute(context => context.Echo(context[1] + context[2], context.UserMessageIdOrZero)); //а тут сразу же показываем конкатенацию mainMenu.AddCommand("testPar", true) .EchoReply(new OneLanguageString("parameter is {0}")); mainMenu.AddCommandWithParameter("testAnyPar", new OneLanguageString("Please, enter value")) .ForEach(step => step.EchoReply(new OneLanguageString("Value is {0}"))); int lastUpdate = 0; do { var updates = api.GetUpdates(lastUpdate + 1).Result; if (!updates.Any()) { Thread.Sleep(3000); continue; } foreach (var update in updates) { IState state; flowEngine.Process(update, null, out state); ((DatabaseState)state).SaveAndDispose(); lastUpdate = update.Id; } } while (true); }
public bool ProcessUpdate(Update update) { try { if (!IsSupportedUpdate(update)) { return(false); } var chatId = update.GetChat().Id; TelemetryStatic.TelemetryClient.Context.Properties[TelemetryStatic.ChatKey] = chatId.ToString(); if (!_typingTyped) { _typingTyped = true; //no locks - fine to do it several times TelemetryStatic.TelemetryClient.TrackEvent("Typing", new Dictionary <string, string> { [TelemetryStatic.ToChatKey] = chatId.ToString() }); //todo: low incapsulate telemetry so all this assemblies don't have to depend on microsoft insight _api.SendChatAction(chatId, ChatAction.Typing); } #if ONECHAT_DEBUG bool oneChatProcess = false; var realChatId = update.GetMessage().Chat.Id; if (update.Type == UpdateType.MessageUpdate && update.Message.Type == MessageType.TextMessage && update.GetMessage().Text.Contains("Sobachka2")) { _oneChatId = realChatId; _api.SendTextMessage(realChatId, "You are in one chat debug now"); return(true); } if (_oneChatId == realChatId) { oneChatProcess = true; } if (!oneChatProcess) { _api.SendTextMessage(realChatId, LocalizedStrings.Servicing_Now); return(true); } #endif var language = _gameProvider.GetLanguageForChat(chatId); LocalizedStrings.Language = language; var isPrivate = update.IsPrivate(); try { IState finalState; if (isPrivate) { _privateEngine.Process(update, _gameProvider, out finalState); } else { _publicEngine.Process(update, _gameProvider, out finalState); } ((DatabaseState)finalState).SaveAndDispose(); } catch (ApiChatBadRequestException) { } } catch (ChatException chatException) { //здесь не выносим за дебаг потому что он кидается только за дебагом chatException.Chat.Echo(LocalizedStrings.GameEngine_ErrorSorry, 0, null); // думаю не стоит этого делать, потому что пропадает инфа для отладки DatabaseStateProvider.CleanStateForChat(new UserInChat(update.GetChat().ToChat(), update.GetUser()), _connectionString); } return(true); }