Esempio n. 1
0
 public Task <Message> SendVideoNoteAsync(
     ChatId chatId,
     InputTelegramFile videoNote,
     int duration                        = 0,
     int length                          = 0,
     bool disableNotification            = false,
     int replyToMessageId                = 0,
     IReplyMarkup replyMarkup            = null,
     CancellationToken cancellationToken = new CancellationToken(),
     InputMedia thumb                    = null) => throw new NotImplementedException();
Esempio n. 2
0
 public VideoNoteMessage(InputTelegramFile videoNote, int duration = 0, int length = 0, InputMedia?thumb = null, bool disableNotification = false, int replyToMessageId = 0, IReplyMarkup?replyMarkup = null, ChatId?chatId = null)
 {
     VideoNote           = videoNote;
     Duration            = duration;
     Length              = length;
     Thumb               = thumb;
     ReplyToMessageId    = replyToMessageId;
     DisableNotification = disableNotification;
     ReplyMarkup         = replyMarkup;
     ChatId              = chatId;
 }
Esempio n. 3
0
        public void Should_Serialize_Input_File_File_Id()
        {
            const string      fileId    = "This-is-a-file_id";
            InputTelegramFile inputFile = fileId;

            string            json = JsonSerializer.Serialize(inputFile, new JsonSerializerOptions(JsonSerializerDefaults.Web));
            InputTelegramFile obj  = JsonSerializer.Deserialize <InputTelegramFile>(json, new JsonSerializerOptions(JsonSerializerDefaults.Web));

            Assert.Equal($@"""{fileId}""", json);
            Assert.Equal(fileId, obj.FileId);
            Assert.Equal(FileType.Id, obj.FileType);
            Assert.Null(obj.Content);
            Assert.Null(obj.FileName);
        }
Esempio n. 4
0
        public void Should_Serialize_Input_File_File_Id()
        {
            const string      fileId    = "This-is-a-file_id";
            InputTelegramFile inputFile = fileId;

            string            json = JsonConvert.SerializeObject(inputFile);
            InputTelegramFile obj  = JsonConvert.DeserializeObject <InputTelegramFile>(json);

            Assert.Equal($@"""{fileId}""", json);
            Assert.Equal(fileId, obj.FileId);
            Assert.Equal(FileType.Id, obj.FileType);
            Assert.Null(obj.Content);
            Assert.Null(obj.FileName);
        }
