Beispiel #1
0
        public static AttachmentTelegram AddAttachmentTelegram(int AttachFsId, int BotId, string FileId)
        {
            MarketBotDbContext db = new MarketBotDbContext();

            try
            {
                AttachmentTelegram attachment = new AttachmentTelegram
                {
                    AttachmentFsId = AttachFsId,
                    FileId         = FileId,
                    BotInfoId      = BotId,
                };

                db.AttachmentTelegram.Add(attachment);
                db.SaveChanges();
                return(attachment);
            }

            catch
            {
                return(null);
            }

            finally
            {
                db.Dispose();
            }
        }
Beispiel #2
0
        private AttachmentTelegram InsertAttachment(int AttachemntFsID, string FileID)
        {
            try
            {
                using (MarketBotDbContext db = new MarketBotDbContext())
                {
                    if (AttachemntFsID > 0 && FileID != null)
                    {
                        AttachmentTelegram attachment = new AttachmentTelegram
                        {
                            AttachmentFsId = AttachemntFsID,
                            BotInfoId      = BotInfo.Id,
                            FileId         = FileID
                        };

                        db.AttachmentTelegram.Add(attachment);
                        db.SaveChanges();
                        return(attachment);
                    }

                    else
                    {
                        return(null);
                    }
                }
            }

            catch
            {
                return(null);
            }
        }
        /// <summary>
        /// Добавить доп фото
        /// </summary>
        /// <returns></returns>
        private async Task <IActionResult> InsertAdditionallyPhoto()
        {
            AttachmentTelegram TgAttach = null;

            int ProductId = ProductGet(ProductAdditionallyPhotoReply);

            ProductFunction = new ProductFunction();

            var ProductPhoto = ProductFunction.InsertAdditionallPhoto(ProductId, await base.GetFileAsync(base.PhotoId), base.Caption);

            if (ProductPhoto != null && base.PhotoId != null)
            {
                TgAttach = AttachmentTelegramFunction.AddAttachmentTelegram(ProductPhoto.AttachmentFsId, BotInfo.Id, base.PhotoId);
            }

            var product = ProductFunction.GetProduct(ProductId);

            ProductFunction.Dispose();

            if (ProductPhoto != null && ProductPhoto.AttachmentFsId > 0 && TgAttach != null && TgAttach.Id > 0)
            {
                await SendMessage(new BotMessage { TextMessage = "Добавлено" });
            }

            return(await SendProductFunc(product));
        }
Beispiel #4
0
        /// <summary>
        /// Обновить фотографию
        /// </summary>
        /// <returns></returns>
        private async Task <IActionResult> UpdateProductPhoto()
        {
            using (MarketBotDbContext db = new MarketBotDbContext())
            {
                var    product  = db.Product.Where(p => p.Id == ProductGet(ProductEditPhotoReply)).FirstOrDefault();
                string NewPhoto = base.PhotoId;

                int fs_id = await base.InsertToAttachmentFs(base.PhotoId);

                ProductPhoto productPhoto = new ProductPhoto
                {
                    AttachmentFsId = fs_id,
                    ProductId      = product.Id
                };

                AttachmentTelegram attachment = new AttachmentTelegram
                {
                    AttachmentFsId = fs_id,
                    FileId         = base.PhotoId,
                    BotInfoId      = BotInfo.Id,
                };

                db.ProductPhoto.Add(productPhoto);
                db.AttachmentTelegram.Add(attachment);
                db.SaveChanges();

                return(await SendProductFunc(product));
            }
        }
        /// <summary>
        /// Вставить данные о файл в таблицу AttachmentTelegram.
        /// </summary>
        /// <param name="mediaFile">Класс описывающий файл. FileId там должен быть пустой, это значит что для этого бота файл отпралвяется впервые.
        /// Для этого мы и записываем информацию в таблицу Attachment, что бы постоянно не отправлять этот файл целиков а только FileId на серевере телеграм</param>
        /// <param name="FileId"></param>
        /// <returns></returns>
        protected int InsertToAttachmentTelegram(MediaFile mediaFile, string FileId)
        {
            try
            {
                if (mediaFile.AttachmentFsId > 0 && FileId != "")
                {
                    using (Db.BotMngmntDbContext db = new Db.BotMngmntDbContext())
                    {
                        var Attach = db.AttachmentTelegram.Where(a => a.AttachmentFsId == mediaFile.AttachmentFsId && a.BotInfoId == BotInfo.Id).FirstOrDefault();

                        if (Attach == null)
                        {
                            AttachmentTelegram attachment = new AttachmentTelegram
                            {
                                AttachmentFsId = mediaFile.AttachmentFsId,
                                FileId         = FileId,
                                BotInfoId      = BotInfo.Id,
                            };

                            db.AttachmentTelegram.Add(attachment);
                            db.SaveChanges();
                            return(attachment.Id);
                        }

                        if (Attach != null && Attach.FileId == null)
                        {
                            Attach.FileId = FileId;
                            db.SaveChanges();
                            return(Attach.Id);
                        }

                        else
                        {
                            return(-1);
                        }
                    }
                }

                else
                {
                    return(-1);
                }
            }

            catch
            {
                return(-1);
            }
        }
        /// <summary>
        /// Вставить данные о файл в таблицу AttachmentTelegram.
        /// Что бы постоянно не отправлять этот файл целиком а только FileId на серевере телеграм
        /// </summary>
        /// <param name="FileId"></param>
        /// <param name="AttachmentFsId"></param>
        /// <returns></returns>
        protected int InsertToAttachmentTelegram(string FileId, int AttachmentFsId)
        {
            using (Db.BotMngmntDbContext db = new Db.BotMngmntDbContext())
            {
                AttachmentTelegram attachmentTelegram = new AttachmentTelegram
                {
                    AttachmentFsId = AttachmentFsId,
                    FileId         = FileId,
                    BotInfoId      = BotInfo.Id
                };

                db.AttachmentTelegram.Add(attachmentTelegram);

                return(db.SaveChanges());
            }
        }
