/// <summary> /// Информация о боте /// </summary> /// <returns></returns> private BotInfo GetBotInfo() { try { BotInfo bot = new BotInfo(); using (Db.BotMngmntDbContext db = new Db.BotMngmntDbContext()) { bot = db.BotInfo.Where(b => b.Name == BusinessLayer.GeneralFunction.BotName()).Include(b => b.Configuration).FirstOrDefault(); if (bot != null) { this.BotOwner = Convert.ToInt32(bot.OwnerChatId); return(bot); } else { return(db.BotInfo.FirstOrDefault()); } } } catch (Exception e) { return(null); } }
/// <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); } }
protected Configuration GetConfigurationBot(int BotId) { try { using (Db.BotMngmntDbContext db = new Db.BotMngmntDbContext()) { return(db.Configuration.Where(c => c.BotInfoId == BotId).FirstOrDefault()); } } catch (Exception exp) { return(null); } }
/// <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()); } }
public override BotMessage BuildMsg() { DbContext = new Db.BotMngmntDbContext(); BotList = DbContext.Bot.Where(b => b.Visable && b.FollowerId == FollowerId && !b.Deleted).ToList(); DbContext.Dispose(); base.TextMessage = "Мои боты"; if (BotList.Count > 0) { BotBtns = new InlineKeyboardCallbackButton[BotList.Count + 1][]; int count = 0; foreach (var bot in BotList) { BotBtns[count] = new InlineKeyboardCallbackButton[1]; if (!bot.Blocked) { BotBtns[count][0] = BuildInlineBtn(bot.BotName, BuildCallData(ConnectBot.GetBotCmd, ConnectBot.ModuleName, bot.Id)); } else { BotBtns[count][0] = BuildInlineBtn(bot.BotName + " (Заблокирован)", BuildCallData(ConnectBot.GetBotCmd, ConnectBot.ModuleName, bot.Id)); } count++; } BotBtns[BotBtns.Length - 1] = new InlineKeyboardCallbackButton[1]; BotBtns[BotBtns.Length - 1][0] = BuildInlineBtn("Назад", BuildCallData(MainMenuBot.ToMainMenuCmd, MainMenuBot.ModuleName)); base.MessageReplyMarkup = new InlineKeyboardMarkup(BotBtns); return(this); } else { return(null); } }
/// <summary> /// id пользователя в в БД /// </summary> /// <param name="ChatId"></param> /// <returns></returns> private int GetFollowerID(long ChatId) { int id = 0; try { using (Db.BotMngmntDbContext db = new Db.BotMngmntDbContext()) { var follower = db.Follower.Where(f => f.ChatId == Convert.ToInt32(ChatId)).FirstOrDefault(); if (follower != null) { id = follower.Id; } } } catch (Exception exp) { } return(id); }
/// <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(); } }