Esempio n. 5
0
        private void VideoNoteReceived(MessageEventArgs e, string filetoobig, out string fileName, string baseUrl)
        {
            WebClient wc = new WebClient();

            fileName = "";

            if (e.Message.VideoNote.FileSize > 20_971_520)
            {
                // Отсылаем отправителю сообщение, что файл слишком большой
                // У себя это сообщение не храним, т.к. мы ничего не получили
                bot.SendTextMessageAsync(e.Message.Chat.Id, filetoobig);
                return;
            }
            else
            {
                // Получаем имя и расширение файла
                // Для этого делаем запрос, т.к. в e.Message этой инфы нет,
                // только для файлов типа Document.
                JObject fileInfo = JObject.Parse(wc.DownloadString(baseUrl + e.Message.VideoNote.FileId));

                // Создаём уникальное имя файла
                string fileExt = (string)System.IO.Path.GetExtension((string)fileInfo["result"]["file_path"]);
                fileName = e.Message.VideoNote.FileUniqueId + fileExt;

                // скачиваем файл на диск
                DownloadFile(e.Message.VideoNote.FileId, fileName);

                // Пишем в ленту, что получили файл
                e.Message.Text = $"Видео сообщение сохранено в файл {fileName}\n" +
                                 $"Размер: {e.Message.VideoNote.FileSize:##,# байт}";
                IncomingTextMessageProcessor(e);

                // Отсылаем файл назад
                InputTelegramFile itf = new InputTelegramFile(e.Message.VideoNote.FileId);
                bot.SendVideoNoteAsync(e.Message.Chat.Id, itf);
            }
        }
 /// <summary>
 /// Initializes a new request with chatId and video note
 /// </summary>
 /// <param name="chatId">Unique identifier for the target chat or username of the target channel</param>
 /// <param name="videoNote">Video note to send</param>
 public SendVideoNoteRequest(ChatId chatId, InputTelegramFile videoNote)
     : base("sendVideoNote")
 {
     ChatId    = chatId;
     VideoNote = videoNote;
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="chatId"></param>
 /// <param name="videoNote"></param>
 /// <param name="duration"></param>
 /// <param name="length"></param>
 /// <param name="disableNotification"></param>
 /// <param name="replyToMessageId"></param>
 /// <param name="replyMarkup"></param>
 /// <param name="cancellationToken"></param>
 /// <param name="thumb"></param>
 /// <returns></returns>
 public Task <Message> SendVideoNoteAsync(ChatId chatId, InputTelegramFile videoNote, int duration = 0, int length = 0, bool disableNotification = false, int replyToMessageId = 0, IReplyMarkup replyMarkup = null, CancellationToken cancellationToken = default, InputMedia thumb = null)
 {
     return(Client.SendVideoNoteAsync(chatId, videoNote, duration, length, disableNotification, replyToMessageId, replyMarkup, cancellationToken, thumb));
 }
Esempio n. 8
0
        private void MessageListener(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            WebClient       wc       = new WebClient();
            string          baseUrl  = $@"https://api.telegram.org/bot{token}/getFile?file_id=";
            string          fileName = "";
            string          fileExt  = "";
            JObject         fileInfo;
            InputOnlineFile iof;

            // собираем адресную книгу. Это для 10 домашнего задания
            if (NotInContactList(e.Message.Chat.Id))
            {
                contactList.Add(e.Message.Chat.Id);
            }

            if (e.Message.Type == MessageType.Text)
            {
                TextMessageProcessor(sender, e);
                return;
            }
            else
            {
                switch (e.Message.Type)
                {
                // Всяческие файлы, включая отдельные фото(!), которые пересылают, как файлы
                case MessageType.Document:

                    if (e.Message.Document.FileSize > 20_971_520)
                    {
                        // Выдаём в чат сообщение о невозможности скачать файл
                        e.Message.Text = $"К сожалению, сейчас Телеграм бот не может передавать файлы " +
                                         "размером больше 20 Мб.";
                    }
                    else
                    {
                        DownloadFile(e.Message.Document.FileId, e.Message.Document.FileName);
                        e.Message.Text = $"{e.Message.Document.FileName}\n" +
                                         $"Размер: {e.Message.Document.FileSize:##,# bytes}";

                        fileName = e.Message.Document.FileName;
                        // Отсылаем файл назад
                        iof = new InputOnlineFile(e.Message.Document.FileId);
                        bot.SendDocumentAsync(e.Message.Chat.Id, iof);
                    }
                    break;

                case MessageType.Photo:

                    PhotoSize photo = e.Message.Photo[2];
                    if (photo.FileSize > 20_971_520)
                    {
                        // Выдаём в чат сообщение о невозможности скачать файл
                        e.Message.Text = $"К сожалению, сейчас Телеграм бот не может передавать файлы " +
                                         "размером больше 20 Мб.";
                    }
                    else
                    {
                        fileInfo = JObject.Parse(wc.DownloadString(baseUrl + photo.FileId));

                        // Создаём уникальное имя файла
                        fileExt  = System.IO.Path.GetExtension((string)fileInfo["result"]["file_path"]);
                        fileName = photo.FileUniqueId + fileExt;

                        // скачиваем файл на диск
                        DownloadFile(photo.FileId, fileName);

                        // Выдаём в чат сообщение о полученном файле
                        e.Message.Text = $"Фото сохранено в файле {fileName}\n" +
                                         $"Размер: {photo.FileSize:##,# байт}";

                        // Отсылаем файл назад
                        iof = new InputOnlineFile(photo.FileId);
                        bot.SendPhotoAsync(e.Message.Chat.Id, iof);
                    }
                    break;

                case MessageType.Audio:

                    if (e.Message.Audio.FileSize > 20_971_520)
                    {
                        // Выдаём в чат сообщение о невозможности скачать файл
                        e.Message.Text = $"К сожалению, сейчас Телеграм бот не может передавать файлы " +
                                         "размером больше 20 Мб.";
                    }
                    else
                    {
                        fileInfo = JObject.Parse(wc.DownloadString(baseUrl + e.Message.Audio.FileId));

                        // Пытаемся создать нормальное и в то же время уникальное имя файла
                        fileExt  = System.IO.Path.GetExtension((string)fileInfo["result"]["file_path"]);
                        fileName = e.Message.Audio.Title + "_" +
                                   e.Message.Audio.Performer + "_" +
                                   e.Message.Audio.FileUniqueId +
                                   fileExt;

                        // скачиваем файл на диск
                        DownloadFile(e.Message.Audio.FileId, fileName);

                        // Выдаём в чат сообщение о полученном файле
                        e.Message.Text = $"Аудио файл {fileName}\n" +
                                         $"Размер: {e.Message.Audio.FileSize:##,# байт}";

                        // Отсылаем файл назад
                        iof = new InputOnlineFile(e.Message.Audio.FileId);
                        bot.SendAudioAsync(e.Message.Chat.Id, iof);
                    }
                    break;

                case MessageType.Voice:

                    if (e.Message.Voice.FileSize > 20_971_520)
                    {
                        // Выдаём в чат сообщение о невозможности скачать файл
                        e.Message.Text = $"К сожалению, сейчас Телеграм бот не может передавать файлы " +
                                         "размером больше 20 Мб.";
                    }
                    else
                    {
                        fileInfo = JObject.Parse(wc.DownloadString(baseUrl + e.Message.Voice.FileId));

                        // Создаём уникальное имя файла
                        fileExt  = System.IO.Path.GetExtension((string)fileInfo["result"]["file_path"]);
                        fileName = e.Message.Voice.FileUniqueId + fileExt;

                        // скачиваем файл на диск
                        DownloadFile(e.Message.Voice.FileId, fileName);

                        // Выдаём в чат сообщение о полученном файле
                        e.Message.Text = $"Голосовое сообщение сохранено в файле {fileName}\n" +
                                         $"Размер: {e.Message.Voice.FileSize:##,# байт}";

                        // Отсылаем файл назад
                        iof = new InputOnlineFile(e.Message.Voice.FileId);
                        bot.SendVoiceAsync(e.Message.Chat.Id, iof);
                    }
                    break;

                case MessageType.Video:

                    if (e.Message.Video.FileSize > 20_971_520)
                    {
                        // Выдаём в чат сообщение о невозможности скачать файл
                        e.Message.Text = $"К сожалению, сейчас Телеграм бот не может передавать файлы " +
                                         "размером больше 20 Мб.";
                    }
                    else
                    {
                        fileInfo = JObject.Parse(wc.DownloadString(baseUrl + e.Message.Video.FileId));

                        // Создаём уникальное имя файла
                        fileExt  = System.IO.Path.GetExtension((string)fileInfo["result"]["file_path"]);
                        fileName = e.Message.Video.FileUniqueId + fileExt;

                        // скачиваем файл на диск
                        DownloadFile(e.Message.Video.FileId, fileName);

                        // Выдаём в чат сообщение о полученном файле
                        e.Message.Text = $"Видео файл {fileName}\n" +
                                         $"Размер: {e.Message.Video.FileSize:##,# байт}";

                        // Отсылаем файл назад
                        iof = new InputOnlineFile(e.Message.Video.FileId);
                        bot.SendVideoAsync(e.Message.Chat.Id, iof);
                    }
                    break;

                case MessageType.VideoNote:

                    if (e.Message.VideoNote.FileSize > 20_971_520)
                    {
                        // Выдаём в чат сообщение о невозможности скачать файл
                        e.Message.Text = $"К сожалению, сейчас Телеграм бот не может передавать файлы " +
                                         "размером больше 20 Мб.";
                    }
                    else
                    {
                        fileInfo = JObject.Parse(wc.DownloadString(baseUrl + e.Message.VideoNote.FileId));

                        // Создаём уникальное имя файла
                        fileExt  = System.IO.Path.GetExtension((string)fileInfo["result"]["file_path"]);
                        fileName = e.Message.VideoNote.FileUniqueId + fileExt;

                        // скачиваем файл на диск
                        DownloadFile(e.Message.VideoNote.FileId, fileName);

                        // Выдаём в чат сообщение о полученном файле
                        e.Message.Text = $"Видео сообщение сохранено в файл {fileName}\n" +
                                         $"Размер: {e.Message.VideoNote.FileSize:##,# байт}";

                        // Отсылаем файл назад
                        InputTelegramFile itf = new InputTelegramFile(e.Message.VideoNote.FileId);
                        bot.SendVideoNoteAsync(e.Message.Chat.Id, itf);
                    }
                    break;

                case MessageType.Sticker:

                    if (e.Message.Sticker.FileSize > 20_971_520)
                    {
                        // Выдаём в чат сообщение о невозможности скачать файл
                        e.Message.Text = $"К сожалению, сейчас Телеграм бот не может передавать файлы " +
                                         "размером больше 20 Мб.";
                    }
                    else
                    {
                        fileInfo = JObject.Parse(wc.DownloadString(baseUrl + e.Message.Sticker.FileId));

                        // Пытаемся создать нормальное и в то же время уникальное имя файла
                        fileExt  = System.IO.Path.GetExtension((string)fileInfo["result"]["file_path"]);
                        fileName = e.Message.Sticker.Emoji + "_" +
                                   e.Message.Sticker.SetName + "_" +
                                   e.Message.Sticker.FileUniqueId +
                                   fileExt;

                        // скачиваем файл на диск
                        DownloadFile(e.Message.Sticker.FileId, fileName);

                        // Выдаём в чат сообщение о полученном файле
                        e.Message.Text = $"Стикер сохранён в файл {fileName}\n" +
                                         $"Размер: {e.Message.Sticker.FileSize:##,# байт}";

                        // Отсылаем файл назад
                        iof = new InputOnlineFile(e.Message.Sticker.FileId);
                        bot.SendStickerAsync(e.Message.Chat.Id, iof);
                    }
                    break;

                // Cообщения других типов игнорируем
                default:
                    return;
                }
            }
            TextMessageProcessor(sender, e);
            w.Dispatcher.Invoke(() =>
            {
                messagesRoll.Add(new Message()
                {
                    ChatID    = e.Message.Chat.Id,
                    FromTo    = "Bot answer to " + e.Message.From.Username,
                    UserName  = e.Message.From.Username,
                    Type      = e.Message.Type.ToString(),
                    Text      = "Возвращаем файл\n" + fileName,
                    MessageDT = DateTime.Now
                });

                // Прокручиваем список, чтобы был виден его последний элемент
                // Пример нашёл в инете
                var border       = (Border)VisualTreeHelper.GetChild(w.MessagesRoll, 0);
                var scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
                scrollViewer.ScrollToBottom();
            });
        }