public static void AssingTicket(User user, Issue issue, Message message, string assignee, TelegramBot bot, Jira jiraConn) { int state = user.State - 1; //безумный костыль для того, чтобы вычислять статус, который нужно перевсети пользоваетля. Так получилось, что это 3 для 4 статуса, и 5 для 6 статуса. string keyboard = null; if (state == 3) { keyboard = "{\"keyboard\": [[\"Проверь тикеты\"], [\"Кто сейчас дежурит?\"], [\"Помоги с дежурством\"], [\"Пока ничего\"]],\"resize_keyboard\":true,\"one_time_keyboard\":true}"; } try { issue.Refresh(); if (issue.Assignee == null & issue.Key.Value.Equals(user.TicketNumber)) { if (issue.Status.ToString() == "10050") { issue.WorkflowTransition("Распределить"); } issue.Assignee = assignee; issue.SaveChanges(); user.State = state; user.TicketNumber = ""; bot.SendMessage(message.chat.id, "Готово.", keyboard); } else { user.State = state; user.TicketNumber = ""; bot.SendMessage(message.chat.id, "Тикет уже распределён", keyboard); } } catch (Exception ex) { using (var repository = new Repository<DutyBotDbContext>()) { var logReccord = new Log { Date = DateTime.Now, MessageTipe = "error", UserId = message.chat.id, Operation = "AssingTicket", Exception = ex.GetType() + ": " + ex.Message, AddInfo = issue.Key.Value }; repository.Create(logReccord); } user.State = 3; user.TicketNumber = ""; bot.SendMessage(message.chat.id, "Что-то пошло не так.", "{\"keyboard\": [[\"Проверь тикеты\"], [\"Кто сейчас дежурит?\"], [\"Помоги с дежурством\"], [\"Пока ничего\"]],\"resize_keyboard\":true,\"one_time_keyboard\":true}"); } }
private Parametr _botParam; //с каким ботом телеграмма работаем public void Start() //метод вызывается при старте службы { try { Sender.Send( "https://api.telegram.org/bot179261100:AAGqaQ8Fum0xK8JQL0FE_N4LugS_MmO36zM/sendmessage?chat_id=38651047&text=" + "Запущен сервис DutyBot"); try { using (var repository = new Repository<DutyBotDbContext>()) { var logReccord = new Log { Date = DateTime.Now, MessageTipe = "info", UserId = 0, Operation = "StartService", Exception = "", AddInfo = "" }; repository.Create(logReccord); } } catch (Exception ex) { Thread.Sleep(30000); // еcли не доступна БД и не получается залогировать запуск, ждём 30 секунд и пробуем еще раз. try { using (var repository = new Repository<DutyBotDbContext>()) { var exReccord = new Log { Date = DateTime.Now, MessageTipe = "error", UserId = 0, Operation = "StartService", Exception = ex.GetType() + ": " + ex.Message, AddInfo = "" }; repository.Create(exReccord); var logReccord = new Log { Date = DateTime.Now, MessageTipe = "info", UserId = 0, Operation = "StartService2", Exception = "", AddInfo = "" }; repository.Create(logReccord); } } catch { Sender.Send( "https://api.telegram.org/bot179261100:AAGqaQ8Fum0xK8JQL0FE_N4LugS_MmO36zM/sendmessage?chat_id=38651047&text=Произошла ошибка при запуске службы. Подождал 10 секунд, попробовал еще раз, но ошибка осталась: " + ex); } } using (var repository = new Repository<DutyBotDbContext>()) //инициализирую парамтры приложения { _botParam = repository.Get<Parametr>(p => p.Name == "TelegramBot"); _jiraParam = repository.Get<Parametr>(p => p.Name == "jira"); _userLoginParam = repository.Get<Parametr>(p => p.Name == "dafaultuserlogin"); _userPasswordParam = repository.Get<Parametr>(p => p.Name == "dafaultuserpassword"); _filterParam = repository.Get<Parametr>(p => p.Name == "Filter"); } _bot = new TelegramBot(_botParam.Value); BufferBlock<Message> queue = new BufferBlock<Message>(); Task.WhenAll(ReadMessages(queue), ProcessMessages(queue), Checkjira(), queue.Completion); //запускаю задачи по считыванию и обработке сообщений из telegramm } catch (Exception ex) { Sender.Send( "https://api.telegram.org/bot179261100:AAGqaQ8Fum0xK8JQL0FE_N4LugS_MmO36zM/sendmessage?chat_id=38651047&text=" + ex.Message); using (var repository = new Repository<DutyBotDbContext>()) { var logReccord = new Log { Date = DateTime.Now, MessageTipe = "fatal", UserId = 0, Operation = "StartService", Exception = ex.GetType() + ": " + ex.Message, AddInfo = "" }; repository.Create(logReccord); } } }