void HandleMessageFromTG(object sender, MessageEventArgs messageEventArgs) { try {/* * var keyboard = new InlineKeyboardMarkup(new Telegram.Bot.Types.InlineKeyboardButton[][] * {new [] { * new Telegram.Bot.Types.InlineKeyboardButton("Текст для первой кнопки","callback1"), * new Telegram.Bot.Types.InlineKeyboardButton("Текст второй кнопки","callback2"), * }, * }); * */ var chatId = messageEventArgs.Message.Chat.Id; var message = messageEventArgs.Message.Text; var ikm = new InlineKeyboardMarkup(new[] { new[] { InlineKeyboardButton.WithCallbackData("холодно ", "myCommand1"), }, new[] { InlineKeyboardButton.WithCallbackData("нормально", "myCommand2"), }, new[] { InlineKeyboardButton.WithCallbackData("жакро", "myCommand3"), }, }); botClient.SendTextMessageAsync(chatId, "Приветсвую, " + messageEventArgs.Message.From.Username + ", в мбильной версии голосвания за првоетривание в помещении RND. Как вы оцениваете температуру сейчас?", replyMarkup: ikm); var data = Convert.ToInt32(message); botClient.OnCallbackQuery += async(object sc, Telegram.Bot.Args.CallbackQueryEventArgs ev) => { var z = ev.CallbackQuery.Message; if (ev.CallbackQuery.Data == "myCommand1") { await botClient.AnswerCallbackQueryAsync(ev.CallbackQuery.Id, "Вам холодно, ваше мнение будет учтено", true); data = 0; } else if (ev.CallbackQuery.Data == "myCommand2") { await botClient.AnswerCallbackQueryAsync(ev.CallbackQuery.Id, "Вас устраивает температура, ваше мнение будет учтено", true); //await botClient.SendTextMessageAsync(message.Chat.Id, "2", replyToMessageId: message.MessageId); //await botClient.AnswerCallbackQueryAsync(ev.CallbackQuery.Id); // отсылаем пустое, чтобы убрать "частики" на кнопке data = 5; } else if (ev.CallbackQuery.Data == "myCommand3") { await botClient.AnswerCallbackQueryAsync(ev.CallbackQuery.Id, "Вам жарко, ваше мнение будет учтено", true); //await botClient.SendTextMessageAsync(message.Chat.Id, "3", replyToMessageId: message.MessageId); //await botClient.AnswerCallbackQueryAsync(ev.CallbackQuery.Id); // отсылаем пустое, чтобы убрать "частики" на кнопке data = 10; } var clientName = messageEventArgs.Message.From; //botClient.SendTextMessageAsync(chatId, "Cпасибо ," +messageEventArgs.Message.From + ", за голос ", replyMarkup: ikm); var indexName = _clientResponses.FindIndex(x => x.IpAddress == Convert.ToString(clientName)); lock (locker) { if (!string.IsNullOrEmpty(message)) { var isIPinList = _clientResponses.Any(x => x.IpAddress == Convert.ToString(clientName)); if (!isIPinList) { _clientResponses.Add(new ClientResponse(clientName.ToString(), Convert.ToInt32(data), DateTime.Now, false)); } else { _clientResponses[indexName] = new ClientResponse(clientName.ToString(), Convert.ToInt32(data), DateTime.Now, false); } } } }; //botClient.SendTextMessageAsync(chatId, "Cпасибо ," + messageEventArgs.Message.From + ", за голос ", replyMarkup: ikm); } catch { } }
static void Main(string[] args) { Console.WriteLine("Connecting..."); // Устанавливаем для сокета локальную конечную точку IPHostEntry ipHost = Dns.GetHostEntry("10.0.10.254"); IPAddress ipAddr = ipHost.AddressList[0]; IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11000); var average = 0; var a = new TempInside(); a.Connect(); int[] ventTimeMass = { 9, 1, 6 };// массив со временем проветривания // Создаем сокет Tcp/Ip Socket sListener = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp); // Назначаем сокет локальной конечной точке и слушаем входящие сокеты try { sListener.Bind(ipEndPoint); sListener.Listen(10); var countUser = 0; // Начинаем слушать соединения var tg = new TGmodel(); tg.GetMessageFromTG(); DateTime dt = DateTime.Now; string bufDate = dt.ToShortDateString(); var outweather = new OutWeather(); var outTemp = "0"; // переменная для хранения температуры взятой с интернета while (true) { //получение дня и если сегодня не было проверки температаруы то проверять string curDate = dt.ToShortDateString(); if (curDate != bufDate) //для првоерки работы, должно быть != { outTemp = outweather.GetData(); } // Программа приостанавливается, ожидая входящее соединение Socket handler = sListener.Accept(); string data = null; // Мы дождались клиента, пытающегося с нами соединиться byte[] bytes = new byte[1024]; var bytesRec = handler.Receive(bytes); data += Encoding.UTF8.GetString(bytes, 0, bytesRec);//получение данных от клиента (от 0 до 10) IPEndPoint clientep; clientep = (IPEndPoint)handler.RemoteEndPoint; var isIPinList = _clientResponses.Any(x => x.IpAddress == Convert.ToString(clientep.Address)); var indexIp = _clientResponses.FindIndex(x => x.IpAddress == Convert.ToString(clientep.Address)); //var ipAddress = clientep.Address.ToString(); if (!string.IsNullOrEmpty(data)) { if (!isIPinList) { _clientResponses.Add(new ClientResponse(clientep.Address.ToString(), Convert.ToInt32(data), DateTime.Now, true)); } else { _clientResponses[indexIp] = new ClientResponse(clientep.Address.ToString(), Convert.ToInt32(data), DateTime.Now, true); } } if (outTemp.Length > 5) { outTemp = outTemp.Substring(0, outTemp.Length - 13); } //вывод информации в консоль Console.Write("Температура на улице: " + outTemp + "\n"); Console.WriteLine("Погода в офисе: " + a.TempInsideValue); Console.Write("Полученный текст: " + data + " от " + clientep + "\n"); Console.Write("Всего пользователей подключено: " + _clientResponses.Count + "\n"); try { var timeNow = DateTime.Now; var maxDifference = TimeSpan.FromSeconds(30); for (var i = 0; i < _clientResponses.Count; i++) { if ((timeNow - _clientResponses[i].Time) > maxDifference) { _clientResponses.RemoveAt(i); } } var sum = 0; for (var i = 0; i < _clientResponses.Count; i++) { sum += _clientResponses[i].Temperature; } average = sum / _clientResponses.Count;//расчет среднего } catch { //Console.WriteLine("Пришло сообщение с ошибкой!"); } int hoursNow = DateTime.Now.Hour; int minuteNow = DateTime.Now.Minute; //формирование сообщения о провертивании string reply = "В " + Convert.ToString(ventTimeMass[1]) + ":00" + " будет проводиться проветривание."; if (average < 3) { reply = "Окно будет скоро закрыто"; } if (average > 7) { reply = "Окно будет скоро открыто"; } if (hoursNow == ventTimeMass[0] && minuteNow < 15 || hoursNow == ventTimeMass[1] && minuteNow < 15 || hoursNow == ventTimeMass[2] && minuteNow < 15) { reply = "Идет проветривание, осталось: " + Convert.ToString(15 - minuteNow) + " минут"; } else { if (hoursNow < 6) { hoursNow += 12; } var nearVentTime = 0; for (int i = 0; i < ventTimeMass.Length; i++) { if (ventTimeMass[i] - hoursNow >= 0) { nearVentTime = ventTimeMass[i]; reply = "В " + Convert.ToString(nearVentTime) + ":00" + " будет проводиться проветривание."; break; } else { } } } // reply = "Идет проветривание, осталось: " + Convert.ToString(15 - minuteNow) + " минут";//ДЛЯ ТЕСТА reply = average + " " + reply; byte[] msg = Encoding.UTF8.GetBytes(reply); handler.Send(msg); // Отправляем ответ клиенту\ Console.Write("Среднее число сейчас: " + average + "\n\n"); if (data.IndexOf("<TheEnd>") > -1) { Console.WriteLine("Сервер завершил соединение с клиентом."); break; } handler.Shutdown(SocketShutdown.Both); handler.Close(); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } finally { Console.ReadLine(); } }