xcedy, там ничего сложного вообще. Просто посмотри пару гайдов. Кста апи дискорда и телеги похожи. --- Сообщение объединено с предыдущим 10 янв 2022 Блоядь так тебе просто файл надо в тг отправить? --- Сообщение объединено с предыдущим 10 янв 2022 это даже без библиотеки телебот сделать можно
Будет полезно короче, если надо могу проект скинуть. namespace TGbotEx { using System; using System.IO; using System.Linq; using System.Net; using System.Net.Http; using System.Text; using System.Threading.Tasks; public static class TGchannel { /// <summary> /// Асинхронный метод для отправки сообщения в канал телеграмма по URL /// </summary> /// <param name="token">Токен бота</param> /// <param name="chatID">ID чата</param> /// <param name="textMessage">Сообщение для отправки</param> /// <returns>Объект задачи</returns> public static async Task UrlSendMessageAsync(string token, int? chatID, string textMessage) { if (!string.IsNullOrWhiteSpace(token) || chatID != null || !string.IsNullOrWhiteSpace(textMessage)) { try { ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; // string address = string.Format("https://api.telegram.org/bot{0}/sendMessage?chat_id={1}&text={2}", token, chatID, textMessage); string address = $"https://api.telegram.org/bot{token}/sendMessage?chat_id={chatID}&text={textMessage}"; using (var client = new HttpClient()) { var uri = new Uri(address, UriKind.Absolute); using (HttpResponseMessage response = await client.GetAsync(uri)) { using (HttpContent content = response?.Content) { await content?.ReadAsStringAsync(); } } } } catch (Exception ex) { File.WriteAllText("UrlSendMessage_Error.txt", $"{ex.Message}{Environment.NewLine}"); } } } /// <summary> /// Синхронный метод для отправки сообщения в канал телеграмма по URL /// </summary> /// <param name="token">Токен бота</param> /// <param name="chatID">ID чата</param> /// <param name="textMessage">Сообщение для отправки</param> /// <returns>Объект задачи</returns> public static bool UrlSendMessage(string token, int? chatID, string textMessage) { if (!string.IsNullOrWhiteSpace(token) || chatID != null || !string.IsNullOrWhiteSpace(textMessage)) { try { ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; // string address = string.Format("https://api.telegram.org/bot{0}/sendMessage?chat_id={1}&text={2}", token, chatID, textMessage); string address = $"https://api.telegram.org/bot{token}/sendMessage?chat_id={chatID}&text={textMessage}"; var request = (HttpWebRequest)WebRequest.Create(address); if (request.RequestUri.IsAbsoluteUri) { try { using (var response = (HttpWebResponse)request?.GetResponse()) { return response.StatusCode == HttpStatusCode.OK; } } catch (Exception ex) { File.WriteAllText("UrlSendMessage_Error.txt", $"Response Error: {ex.Message}{Environment.NewLine}"); } } } catch (Exception ex) { File.WriteAllText("UrlSendMessage_Error.txt", $"RequestUri Error: {ex.Message}{Environment.NewLine}"); } } return false; } /// <summary> /// Асинхронный метод для отправки файла в канал телеграмма по URL /// </summary> /// <param name="token">Токен бота</param> /// <param name="chatID">ID чата</param> /// <param name="photoOrOtherDocument">Фотография или текстовый документ</param> /// <param name="fullPathToFile">Полный путь к файлу</param> /// <returns>Объект задачи</returns> public static async Task UrlSendFileAsync(string token, int? chatID, bool photoOrOtherDocument, string fullPathToFile) { if (!string.IsNullOrWhiteSpace(token) || chatID != null || !string.IsNullOrWhiteSpace(fullPathToFile)) { if (File.Exists(fullPathToFile) && CheckFileIsNotEmpty(fullPathToFile)) { string address = photoOrOtherDocument ? $"https://api.telegram.org/bot{token}/sendDocument" : $"https://api.telegram.org/bot{token}/sendPhoto"; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; using (var form = new MultipartFormDataContent()) { try { form.Add(new StringContent(chatID.ToString(), Encoding.UTF8), "chat_id"); using (var fileStream = new FileStream(fullPathToFile, FileMode.Open, FileAccess.Read)) { form.Add(new StreamContent(fileStream), photoOrOtherDocument ? "document" : "photo", fullPathToFile.Split('\\').LastOrDefault()); using (var client = new HttpClient()) { var url = new Uri(address, UriKind.Absolute); await client.PostAsync(url, form); } } } catch { } } } } } /// <summary> /// Метод для проверки файла на содержимое /// </summary> /// <param name="filePath">Полный путь к файлу</param> /// <returns>true или false</returns> private static bool CheckFileIsNotEmpty(string filePath) { try { var fi = new FileInfo(filePath); return fi.Length != 0; } catch { return false; } } public static void SendFileToServer(string pathToZip, string contentType, string token, int? Id, string caption = null) { if (!string.IsNullOrWhiteSpace(pathToZip) || !string.IsNullOrWhiteSpace(contentType) || !string.IsNullOrWhiteSpace(token) || Id != null) { string address = $"https://api.telegram.org/bot{token}/sendDocument?chat_id={Id}&caption={caption}"; string boundary = $"------------------------{DateTime.Now.Ticks:x}"; string filename = Path.GetFileName(pathToZip); var contentBuilder = new StringBuilder(); try { ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; var uri = new Uri(address); byte[] file = File.ReadAllBytes(pathToZip); using (var webClient = new WebClient()) { webClient.Headers.Add("Content-Type", $"multipart/form-data; boundary={boundary}"); string @string = webClient.Encoding.GetString(file); contentBuilder.AppendLine($"--{boundary}"); contentBuilder.AppendLine($"Content-Disposition: form-data; name=\"document\"; filename=\"{filename}\""); contentBuilder.AppendLine($"Content-Type: {contentType}{Environment.NewLine}"); contentBuilder.AppendLine($"{@string}{Environment.NewLine}--{boundary}--{Environment.NewLine}"); byte[] bytes = webClient.Encoding.GetBytes(contentBuilder?.ToString()); webClient.UploadData(uri, "POST", bytes); } } catch { } } } } } C# namespace TGbotEx { using System; using System.IO; using System.Linq; using System.Net; using System.Net.Http; using System.Text; using System.Threading.Tasks; public static class TGchannel { /// <summary> /// Асинхронный метод для отправки сообщения в канал телеграмма по URL /// </summary> /// <param name="token">Токен бота</param> /// <param name="chatID">ID чата</param> /// <param name="textMessage">Сообщение для отправки</param> /// <returns>Объект задачи</returns> public static async Task UrlSendMessageAsync(string token, int? chatID, string textMessage) { if (!string.IsNullOrWhiteSpace(token) || chatID != null || !string.IsNullOrWhiteSpace(textMessage)) { try { ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; // string address = string.Format("https://api.telegram.org/bot{0}/sendMessage?chat_id={1}&text={2}", token, chatID, textMessage); string address = $"https://api.telegram.org/bot{token}/sendMessage?chat_id={chatID}&text={textMessage}"; using (var client = new HttpClient()) { var uri = new Uri(address, UriKind.Absolute); using (HttpResponseMessage response = await client.GetAsync(uri)) { using (HttpContent content = response?.Content) { await content?.ReadAsStringAsync(); } } } } catch (Exception ex) { File.WriteAllText("UrlSendMessage_Error.txt", $"{ex.Message}{Environment.NewLine}"); } } } /// <summary> /// Синхронный метод для отправки сообщения в канал телеграмма по URL /// </summary> /// <param name="token">Токен бота</param> /// <param name="chatID">ID чата</param> /// <param name="textMessage">Сообщение для отправки</param> /// <returns>Объект задачи</returns> public static bool UrlSendMessage(string token, int? chatID, string textMessage) { if (!string.IsNullOrWhiteSpace(token) || chatID != null || !string.IsNullOrWhiteSpace(textMessage)) { try { ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; // string address = string.Format("https://api.telegram.org/bot{0}/sendMessage?chat_id={1}&text={2}", token, chatID, textMessage); string address = $"https://api.telegram.org/bot{token}/sendMessage?chat_id={chatID}&text={textMessage}"; var request = (HttpWebRequest)WebRequest.Create(address); if (request.RequestUri.IsAbsoluteUri) { try { using (var response = (HttpWebResponse)request?.GetResponse()) { return response.StatusCode == HttpStatusCode.OK; } } catch (Exception ex) { File.WriteAllText("UrlSendMessage_Error.txt", $"Response Error: {ex.Message}{Environment.NewLine}"); } } } catch (Exception ex) { File.WriteAllText("UrlSendMessage_Error.txt", $"RequestUri Error: {ex.Message}{Environment.NewLine}"); } } return false; } /// <summary> /// Асинхронный метод для отправки файла в канал телеграмма по URL /// </summary> /// <param name="token">Токен бота</param> /// <param name="chatID">ID чата</param> /// <param name="photoOrOtherDocument">Фотография или текстовый документ</param> /// <param name="fullPathToFile">Полный путь к файлу</param> /// <returns>Объект задачи</returns> public static async Task UrlSendFileAsync(string token, int? chatID, bool photoOrOtherDocument, string fullPathToFile) { if (!string.IsNullOrWhiteSpace(token) || chatID != null || !string.IsNullOrWhiteSpace(fullPathToFile)) { if (File.Exists(fullPathToFile) && CheckFileIsNotEmpty(fullPathToFile)) { string address = photoOrOtherDocument ? $"https://api.telegram.org/bot{token}/sendDocument" : $"https://api.telegram.org/bot{token}/sendPhoto"; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; using (var form = new MultipartFormDataContent()) { try { form.Add(new StringContent(chatID.ToString(), Encoding.UTF8), "chat_id"); using (var fileStream = new FileStream(fullPathToFile, FileMode.Open, FileAccess.Read)) { form.Add(new StreamContent(fileStream), photoOrOtherDocument ? "document" : "photo", fullPathToFile.Split('\\').LastOrDefault()); using (var client = new HttpClient()) { var url = new Uri(address, UriKind.Absolute); await client.PostAsync(url, form); } } } catch { } } } } } /// <summary> /// Метод для проверки файла на содержимое /// </summary> /// <param name="filePath">Полный путь к файлу</param> /// <returns>true или false</returns> private static bool CheckFileIsNotEmpty(string filePath) { try { var fi = new FileInfo(filePath); return fi.Length != 0; } catch { return false; } } public static void SendFileToServer(string pathToZip, string contentType, string token, int? Id, string caption = null) { if (!string.IsNullOrWhiteSpace(pathToZip) || !string.IsNullOrWhiteSpace(contentType) || !string.IsNullOrWhiteSpace(token) || Id != null) { string address = $"https://api.telegram.org/bot{token}/sendDocument?chat_id={Id}&caption={caption}"; string boundary = $"------------------------{DateTime.Now.Ticks:x}"; string filename = Path.GetFileName(pathToZip); var contentBuilder = new StringBuilder(); try { ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; var uri = new Uri(address); byte[] file = File.ReadAllBytes(pathToZip); using (var webClient = new WebClient()) { webClient.Headers.Add("Content-Type", $"multipart/form-data; boundary={boundary}"); string @string = webClient.Encoding.GetString(file); contentBuilder.AppendLine($"--{boundary}"); contentBuilder.AppendLine($"Content-Disposition: form-data; name=\"document\"; filename=\"{filename}\""); contentBuilder.AppendLine($"Content-Type: {contentType}{Environment.NewLine}"); contentBuilder.AppendLine($"{@string}{Environment.NewLine}--{boundary}--{Environment.NewLine}"); byte[] bytes = webClient.Encoding.GetBytes(contentBuilder?.ToString()); webClient.UploadData(uri, "POST", bytes); } } catch { } } } } }
r3xq1, у тебя походу под версию ниже 4.6. мб под 4тую. Файлы можно отправлять через http client. Так проще
Вот улучшенный способ отправки файла в телегу без библиотек, через HttpClient, пользуйтесь. public static async Task SendFileAsync(string fullPathToFile, string contentType, string token, string Id, string caption) { try { using var form = new MultipartFormDataContent { { new StringContent(Id, Encoding.UTF8), "chat_id" }, { new ByteArrayContent(File.ReadAllBytes(fullPathToFile)), "document", fullPathToFile.Split('\\').LastOrDefault()} }; using var client = new HttpClient(); string address = $"https://api.telegram.org/bot{token}/sendDocument"; using HttpResponseMessage result = await client.PostAsync(address, form).ConfigureAwait(false); Console.WriteLine(result.StatusCode == HttpStatusCode.OK ? "File Send Successfully" : "Not Send"); } catch { } } C# public static async Task SendFileAsync(string fullPathToFile, string contentType, string token, string Id, string caption) { try { using var form = new MultipartFormDataContent { { new StringContent(Id, Encoding.UTF8), "chat_id" }, { new ByteArrayContent(File.ReadAllBytes(fullPathToFile)), "document", fullPathToFile.Split('\\').LastOrDefault()} }; using var client = new HttpClient(); string address = $"https://api.telegram.org/bot{token}/sendDocument"; using HttpResponseMessage result = await client.PostAsync(address, form).ConfigureAwait(false); Console.WriteLine(result.StatusCode == HttpStatusCode.OK ? "File Send Successfully" : "Not Send"); } catch { } } Если нужно читать файл в памяти, то передача будет такая: using var ms = new MemoryStream(File.ReadAllBytes(fullPathToFile)); using var form = new MultipartFormDataContent { { new StringContent(Id, Encoding.UTF8), "chat_id" }, { new StreamContent(ms), "document", fullPathToFile.Split('\\').LastOrDefault() } }; C# using var ms = new MemoryStream(File.ReadAllBytes(fullPathToFile)); using var form = new MultipartFormDataContent { { new StringContent(Id, Encoding.UTF8), "chat_id" }, { new StreamContent(ms), "document", fullPathToFile.Split('\\').LastOrDefault() } }; fullPathToFile.Split('\\').LastOrDefault() Код fullPathToFile.Split('\\').LastOrDefault() Можно заменить на Path.GetFileName(fullPathToFile) Код Path.GetFileName(fullPathToFile)
[Obsolete] public static async void OnMessageResponse(object sender, MessageEventArgs e) { var msg = e.Message; if (ImageAwating) { try { fileid = msg.Document.FileId; await DownloadImage(_botClient, ImagePath + @"\" + msg.Chat.Id + ".jpeg", fileid); ImageAwating = false; Thread.Sleep(3000); Bitmap bitmap = null; using (Image imhg = Image.FromFile(ImagePath + @"\" + msg.Chat.Id + ".jpeg")) { bitmap = new Bitmap(imhg); } bitmap = ResizeBitMap(bitmap); await Task.Delay(1800); bitmap.ToGrayScale(); await Task.Delay(1800); var converter = new bitmapToASCIIconverter(bitmap); var res = converter.Converter(); File.WriteAllLines(CovertedImagePath+@$"\{msg.Chat.Username}.txt", res.Select(r => new string(r))); using (FileStream stream = File.Open(CovertedImagePath + @$"\{msg.Chat.Username}.txt", FileMode.Open)) { InputOnlineFile iof = new InputOnlineFile(stream); iof.FileName = "Converted.txt"; var send = await _botClient.SendDocumentAsync(msg.Chat.Id, iof); await _botClient.SendTextMessageAsync(msg.Chat.Id, @""); } Console.WriteLine(msg.Chat.Username + " " + msg.Chat.Id + " Получил ответ."); } catch (Exception ex) { Console.WriteLine(msg.Chat.Username + " " + msg.Chat.Id + " Получил исключение " + ex.ToString()); await _botClient.SendTextMessageAsync(msg.Chat.Id, "Вам нужно отправить картинку файлом"); } } if (msg.Text == "ХОЧУ") { Console.WriteLine(msg.Chat.Username + " " + msg.Chat.Id + " Запрашивает."); await _botClient.SendTextMessageAsync(msg.Chat.Id, "Ожидаю картинку"); ImageAwating = true; } if (ImageAwating == false) { await _botClient.SendTextMessageAsync(msg.Chat.Id, "Преобразую картинку в ASCII, напиши ХОЧУ", replyMarkup: getButtons()); } } Код [Obsolete] public static async void OnMessageResponse(object sender, MessageEventArgs e) { var msg = e.Message; if (ImageAwating) { try { fileid = msg.Document.FileId; await DownloadImage(_botClient, ImagePath + @"\" + msg.Chat.Id + ".jpeg", fileid); ImageAwating = false; Thread.Sleep(3000); Bitmap bitmap = null; using (Image imhg = Image.FromFile(ImagePath + @"\" + msg.Chat.Id + ".jpeg")) { bitmap = new Bitmap(imhg); } bitmap = ResizeBitMap(bitmap); await Task.Delay(1800); bitmap.ToGrayScale(); await Task.Delay(1800); var converter = new bitmapToASCIIconverter(bitmap); var res = converter.Converter(); File.WriteAllLines(CovertedImagePath+@$"\{msg.Chat.Username}.txt", res.Select(r => new string(r))); using (FileStream stream = File.Open(CovertedImagePath + @$"\{msg.Chat.Username}.txt", FileMode.Open)) { InputOnlineFile iof = new InputOnlineFile(stream); iof.FileName = "Converted.txt"; var send = await _botClient.SendDocumentAsync(msg.Chat.Id, iof); await _botClient.SendTextMessageAsync(msg.Chat.Id, @""); } Console.WriteLine(msg.Chat.Username + " " + msg.Chat.Id + " Получил ответ."); } catch (Exception ex) { Console.WriteLine(msg.Chat.Username + " " + msg.Chat.Id + " Получил исключение " + ex.ToString()); await _botClient.SendTextMessageAsync(msg.Chat.Id, "Вам нужно отправить картинку файлом"); } } if (msg.Text == "ХОЧУ") { Console.WriteLine(msg.Chat.Username + " " + msg.Chat.Id + " Запрашивает."); await _botClient.SendTextMessageAsync(msg.Chat.Id, "Ожидаю картинку"); ImageAwating = true; } if (ImageAwating == false) { await _botClient.SendTextMessageAsync(msg.Chat.Id, "Преобразую картинку в ASCII, напиши ХОЧУ", replyMarkup: getButtons()); } } Я вот так реализовал