Beispiel #7
0
        /// <summary>
        /// Провереям какие файлы пытается прикрепить к заявке пользователь
        /// </summary>
        /// <returns></returns>
        private async Task <int> CheckAttach()
        {
            AttachmentTelegram attachment = new AttachmentTelegram();

            using (MarketBotDbContext db = new MarketBotDbContext())
            {
                if (base.FileId != null && base.FileId != "")
                {
                    await SendMessage(new BotMessage { TextMessage = "Можно прикреплять только Фото, Аудио, Видео" });

                    return(-1);
                }

                if (base.PhotoId != null)
                {
                    return(await base.InsertToAttachmentFs(base.PhotoId));
                }

                if (base.VideoId != null)
                {
                    return(await base.InsertToAttachmentFs(base.VideoId));
                }

                if (base.AudioId != null)
                {
                    return(await base.InsertToAttachmentFs(base.AudioId));
                }

                if (base.VoiceId != null)
                {
                    return(await base.InsertToAttachmentFs(base.VoiceId));
                }

                if (base.VideoNoteId != null)
                {
                    return(await base.InsertToAttachmentFs(base.VideoNoteId));
                }


                else
                {
                    return(-1);
                }
            }
        }
Beispiel #8
0
        private MediaFile GetMediaFile(AttachmentTelegram telegram_attach)
        {
            try
            {
                if (telegram_attach != null & telegram_attach.FileId != null) // файл уже загруже на сервер телеграм
                {
                    MediaFile = new MediaFile
                    {
                        FileTo = new Telegram.Bot.Types.FileToSend {
                            FileId = telegram_attach.FileId, Filename = "File"
                        },
                        Caption    = db.AttachmentFs.Where(a => a.Id == telegram_attach.AttachmentFsId).FirstOrDefault().Caption,
                        FileTypeId = Convert.ToInt32(db.AttachmentFs.Where(a => a.Id == telegram_attach.AttachmentFsId).FirstOrDefault().AttachmentTypeId)
                    };

                    return(MediaFile);
                }
                else
                {
                    var fs = db.AttachmentFs.Where(a => a.Id == telegram_attach.AttachmentFsId).FirstOrDefault();

                    MediaFile = new MediaFile
                    {
                        FileTo = new Telegram.Bot.Types.FileToSend
                        {
                            Content  = new System.IO.MemoryStream(fs.Fs),
                            Filename = "File"
                        },
                        Caption = fs.Name,

                        AttachmentFsId = Convert.ToInt32(fs.Id),
                        FileTypeId     = Convert.ToInt32(fs.AttachmentTypeId)
                    };

                    return(MediaFile);
                }
            }

            catch (Exception e)
            {
                return(null);
            }
        }
        private Bot.MediaFile GetMediaFile(MarketBotDbContext db, AttachmentTelegram telegram_attach)
        {
            try
            {
                if (telegram_attach != null & telegram_attach.FileId != null)
                {
                    MediaFile = new Bot.MediaFile
                    {
                        FileTo = new Telegram.Bot.Types.FileToSend {
                            FileId = telegram_attach.FileId, Filename = "File"
                        },
                        Caption    = db.AttachmentFs.Where(a => a.Id == telegram_attach.AttachmentFsId).FirstOrDefault().Caption,
                        TypeFileTo = Bot.MediaFile.HowMediaType(db.AttachmentFs.Where(a => a.Id == telegram_attach.AttachmentFsId).FirstOrDefault().AttachmentTypeId)
                    };

                    return(MediaFile);
                }
                else
                {
                    var fs = db.AttachmentFs.Where(a => a.Id == telegram_attach.AttachmentFsId).FirstOrDefault();

                    MediaFile = new Bot.MediaFile
                    {
                        FileTo = new Telegram.Bot.Types.FileToSend
                        {
                            Content  = new System.IO.MemoryStream(fs.Fs),
                            Filename = "File"
                        },
                        Caption        = fs.Name,
                        TypeFileTo     = Bot.MediaFile.HowMediaType(fs.AttachmentTypeId),
                        AttachmentFsId = Convert.ToInt32(fs.Id)
                    };

                    return(MediaFile);
                }
            }

            catch (Exception e)
            {
                return(null);
            }
        }
        /// <summary>
        /// Вытаскивам с сервера телеграм этот файл и записываем его в БД бота. Нам нужно хранить эти файлы, т.к если бота заблокируют или
        /// мы подключим допольнительных ботов, то мы не сможем отправить FileId другого бота. Поэтому мы храним в бд эти файлы
        /// </summary>
        /// <param name="id">FileId файл на сервере телеграм</param>
        /// <returns>Возращает id записи из таблицы AttachmentFS</returns>
        protected async Task <int> InsertToAttachmentFs(string id = null, string Caption = "")
        {
            if (id == null)
            {
                id = FileId;
            }
            Db.BotMngmntDbContext db = new Db.BotMngmntDbContext();

            try
            {
                var file = await TelegramClient.GetFileAsync(id);

                System.IO.MemoryStream memoryStream = new System.IO.MemoryStream();

                await file.FileStream.CopyToAsync(memoryStream);

                // Довавбляем в БД
                AttachmentFs attachmentFs = new AttachmentFs
                {
                    Fs               = memoryStream.ToArray(),
                    GuId             = Guid.NewGuid(),
                    Caption          = Caption,
                    AttachmentTypeId = MediaFileTypeId
                };

                db.AttachmentFs.Add(attachmentFs);

                int type = HowMediaType(Update.Message); // узнаем какой типа файла. Фото, Аудио и тд

                //Когда оператора будет смотреть заявку через того же бота, через коготого пользователь
                //оформлял заявку, мы отправим ему ID файла на сервере телеграм вместо целой картинки. Это будет быстрее.
                //А если оператор будет смотреть заявку из другого бота (например старого удалят), то мы сможем отрпавить файл картинки

                //максимальный размер файла 15 мб
                if (file != null && file.FileSize <= 15 * 1024 * 1024 && memoryStream != null && await db.SaveChangesAsync() > 0 && type > 0)
                {
                    AttachmentTelegram attachment = new AttachmentTelegram();
                    attachment.FileId         = id;
                    attachment.AttachmentFsId = attachmentFs.Id;
                    attachment.BotInfoId      = BotInfo.Id;

                    db.AttachmentTelegram.Add(attachment);

                    if (await db.SaveChangesAsync() > 0)
                    {
                        return(Convert.ToInt32(attachment.AttachmentFsId));
                    }

                    else
                    {
                        return(-1);
                    }
                }

                if (file.FileSize > 15 * 1024 * 1024)
                {
                    await SendMessage(new BotMessage { TextMessage = "Ошибка. Файл не может быть больше 15 мб!" });

                    return(-1);
                }

                else
                {
                    return(-1);
                }
            }


            catch (Exception exp)
            {
                return(-1);
            }

            finally
            {
                db.Dispose();
            }
        }