using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.Net.Http; using System.Text; using System.Text.Json; using System.Threading.Tasks; using Telegram.Bot; using Telegram.Bot.Args; using Telegram.Bot.Types.ReplyMarkups; using ZaoBot.Config; using ZaoBot.OpenHab; using ZaoBot.Problems; namespace ZaoBot { class StatusMenuUserState : IUserState { public const string CMD_BACK = "Назад"; public const string CMD_CONFIRM_ITEM = "✅ "; ITelegramBotClient botClient; IServiceProvider services; StatusManager statusManager; public StatusMenuUserState(IServiceProvider services, ITelegramBotClient botClient, IConfig config, OpenHabClient openhab, StatusManager statusManager) { this.botClient = botClient; this.services = services; this.statusManager = statusManager; } public async Task ProcessMessage(IUserState previous, Telegram.Bot.Types.Update e) { var response = ""; List> buttons = new List>(); if (previous != this) { response = "Возможные проблемы:\n"; foreach (var item in statusManager.StatusItems) { response += item.label + ": " + item.status + "\n"; } var confirmButtons = new List(); foreach (var item in statusManager.StatusItems) { if (item.notified) { confirmButtons.Add(GetConfirmText(item)); } } if (confirmButtons.Count > 0) buttons.Add(confirmButtons); } else if (e.Message.Text.StartsWith(CMD_CONFIRM_ITEM)) { foreach (var item in statusManager.StatusItems) { if (e.Message.Text == GetConfirmText(item)) { item.notified = false; } } response = CMD_CONFIRM_ITEM; } else if (e.Message.Text == CMD_BACK) { var newState = services.GetRequiredService(); await newState.ProcessMessage(this, e); return newState; } else { response = "Я не понял"; } buttons.Add(new List() { CMD_BACK }); var replyKeyboardMarkup = new ReplyKeyboardMarkup(buttons); await botClient.SendTextMessageAsync( chatId: e.Message.Chat, text: response, replyMarkup: replyKeyboardMarkup ); return this; } private string GetConfirmText(Problems.Item item) { return CMD_CONFIRM_ITEM + item.label; } } }