74 lines
1.8 KiB
C#
74 lines
1.8 KiB
C#
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.OpenHab;
|
|
|
|
namespace ZaoBot
|
|
{
|
|
class StatusMenuUserState : IUserState
|
|
{
|
|
public const string CMD_BACK = "Назад";
|
|
|
|
ITelegramBotClient botClient;
|
|
private JsonDocument config;
|
|
HttpClient http = new HttpClient();
|
|
OpenHabClient openhab;
|
|
|
|
public StatusMenuUserState(ITelegramBotClient botClient, JsonDocument config, OpenHabClient openhab)
|
|
{
|
|
this.botClient = botClient;
|
|
this.config = config;
|
|
this.openhab = openhab;
|
|
}
|
|
|
|
public async Task<IUserState> ProcessMessage(IUserState previous, Telegram.Bot.Types.Update e)
|
|
{
|
|
var response = "";
|
|
if (previous != this)
|
|
{
|
|
response = "Возможные проблемы:\n";
|
|
var items = await openhab.GetItems();
|
|
foreach (var item in items)
|
|
{
|
|
if (!item.name.StartsWith("Problem_")) continue;
|
|
response += item.label + ": ";
|
|
var state = await openhab.GetItemState(item.name);
|
|
if (state.state == "OFF") response += "OK";
|
|
else if (state.state == "ON") response += "PROBLEM!";
|
|
else response += "UNKNOWN";
|
|
response += "\n";
|
|
}
|
|
}
|
|
else if (e.Message.Text == CMD_BACK)
|
|
{
|
|
var newState = new MainMenuUserState(botClient, config, openhab);
|
|
await newState.ProcessMessage(this, e);
|
|
return newState;
|
|
}
|
|
else
|
|
{
|
|
response = "Я не понял";
|
|
}
|
|
var replyKeyboardMarkup = new ReplyKeyboardMarkup(
|
|
new KeyboardButton[][]
|
|
{
|
|
new KeyboardButton[] { CMD_BACK },
|
|
}
|
|
);
|
|
|
|
await botClient.SendTextMessageAsync(
|
|
chatId: e.Message.Chat,
|
|
text: response,
|
|
replyMarkup: replyKeyboardMarkup
|
|
);
|
|
return this;
|
|
}
|
|
}
|
|
}
|