• VLMI - форум по обмену информацией. На форуме можете найти способы заработка, разнообразную информацию по интернет-безопасности, обмен знаниями, курсы/сливы.

    После регистрации будут доступны основные разделы.

    Контент форума создают пользователи, администрация за действия пользователей не несёт ответственности, отказ от ответственности. Так же перед использованием форума необходимо ознакомиться с правилами ресурса. Продолжая использовать ресурс вы соглашаетесь с правилами.
  • Подпишись на наш канал в Telegram для информации о актуальных зеркалах форума: https://t.me/vlmiclub

С# TelegramBot Third lesson - Отправка данных

Antlion

Участник
Сообщения
12
Реакции
13
0 руб.
Telegram
Вы не знаете как работать с телеграм ботом? Тогда этот урок для Вас!

Итак в этой части мы создали бота
Установили бота в своём проекте
Давайте теперь напишем функции которые будут делать следующее:
  • Отправлять скриншот
  • Отправлять сообщения
  • Отправлять файлы
  • Получать информацию ( пока о боте )
Сразу хочу предупредить чтобы успешно подключиться к боту вы не должны находится за NAT
Если Вы не можете подключиться к боту используйте VPN сервер, или же подключитесь напрямую через Proxy к TelegramBotClient - Об этом в следующем уроке.
Создадим

Класс Telega.cs

Подключим все зависимости:
Код:
using System;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Telegram.Bot;
using Telegram.Bot.Types;
using Telegram.Bot.Types.InputFiles;

Создадим переменную bot от TelegramBotClient внутри класса Telega
Код:
public class Telega
{
   private static TelegramBotClient bot;
}

Запишем функцию отправки и удаления сообщения

Код:
public class Telega
{
   private static TelegramBotClient bot;
 
   public static async Task SendMessage(string token, int destID, string text)
   {
      if (!string.IsNullOrWhiteSpace(token))
      {
          try
          {
             bot = new TelegramBotClient(token); // Подключение к боту
             Message ss = await bot.SendTextMessageAsync(destID, text); // Отправка сообщения
            Console.WriteLine($"Вы отправили боту текст с сообщением: {ss.Text}"); // В консоль получим сообщение какой текст отправили.
            Console.WriteLine($"Всего сообщений: {ss.MessageId} | Чат ID: {ss.Chat.Id} | Date: {ss.Date}");
         // await bot.DeleteMessageAsync(destID, ss.MessageId); // Удаления сообщения
          }
          catch (ArgumentException ex) { System.IO.File.AppendAllText("ConnectError.txt", $"{ex.Message}\r\n"); }
      }
   }
}

Итак функция отправки сообщения готова, но как же её использовать?
Да вообще изи смотрим внимательно идём в

Класс Program.cs

Код:
using System;
using System.IO;
using System.Text;
 
internal static partial class Program
{
    private static string token = "860740080:AAHzYkm8eSYmZKd***"; // тут ваш токен
    private static int id = 49755****; // тут ваш айди
 
    private static StringBuilder stringBuilder = new StringBuilder();
 
    public static void Main()
    {
       Console.Title = "TelegramBot";
       stringBuilder.AppendLine($"Привет {Environment.UserName} это я твой бот =)");
       try
       {
          Telega.SendMessage(token, id, stringBuilder?.ToString()).Wait();
       }
      catch (AggregateException) { File.AppendAllText("ConnectError.txt", "Ошибка подключения возможно вы находитесь за NAT. Используйте Proxy сервер или VPN\r\n"); }
    }
}

Запустим бота и проверим

23377

Как видим сообщение отправляется =)

Теперь в классе Telega.cs запишем функцию которая будет отправлять скриншот

Код:
public static async Task SendPhoto(string token, int chatId, string filePath)
{
     if (!string.IsNullOrWhiteSpace(token) || System.IO.File.Exists(filePath))
     {
         using (var form = new MultipartFormDataContent())
         {
             form.Add(new StringContent(chatId.ToString(), Encoding.UTF8), "chat_id");
             using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
             {
                form.Add(new StreamContent(fileStream), "photo", filePath.Split('\\').Last());
                using (var client = new HttpClient())
                {
                    await client.PostAsync($"https://api.telegram.org/bot{token}/sendPhoto", form);
                    Console.WriteLine("Скриншот отправлен успешно!");
                }
             }
         }
     }
}

В классе Program.cs вызывается таким образом

Код:
using System;
using System.IO;
 
