Загрузка...

Who worked with the telegram API?

Thread in C# created by xcedy Jan 10, 2022. 980 views

  1. xcedy
    xcedy Topic starter Jan 10, 2022 777 Aug 23, 2019
    Напишите в тг, есть несколько вопросов. Я сам уже час ебусь с этим и никак не получается
     
  2. Shadowraze
    Shadowraze Jan 10, 2022 682 Jul 15, 2018
    Напиши сюда, здесь сразу ответ бы получил
     
    1. View previous comments (7)
    2. Shadowraze
      Shellar, расскажи ка, в каком виде файл передается?:emm:
    3. Shellar
      Shadowraze, в каком хочешь. Ты пишешь конвертировать в "этот" формат. В какой "этот" хоть?
    4. Shadowraze
      Shellar, в его случае, двоичное содержимое файла:wut:
  3. sansay
    sansay Jan 10, 2022 Banned 735 Nov 28, 2021
    с чем связано хоть?
     
  4. CoderVir
    xcedy, там ничего сложного вообще. Просто посмотри пару гайдов. Кста апи дискорда и телеги похожи.
    The post was merged to previous Jan 10, 2022
    Блоядь так тебе просто файл надо в тг отправить?
    The post was merged to previous Jan 10, 2022
    это даже без библиотеки телебот сделать можно
     
    1. View previous comments (6)
    2. CoderVir
    3. CoderVir
      xcedy, через http client можно просто файл отправить
    4. mikuzeboka
      @CoderVir, на java ебался пару дней - 0 . Инфы по отправке без апи нет
  5. r3xq1
    r3xq1 Jan 10, 2022 53 Jul 27, 2018
    Будет полезно короче, если надо могу проект скинуть.
    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 { }
    }
    }
    }
    }
     
    1. View previous comments (2)
    2. CoderVir
      r3xq1, у тебя походу под версию ниже 4.6. мб под 4тую. Файлы можно отправлять через http client. Так проще
    3. r3xq1
      @CoderVir, там и через httpClient передаётся.
    4. CoderVir
      r3xq1, да я ему помог уже вроде
  6. r3xq1
    r3xq1 Jan 11, 2022 53 Jul 27, 2018
    Вот улучшенный способ отправки файла в телегу без библиотек, через HttpClient, пользуйтесь.
    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 { }
    }
    Если нужно читать файл в памяти, то передача будет такая:
    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() }
    };
    Code
    fullPathToFile.Split('\\').LastOrDefault()
    Можно заменить на
    Code
    Path.GetFileName(fullPathToFile)
     
  7. wvecov
    wvecov Jan 12, 2022 Banned 6 Sep 30, 2020
    Code
     [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());
    }
    }
    Я вот так реализовал
     
Top
Loading...