Загрузка...

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

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

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