internal static partial class Program
{
     private static string token = "860740080:AAHzYkm8eSYmZKd***";
     private static int id = 49755****;
     private static readonly string DesktopFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "Screenshot_4.png");
     public static void Main()
     {
        Console.Title = "TelegramBot";
        try
        {
            Telega.SendPhoto(token, id, DesktopFile).Wait();
        }
       catch (AggregateException) { File.AppendAllText("ConnectError.txt", "Ошибка подключения возможно вы находитесь за NAT. Используйте Proxy сервер или VPN\r\n"); }
     }
}

Запускаем программу и проверяем..

23378

Супер фотография отправлена =)

Переходим к следующему запишем в класс Telega.cs функцию отправки файла

Код:
public static async Task SendFile(string token, int id, string filename)
{
    if (!string.IsNullOrWhiteSpace(token) || System.IO.File.Exists(filename))
    {
         bot = new TelegramBotClient(token);
         using (FileStream stream = System.IO.File.OpenRead(filename)) // Открываем поток для чтения файла(ов)
         {
            string ssf = Path.GetFileName(filename); // Получаем имя файла
            var Iof = new InputOnlineFile(stream, ssf); // Входные данные для отправки
            string fromsend = $"Файл отправлен от: {Environment.UserName}"; // Имя пользователя
            Message ss = await bot.SendDocumentAsync(id, Iof, fromsend); // Отправка файла с параметрами.
          }
     }
}

В классе Program.cs вызываем так:

Код:
using System;
using System.IO;
 
internal static partial class Program
{
   private static string token = "860740080:AAHzYkm8eSYmZKd***";
   private static int id = 49755****;
   private static readonly string DesktopFile =     Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "Lesson.cs");
 
   public static void Main()
   {
      Console.Title = "TelegramBot";
      try
      {
        Telega.SendFile(token, id, DesktopFile).Wait();
       }
       catch (AggregateException) { File.AppendAllText("ConnectError.txt", "Ошибка подключения возможно вы находитесь за NAT. Используйте Proxy сервер или VPN\r\n"); }
   }
}

Запускаем,проверяем...

23379

Файл успешно отправился =)

Если Вы хотите массово отправить файлы сделайте это следующим способом:

Код:
public static void MassSendFiles(string token, int id, string dir, string pattern)
{
     try
     {
         if (!string.IsNullOrWhiteSpace(token))
         {
            foreach (string files in Directory.EnumerateFiles(dir, pattern, SearchOption.TopDirectoryOnly))
            {
                SendFile(token, id, files).Wait();
            }
          }
      }
     catch (Exception ex) { Console.WriteLine(ex.Message); }
}

Вызывается так:

Код:
private static readonly string DesktopFile = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
Telega.MassSendFiles(token, id, DesktopFile, "*zip");

Ну и на по следок получим информацию о боте:
В классе Telega.cs запишем функцию которая получит нужную нам информацию:

Код:
public static void GetInfo(string token)
{
    if (!string.IsNullOrWhiteSpace(token))
    {
         try
         {
            bot = new TelegramBotClient(token);
            var basa = new StringBuilder();
            User me = bot.GetMeAsync().Result;
            if (me.IsBot)
            {
               basa.AppendLine($"Логин бота: {me.Username}");
               basa.AppendLine($"Имя бота: {me.FirstName}");
               basa.AppendLine($"ID бота: {me.Id.ToString()}");
            }
                 Console.WriteLine(basa?.ToString());
        }
      catch (AggregateException) { Console.WriteLine("Соединение блокировано, используйте Proxy Сервер"); }
   }
}

Вызывается просто:

Код:
Telega.GetInfo(token);
Console.ReadKey();

23382

На этом всё =) Всем удачи.
Не гавнокодьте
:-D


Ну и на сладкое выложу полный код всего этого урока наслаждайтесь

Код:
namespace NewBot
{
    using System;
    using System.IO;
    using System.Linq;
    using System.Net.Http;
    using System.Text;
    using System.Threading.Tasks;
    using Telegram.Bot;
    using Telegram.Bot.Types;
    using Telegram.Bot.Types.InputFiles;
 
    public class Telega
    {
        private static TelegramBotClient bot;
        public static async Task SendMessage(string token, int destID, string text)
        {
            try
            {
                if (!string.IsNullOrWhiteSpace(token))
                {
                    bot = new TelegramBotClient(token); // Подключение к боту
                    Message ss = await bot.SendTextMessageAsync(destID, text); // Отправка сообщения
                    Console.WriteLine($"Вы отправили боту текст с сообщением: {ss.Text}");
                    Console.WriteLine($"Всего сообщений: {ss.MessageId} | Чат ID: {ss.Chat.Id} | Date: {ss.Date}");
                    await bot.DeleteMessageAsync(destID, ss.MessageId); // Удаления сообщения
                }
            }
            catch { }
        }
 
