Загрузка...

Кто работал с API telegram?

Тема в разделе C# создана пользователем xcedy 10 янв 2022. 948 просмотров

  1. xcedy
    xcedy Автор темы 10 янв 2022 779 23 авг 2019
    Напишите в тг, есть несколько вопросов. Я сам уже час ебусь с этим и никак не получается
     
  2. Shadowraze
    Shadowraze 10 янв 2022 685 15 июл 2018
    Напиши сюда, здесь сразу ответ бы получил
     
    1. Посмотреть предыдущие комментарии (7)
    2. Shadowraze
      Shellar, расскажи ка, в каком виде файл передается?:emm:
    3. Shellar
      Shadowraze, в каком хочешь. Ты пишешь конвертировать в "этот" формат. В какой "этот" хоть?
    4. Shadowraze
      Shellar, в его случае, двоичное содержимое файла:wut:
  3. sansay
    sansay 10 янв 2022 Заблокирован(а) 735 28 ноя 2021
    с чем связано хоть?
     
  4. CoderVir
    xcedy, там ничего сложного вообще. Просто посмотри пару гайдов. Кста апи дискорда и телеги похожи.
    --- Сообщение объединено с предыдущим 10 янв 2022
    Блоядь так тебе просто файл надо в тг отправить?
    --- Сообщение объединено с предыдущим 10 янв 2022
    это даже без библиотеки телебот сделать можно
     
    1. Посмотреть предыдущие комментарии (6)
    2. CoderVir
      xcedy, через http client можно просто файл отправить
    3. Yotic
      @CoderVir, на java ебался пару дней - 0 . Инфы по отправке без апи нет
  5. r3xq1
    Будет полезно короче, если надо могу проект скинуть.
    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 { }
    }
    }
    }
    }
     
    10 янв 2022 Изменено
    1. Посмотреть предыдущие комментарии (2)
    2. CoderVir
      r3xq1, у тебя походу под версию ниже 4.6. мб под 4тую. Файлы можно отправлять через http client. Так проще
    3. r3xq1
      @CoderVir, там и через httpClient передаётся.
    4. CoderVir
      r3xq1, да я ему помог уже вроде
  6. r3xq1
    Вот улучшенный способ отправки файла в телегу без библиотек, через 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() }
    };
    Код
    fullPathToFile.Split('\\').LastOrDefault()
    Можно заменить на
    Код
    Path.GetFileName(fullPathToFile)
     
    11 янв 2022 Изменено
  7. wvecov
    wvecov 12 янв 2022 Заблокирован(а) 6 30 сен 2020
    Код
     [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());
    }
    }
    Я вот так реализовал
     
    12 янв 2022 Изменено
Загрузка...
Top