Найти тему
Ilya Engineer

Отправка картинки с помощью telegramBot 3 варианта на C#

В статье описано 3 варианта отправки картинки с помощью телеграмм бота с использованием C#:

  • отправка картинки сохраненной в файл
  • отправка картинки в виде файла из pictureBox
  • отправка картинки в виде картинки из pictureBox

Итак приступим к проекту, в котором будет три варианта отправки:

Что понадобится:

  • создаем проект в С#
  • добавляем следующие ресурсы в основной проект

using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using Telegram.Bot;
последнюю следует добавить через NuGet

  • добавляем переменные:

public static TelegramBotClient botClient;
public static BackgroundWorker bw;
String myChatid = "XXXXXXXXX";
String botToken = "XXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXX";

Откуда берутся две последние переменные читайте в моей статье

C# + telegram bot. Прием сообщений, получение ID отправителя, отправка сообщений

  • далее создаем следующую форму:
-2
  • добавляем в проект директорию с тремя файлами:
-3

Их содержимое как раз и включает три варианта отправки файлов:

sendAsPictureFromPictureBox.cs - отправка картинки из программы без сохранения на диск. Картинка прилетает в телеграмм как картинка

using System;
using System.IO; // для работы с файлами

namespace telegram1.sendsVariable
{
class sendAsPictureFromPictureBox
{
public async void send(byte[] bData, String token, String myChatid)
{
string url = "https://api.telegram.org/bot" + token + "/sendPhoto?chat_id=" + myChatid;
using (var client = new System.Net.Http.HttpClient())
{
using (var content =
new System.Net.Http.MultipartFormDataContent("Upload----" + DateTime.Now.ToString(System.Globalization.CultureInfo.InvariantCulture)))
{
content.Add(new System.Net.Http.StreamContent(new MemoryStream(bData)), "photo", "123");
using (
var message =
await client.PostAsync(url, content))
{
var input = await message.Content.ReadAsStringAsync();
}
}
}
}
}
}

sendByFile.cs - отправка картинки существующей на диск в виде файла. Картинка прилетает в телеграмм как картинка.

using System;
using Telegram.Bot; // для работы бота
using System.IO; // для работы с файлами
using System.Net.Http; // для отправки http

namespace telegram1.sendsVariable
{
class sendByFile
{
public void send(TelegramBotClient botClient, String myChatid)
{
using (var http = new HttpClient())
{
var imageFile = System.IO.File.Open(@"c:/1/1.jpg", FileMode.Open); // получаем файл

var bot = new TelegramBotClient(myChatid, http); // подключаемся к боту
Telegram.Bot.Types.InputFiles.InputOnlineFile
iof = new Telegram.Bot.Types.InputFiles.
InputOnlineFile(imageFile); // готовим файл для отправки
botClient.SendPhotoAsync
(myChatid, photo: iof, caption: "This is a Caption11"); // отправляем файл
}
}
}
}

Тут обращаю внимание что на диске С в папке 1 должен быть файл 1.jpg так как в данном случае мы именно с использованием библиотеки отправляем файл который существует на диске. В остальных случаях мы отправляем картинку из программы, существующую в программе но не на диске или интернете. К примеру она была получена с камеры, создана пользователем и т.д.

sendFromPictureBoxAsFile.cs - отправка картинки из программы без сохранения на диск. Картинка отправляется как файл

using System;
using System.IO; // для работы с файлами

namespace telegram1.sendsVariable
{
class sendFromPictureBoxAsFile
{
public async void send(byte[] bData, String token, String myChatid)
{
string url = "https://api.telegram.org/bot" + token + "/sendDocument?chat_id=" + myChatid;
using (var client = new System.Net.Http.HttpClient())
{
using (var content =
new System.Net.Http.MultipartFormDataContent("Upload----" + DateTime.Now.ToString(System.Globalization.CultureInfo.InvariantCulture)))
{
content.Add(new System.Net.Http.StreamContent(new MemoryStream(bData)), "document", "123");
using (
var message =
await client.PostAsync(url, content))
{
var input = await message.Content.ReadAsStringAsync();
}
}
}

}
}
}

Ну и наконец вызов по кнопкам каждой из трех созданных функций:

Bitmap image3;
image3 = new Bitmap(pictureBox1.Image);
ImageConverter converter = new ImageConverter();
byte[] bytes = (byte[])converter.ConvertTo(pictureBox1.Image, typeof(byte[]));
sendsVariable.sendFromPictureBoxAsFile sendByFile = new sendsVariable.sendFromPictureBoxAsFile();
sendByFile.send(bytes, botToken, myChatid);

botClient = new TelegramBotClient(botToken)
{ Timeout = TimeSpan.FromSeconds(1) };
sendsVariable.sendByFile sendByFile = new sendsVariable.sendByFile();
sendByFile.send(botClient, myChatid);

Bitmap image3;
image3 = new Bitmap(pictureBox1.Image);
ImageConverter converter = new ImageConverter();
byte[] bytes = (byte[])converter.ConvertTo(pictureBox1.Image, typeof(byte[]));
sendsVariable.sendAsPictureFromPictureBox sendByFile = new sendsVariable.sendAsPictureFromPictureBox();
sendByFile.send(bytes, botToken, myChatid);

В следующей статье приведу примеры как соединить две картинки разных размеров в одну и отправить в телеграмм.