        public static async Task SendPhoto(int chatId, string filePath, string token)
        {
            if (!string.IsNullOrWhiteSpace(token) || System.IO.Directory.Exists(filePath))
            {
                using (var form = new MultipartFormDataContent())
                {
                    form.Add(new StringContent(chatId.ToString(), Encoding.UTF8), "chat_id");
 
                    using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
                    {
                        form.Add(new StreamContent(fileStream), "photo", filePath.Split('\\').Last());
 
                        using (var client = new HttpClient())
                        {
                            await client.PostAsync($"https://api.telegram.org/bot{token}/sendPhoto", form);
                            Console.WriteLine("Скриншот отправлен успешно!");
                        }
                    }
                }
            }
        }
 
        public static async Task SendFile(string token, int id, string filename)
        {
            if (!string.IsNullOrWhiteSpace(token) || System.IO.File.Exists(filename))
            {
                bot = new TelegramBotClient(token);
                using (FileStream stream = System.IO.File.OpenRead(filename))
                {
                    string ssf = Path.GetFileName(filename); // Получаем имя файла из потока
                    var Iof = new InputOnlineFile(stream, ssf); // Входные данные для отправки
                    string fromsend = $"Файл отправлен от: {Environment.UserName}"; // Имя пользователя
                    Message ss = await bot.SendDocumentAsync(id, Iof, fromsend); // Отправка файла с параметрами.
                }
            }
        }
 
        public static void MassSendFiles(string token, int id, string dir, string pattern)
        {
            try
            {
                if (!string.IsNullOrWhiteSpace(token))
                {
                    foreach (string files in Directory.EnumerateFiles(dir, pattern, SearchOption.TopDirectoryOnly))
                    {
                        SendFile(token, id, files).Wait();
                    }
                }
            }
            catch (Exception ex) { Console.WriteLine(ex.Message); }
        }
 
        public static void GetInfo(string token)
        {
            if (!string.IsNullOrWhiteSpace(token))
            {
                try
                {
                    bot = new TelegramBotClient(token);
                    var basa = new StringBuilder();
                    User me = bot.GetMeAsync().Result;
                    if (me.IsBot)
                    {
                        basa.AppendLine($"Логин бота: {me.Username}");
                        basa.AppendLine($"Имя бота: {me.FirstName}");
                        basa.AppendLine($"ID бота: {me.Id.ToString()}");
                    }
                    Console.WriteLine(basa?.ToString());
                }
                catch (AggregateException) { Console.WriteLine("Соединение блокировано, используйте Proxy Сервер"); }
            }
        }
    }
}

Код:
namespace NewBot
{
    using System;
    using System.IO;
    using System.Text;
    using System.Threading.Tasks;
 
    internal static partial class Program
    {
        // private static string token = "860740080:AAHzYkm8eSYmZKd***";
        // private static int id = 49757;
        private static readonly string txtfile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "file.txt");
        private static StringBuilder stringBuilder = new StringBuilder();
        public static void Main()
        {
            Console.Title = "TelegramBot Test connect by Antlion";
            stringBuilder.AppendLine($"Привет бот это: {Environment.UserName}");
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("\"Для подключения требуется VPN сервер!\"\r\n");
 
            Console.ForegroundColor = ConsoleColor.Cyan;
            Console.Write("Введите токен для подключения: ");
 
            string token = Console.ReadLine(); // тут вводим наш токен бота
 
            Console.Write("Введите ID: ");
            int id = Convert.ToInt32(Console.ReadLine());
            Console.ForegroundColor = ConsoleColor.White;
            Console.WriteLine();
 
            Task.Run(() =>
            {
                //Telega.SendMessage(token, id, stringBuilder.ToString()).Wait();
                //Telega.SendPhoto(id, file, token).Wait();
                Telega.SendFile(token, id, txtfile).Wait();
 
            });
                //string desktopath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "Files");
                //Task.Run(() => Telega.MassSendFiles(token, id, desktopath, "*.*"));
                Telega.GetInfo(token);
            Console.ReadKey();
        }
        /*
        public static void Main()
        {
            Console.Title = "TelegramBot";
            try
            {
                Telega.GetInfo(token);
                Console.ReadKey();
            }
            catch (AggregateException) { File.AppendAllText("ConnectError.txt", "Ошибка подключения возможно вы находитесь за NAT. Используйте Proxy сервер или VPN\r\n"); }
        }
        */
    }
}
 
Сверху Снизу