В статье описано 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 отправителя, отправка сообщений
- далее создаем следующую форму:
- добавляем в проект директорию с тремя файлами:
Их содержимое как раз и включает три варианта отправки файлов:
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);
В следующей статье приведу примеры как соединить две картинки разных размеров в одну и отправить в телеграмм.