using System; using System.Collections.Generic; using System.ComponentModel; using System.Windows.Forms; using RestSharp; using RestSharp.Authenticators; using System.Text.Json; namespace Telegram { public partial class Form1 : Form { BackgroundWorker bw; public Form1() { InitializeComponent(); this.bw = new BackgroundWorker(); this.bw.DoWork += this.bw_DoWork; } // ****** // CONFIG public string domain = "", login = "", password = ""; // ****** async void bw_DoWork(object sender, DoWorkEventArgs e) { var worker = sender as BackgroundWorker; var key = e.Argument as String; try { var Bot = new Telegram.Bot.TelegramBotClient(key); await Bot.SetWebhookAsync(""); Bot.OnUpdate += async (object su, Telegram.Bot.Args.UpdateEventArgs evu) => { if (evu.Update.CallbackQuery != null || evu.Update.InlineQuery != null) return; var update = evu.Update; var message = update.Message; if (message == null) return; if (message.Type == Telegram.Bot.Types.Enums.MessageType.Text) { string data = GetJSON(); if (GetValueFromJSON(data, "ChatID", message.Chat.Id.ToString()) == "") { if (message.Text.Contains("@")) { var doc = JsonDocument.Parse(data); JsonElement root = doc.RootElement; var users = root.EnumerateArray(); while (users.MoveNext()) { var user = users.Current; var props = user.EnumerateObject(); string account_id = "", current_email = ""; while (props.MoveNext()) { var prop = props.Current; if (prop.Name.ToLower() == "mbox") { current_email = prop.Value.ToString(); } if (prop.Name.ToLower() == "id") { account_id = prop.Value.ToString(); } } if (current_email.ToLower() == message.Text.ToLower()) { var symbols = "0123456789"; string code = ""; var random = new Random(); for (int i = 0; i < 4; i++) { code += symbols[random.Next(symbols.Length)].ToString(); } // найденному пользователю в платформе проставим ChatID с пометкой _NA (т.е. не авторизован) // и сгенерированный 4-х значный код var data_ = new Dictionary { {"ChatID", message.Chat.Id.ToString() + "_NA"}, {"Proverochnyykod", code} }; var client = new RestClient(domain); client.Authenticator = new HttpBasicAuthenticator(login, password); var request = new RestSharp.RestRequest("solution/SotrudnikiComindware/" + account_id, Method.POST); // POST-запрос к найденному пользователю для обновления данных request.AddHeader("content-type", "application/json"); request.AddParameter("application/json", JsonSerializer.Serialize(data_), ParameterType.RequestBody); client.Execute(request); // запустим процесс отправки сгенерированного кода на email var data_for_proccess = new Dictionary { {"op.23", code}, // Код {"op.24", current_email} // Кому }; request = new RestSharp.RestRequest("system/Process/ProcessObjectService/Create1", Method.POST); request.AddHeader("content-type", "application/json"); data_ = new Dictionary { {"processAppId", "pa.3"}, // process_id {"objectName", null}, {"syncActivityQuantity", 2}, {"objectData", data_for_proccess} }; request.AddParameter("application/json", JsonSerializer.Serialize(data_), ParameterType.RequestBody); client.Execute(request); await Bot.SendTextMessageAsync(message.Chat.Id, "На указанную почту отправлено письмо с 4-х значным кодом, введите его ниже для авторизации"); } } } else if (message.Text.Length == 4) { string value = GetValueFromJSON(data, "Proverochnyykod", message.Chat.Id.ToString() + "_NA"); if (message.Text == value) { // у ChatID убираем пометку "_NA" и очищаем поле "Проверочный код" var data_ = new Dictionary { {"ChatID", message.Chat.Id.ToString()}, {"Proverochnyykod", null} }; var client = new RestClient(domain); client.Authenticator = new HttpBasicAuthenticator(login, password); value = GetValueFromJSON(data, "id", message.Chat.Id.ToString() + "_NA"); var request = new RestSharp.RestRequest("solution/SotrudnikiComindware/" + value, Method.POST); request.AddHeader("content-type", "application/json"); request.AddParameter("application/json", JsonSerializer.Serialize(data_), ParameterType.RequestBody); client.Execute(request); await Bot.SendTextMessageAsync(message.Chat.Id, "Вы успешно авторизованы"); } } else { await Bot.SendTextMessageAsync(message.Chat.Id, "Укажите email-адрес для авторизации"); } } else { string name = GetValueFromJSON(data, "fullName", message.Chat.Id.ToString()); await Bot.SendTextMessageAsync(message.Chat.Id, "Добрый день, " + name + "! Вы успешно авторизованы"); } } }; Bot.StartReceiving(); } catch (Telegram.Bot.Exceptions.ApiRequestException ex) { Console.WriteLine(ex.Message); } } private void button1_Click(object sender, EventArgs e) { var text = textBox1.Text; // в этой переменной токен бота domain = textBox2.Text; // путь к API платформы, например: https://uipath.35.comindware.net/api/public/ login = textBox3.Text; // логин пользователя в платформе password = textBox4.Text; // пароль в платформе if (this.bw.IsBusy != true) { this.bw.RunWorkerAsync(text); } } private string GetJSON() { var client = new RestClient(domain); client.Authenticator = new HttpBasicAuthenticator(login, password); var request = new RestSharp.RestRequest("/solution/SotrudnikiComindware", Method.GET); var response = client.Execute(request); return response.Content; } private string GetValueFromJSON(string data, string attribute_name, string chat_id) { var doc = JsonDocument.Parse(data); JsonElement root = doc.RootElement; var users = root.EnumerateArray(); while (users.MoveNext()) { var user = users.Current; var props = user.EnumerateObject(); string value_ = "", chat_id_ = ""; while (props.MoveNext()) { var prop = props.Current; if (prop.Name.ToLower() == attribute_name.ToLower()) { value_ = prop.Value.ToString(); } if (prop.Name.ToLower() == "chatid") { chat_id_ = prop.Value.ToString(); } } if (chat_id_ == chat_id) { return value_; } } return ""; } } }