2015-11-17 6 views
4

Я хочу создать робота в Telegram. После поиска я нашел telegram.bot в пакете Nuget.Отправить фотографии, используя telegram.bot

Но у меня возникли проблемы с отправкой фотографии. Определение функции, как

Bot.SendPhoto(int channelId, string photo, string caption) 

Но я не знаю, что, как ожидается, в параметре string photo. Должен ли я преобразовать свое изображение в строку base64 или передать путь к изображению, или ...?

Мой код в настоящее время выглядит следующим образом

var Bot = new Telegram.Bot.Api("API KEY"); 
var b = new System.Net.WebClient().DownloadData(a.DefaultImage()); 
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(new System.IO.MemoryStream(b)); 
var z = bmp.GetThumbnailImage(200, (200 * bmp.Height)/bmp.Width, 
    new System.Drawing.Image.GetThumbnailImageAbort(
     delegate { return true; }), IntPtr.Zero); 
System.IO.MemoryStream ms = new System.IO.MemoryStream(); 
z.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); 
var x = new Telegram.Bot.Types.FileToSend() 
{ 
    Filename = a.DefaultImage().Split('/').LastOrDefault(), Content = ms 
}; 

var t = Bot.SendPhoto("@Chanel", x, a.Title); 

Но это вызывает Исключение

Telegram.Bot.Types.ApiRequestException: [Ошибка]: Bad Request: Файл для отправки должно быть непустой

+0

В репозитории NuGet пакета 'Tele Bot' нет. Каково фактическое имя используемого вами пакета? Это 'TeleBotDotNet' или' telegram.bot'? – rufanov

+0

Какая у вас проблема? Вы получаете исключение или что еще? –

+0

i not undrestand put to ** String Photo ** Атрибут этой функции –

ответ

5

В соответствии с source code method documentation вы должны передать «file_id as String, чтобы отправить фотографию, которая является alrea dy на серверах Telegram или загрузить новую фотографию с использованием multipart/form-data ". Я предполагаю, что комментарий параметра является общим и что эта перегрузка принимает файл file_id существующего файла на сервере.

/// <summary> 
/// Use this method to send photos. On success, the sent Message is returned. 
/// </summary> 
/// <param name="chatId">Unique identifier for the target chat</param> 
/// <param name="photo">Photo to send. You can either pass a file_id as String to resend a photo that is already on the Telegram servers, or upload a new photo using multipart/form-data.</param> 
/// <param name="caption">Optional. Photo caption (may also be used when resending photos by file_id).</param> 
/// <param name="replyToMessageId">Optional. If the message is a reply, ID of the original message</param> 
/// <param name="replyMarkup">Optional. Additional interface options. A JSON-serialized object for a custom reply keyboard, instructions to hide keyboard or to force a reply from the user.</param> 
/// <returns>On success, the sent Message is returned.</returns> 
public async Task<Message> SendPhoto(int chatId, string photo, string caption = "", int replyToMessageId = 0, ReplyMarkup replyMarkup = null) 

Перегрузка

public async Task<Message> SendPhoto(int chatId, FileToSend photo, 
    string caption = "", int replyToMessageId = 0, 
    ReplyMarkup replyMarkup = null) 

принимает FileToSend, который содержит имя файла и потока. Используйте эту вторую перегрузку для загрузки новых фотографий.

Отказ от ответственности: Я не использовал API, поэтому это чисто отчисления от проверки исходного кода.

1

Вы также можете попробовать, как этот =>

Bot.SendPhotoAsync(Chatid , new FileToSend(FileName,Streaminput),Caption); 

Этот API-интерфейс по умолчанию апи для отправки фото с надписью на телеграмм бота.

0

вы также можете попробовать, если вам нужно.

Bot.SendPhoto(int channelId,photo : "http://abc.jpeg",caption:"hii"); 

на телеграмме бота вы отправили изображение, видео как 2 путь. во-первых, вы можете отправить, как конвертировать изображение в поток, а затем отправить дальше, и 2-й, я даю, как просто пройти фото: «here give url as string», тогда телеграмма бот-сервера автоматически загрузит это изображение с URL-адреса.

Смежные вопросы