public static string GetSubscribersStatistics(Db db, TelegramChannel channel) { List <StatisticsChannel> statChanList = (from s in db.StatisticsChannels where s.TelegramId == channel.TelegramId select s)?.ToList() ?? new List <StatisticsChannel>(); if (statChanList.Count == 0) { return("Нет данных!"); } string res = $"Представлены данные на {statChanList.Last().CreateTime}\n\n" + $"Cтатистика подписок на канал:\n"; res += $"|Дата |Подписки\n"; for (var i = 0; i < statChanList.Count; i++) { var stat = statChanList[i]; int subChange = i > 0 ? stat.SubscribersCount - statChanList[i - 1].SubscribersCount : stat.SubscribersCount; string change = subChange > -1 ? $"+{subChange}" : subChange.ToString(); res += $"|{stat.CreateTime.ToString(),-25}|{change}\n"; } return(res); }
/// <summary> /// Добавить сущность TelegramPost в базу без проверки на наличие. /// </summary> /// <param name="db"></param> /// <param name="channel"></param> /// <param name="post"></param> /// <returns></returns> public static TelegramPost AddTelegramPostToDb(Db db, TelegramChannel channel, TLMessage post) { //Добавить в базу сущность TelegramPost TelegramPost newPost = new TelegramPost() { ChannelTelegramId = channel.TelegramId, ChannelUsername = channel.Username, TelegramId = post.Id, WriteTime = Const.StartDate.AddSeconds(post.Date), Content = post.Message ?? (post?.Media as TLMessageMediaPhoto)?.Caption ?? null, }; if (post?.EditDate != null) { newPost.EditTime = Const.StartDate.AddSeconds((long)post.EditDate); } else { newPost.EditTime = Const.StartDate.AddSeconds((long)post.Date); } db.TelegramPosts.Add(newPost); db.SaveChanges(); return(newPost); }
public async Task <IActionResult> Edit(int id, [Bind("ChannelId,IntervalMins")] TelegramChannel telegramChannel) { if (id != telegramChannel.ChannelId) { return(NotFound()); } try { var channel = _context.Channels.Where(c => c.ChannelId == telegramChannel.ChannelId).FirstOrDefault(); _context.Update(channel); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!TelegramChannelExists(telegramChannel.ChannelId)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Edit), new { id = telegramChannel.ChannelId })); }
/// <summary> /// Обработка команды ShowStat /// </summary> /// <param name="command"></param> private void CommandShowStat(Command command) { string channelName = command.GetParam("name"); if (string.IsNullOrWhiteSpace(channelName)) { Debug.Error("Введите параметр [username=ChannelName]!"); return; } using (Db db = new Db(HelperDatabase.DB_OPTIONS)) { TelegramChannel channel = DbMethods.GetChannelFromDb(db, channelName); if (channel == null) { Debug.Error($"В базе данных нет канала [{channelName}]"); return; } //Получить статистику по подписчикам string subsStat = DbMethods.GetSubscribersStatistics(db, channel); string postStat = DbMethods.GetViewsStatistics(db, channel); Debug.Log($"\n{subsStat}\n\n{postStat}\n"); } }
/// <summary> /// Добавить сущность TelegramChannel (проверка на наличие в базе) /// </summary> /// <param name="db"></param> /// <param name="channel"></param> /// <returns></returns> public static TelegramChannel AddTelegramChannelIfNeed(Db db, Channel channel) { TelegramChannel chan = GetTelegramChannelByTelegramId(db, channel.IdChannel); if (Equals(chan, null)) { return(AddTelegramChannelToDb(db, channel)); } return(chan); }
/// <summary> /// Добавить сущность TelegramPost (Проверка на наличие в базе) /// </summary> /// <param name="db"></param> /// <param name="channel"></param> /// <param name="post"></param> /// <returns></returns> public static TelegramPost AddTelegramPostIfNeed(Db db, TelegramChannel channel, TLMessage post) { var p = GetTelegramPostByTelegramId(db, channel.TelegramId, post.Id); if (Equals(p, null)) { return(AddTelegramPostToDb(db, channel, post)); } return(p); }
/// <summary> /// Добавить сущность StatisticsPost в базу данных /// </summary> /// <param name="db"></param> /// <param name="channel"></param> /// <param name="post"></param> public static void AddStatisticsPostToDb(Db db, TelegramChannel channel, TLMessage post) { StatisticsPost postStat = new StatisticsPost() { TelegramId = post.Id, ChannelUsername = channel.Username, ViewCount = post.Views ?? 0, ChannelTelegramId = channel.TelegramId, }; db.StatisticsPosts.Add(postStat); db.SaveChanges(); }
/// <summary> /// Добавить сущность TelegramChannel без проверки на наличие /// </summary> /// <param name="db"></param> /// <param name="channel"></param> /// <returns></returns> public static TelegramChannel AddTelegramChannelToDb(Db db, Channel channel) { TelegramChannel newChannel = new TelegramChannel() { Description = channel.Description, Status = Const.TELEGRAM_CHANNEL_STATUS_ACTIVE, TelegramId = channel.IdChannel, Username = channel.ChannelName, }; db.TelegramChannels.Add(newChannel); db.SaveChanges(); return(newChannel); }
private static void LaunchOscovaBot() { var telegramChannel = new TelegramChannel <OscovaBot>(TelegramAccessToken, new OscovaBot()); telegramChannel.Bot.Dialogs.Add(new HelloBotDialog()); telegramChannel.Bot.Trainer.StartTraining(); telegramChannel.Client.StartReceiving(); OscovaBot.Logger.LogReceived += (sender, args) => { Console.WriteLine(args); }; Console.WriteLine("OSCOVA Bot is now Online."); Console.WriteLine("Type \"Hello Bot\" in your Telegram client to check response."); Console.ReadLine(); telegramChannel.Client.StopReceiving(); }
private static void LaunchSimlBot() { var telegramChannel = new TelegramChannel <SimlBot>(TelegramAccessToken, new SimlBot()); const string kbFilePath = "SimlKB.simlpk"; telegramChannel.Bot.PackageManager.LoadFromString(File.ReadAllText(kbFilePath)); telegramChannel.Client.StartReceiving(); SimlBot.Logger.LogReceived += (sender, args) => { Console.WriteLine(args); }; Console.WriteLine("SIML Bot is now Online."); Console.ReadLine(); telegramChannel.Client.StopReceiving(); }
public async Task <IActionResult> Create([Bind("ChannelId,ChannelUserName,HasContainFilter,IntervalMins")] TelegramChannel telegramChannel) { if (ModelState.IsValid) { try { TelegramCollector.mustwait = true; TelegramCollector.mustwaittilme = 15000; Thread.Sleep(5000); var channel = TelegramClientManager.GetTChannelbyUsername(telegramChannel.ChannelUserName); if (channel == null) { return(RedirectToAction(nameof(Index))); } Thread.Sleep(8000); NewsConcentratorSystem.NewsScraper.TelegramClientManager .JoinChannel(telegramChannel.ChannelUserName) .Wait(); //Insert Entity in DB telegramChannel.ChannelChatID = channel.Id.ToString(); telegramChannel.AccessHash = channel.AccessHash.ToString(); telegramChannel.ChannelUserName = channel.Username; telegramChannel.ChannelTitle = channel.Title; _context.Add(telegramChannel); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } catch (Exception e) { Console.WriteLine(e); return(NotFound()); } } return(View(telegramChannel)); }
public static string GetViewsStatistics(Db db, TelegramChannel channel) { string res = null; StatisticsChannel lastChannelStat = (from c in db.StatisticsChannels where c.TelegramId == channel.TelegramId select c)?.ToList().LastOrDefault() ?? null; if (lastChannelStat == null) { return("Нет статистики по каналу"); } List <TelegramPost> postList = (from p in db.TelegramPosts where p.ChannelTelegramId == channel.TelegramId select p)?.ToList() ?? new List <TelegramPost>(); List <StatisticsPost> postStatList = (from s in db.StatisticsPosts where s.ChannelTelegramId == channel.TelegramId select s)?.ToList() ?? new List <StatisticsPost>(); if (postList.Count == 0 || postStatList.Count == 0) { return("Нет статистики о постах!"); } Dictionary <long, TelegramPost> allPosts = new Dictionary <long, TelegramPost>(); foreach (var item in postList) { allPosts.Add(item.TelegramId, item); } Dictionary <long, StatisticsPost> lastStat = new Dictionary <long, StatisticsPost>(); foreach (var item in postStatList) { if (lastStat.ContainsKey(item.TelegramId)) { lastStat[item.TelegramId] = item; } else { lastStat.Add(item.TelegramId, item); } } long averagePostViewAllTime = GetAveragePostViewOnLastDays(lastStat, allPosts); long averagePostView30 = GetAveragePostViewOnLastDays(lastStat, allPosts, 30); long averagePostView7 = GetAveragePostViewOnLastDays(lastStat, allPosts, 7); long averagePostView3 = GetAveragePostViewOnLastDays(lastStat, allPosts, 3); res += $"Статистика постов:\n\n" + $"В базе есть статистика по последним {postList.Count} постам\n\n" + $"Среднее количество просмотров на каждый пост за последние:\n" + $"По всем данным : {averagePostViewAllTime} просмотр/пост.\n" + $" 30 дн. : {averagePostView30} просмотр/пост.\n" + $" 7 дн. : {averagePostView7} просмотр/пост.\n" + $" 3 дн. : {averagePostView3} просмотр/пост.\n\n" + $" На данный момент ER (за 30 дн.) = {((float)averagePostView30 / (float) lastChannelStat.SubscribersCount) * 100}%"; return(res); }
private static void Main() { try { OscovaBot.Logger.LogLevelThreshold = LogLevel.Info; var telegramChannel = new TelegramChannel <OscovaBot>("TELEGRAM_BOT_TOKEN", OscovaBot.Instance); WebApiChannel = new WebApiChannel <OscovaBot>(OscovaBot.Instance, "HOST_ADDRESS"); Action <LogReceivedEventArgs> logAction = receivedEventArgs => { File.AppendAllText(LogFilePath, receivedEventArgs.Log.ToString() + Environment.NewLine); Console.WriteLine(receivedEventArgs.Log); }; Logger.LogReceived += (sender, receivedEventArgs) => { logAction.Invoke(receivedEventArgs); }; telegramChannel.Logger.LogReceived += (sender, args) => { logAction.Invoke(args); }; WebApiChannel.Logger.LogReceived += (sender, args) => { logAction.Invoke(args); }; LogEvent("Start Saga Bot"); Logger.Info("Initializing Saga Bot..."); Bot.Configuration.RequiredRecognizersOnly = true; Bot.Configuration.RemoveContextOnFallback = false; Bot.Configuration.ContextLifespan = 1; Bot.Configuration.Scoring.MinimumScore = 0.4; Bot.Users.UserAdded += (sender, userAddedEventArgs) => { LogEvent($"USER {userAddedEventArgs.User.ID}"); }; EntitiesCreator.Initialize(); DialogCreator.Initialize(); //Load Word Vectors //Logger.Info("Loading word vectors..."); //Saga.Language.WordVectors.Load(@"D:\Word Vectors\FastText\wiki-en.vec", VectorDataFormat.Text); //Saga.Language.WordVectors.Load(@"D:\pizzabot-wordvectors.vec", VectorDataFormat.Text); Bot.Language.WordVectors.Logger.LogReceived += (sender, logReceivedEventArgs) => { Logger.Log(logReceivedEventArgs.Log); }; Bot.Trainer.StartTraining(); //Save optimized Word Vectors //var optimizedWordVector = Bot.Language.WordVectors.Optimize(Saga); //optimizedWordVector.Save(@"/*D:\pizzabot-wordvectors.vec*/", VectorDataFormat.Text); //Logger.Info("Saved optimized Word Vectors."); telegramChannel.Start(); WebApiChannel.Start(); Console.WriteLine("Press any key to stop Saga bot server."); Console.ReadLine(); telegramChannel.Stop(); Logger.Info("Telegram channel stopped."); WebApiChannel.Stop(); Logger.Info("Web API channel stopped."); } catch (Exception e) { Console.WriteLine(e); Console.ReadLine(); } }