Exemple #1
0
        public void SendShowsNotifications()
        {
            using (AppDbContext db = new AppDbContext())
            {
                var showNotifications = db.ShowNotifications
                                        .Where(n => !n.Notified)
                                        .ToList();
                if (showNotifications.Count == 0)
                {
                    return;
                }

                Logger.Debug("SendShowsNotifications: Sending new notifications");
                foreach (var notification in showNotifications)
                {
                    string text = $"{notification.Show.Title} ({notification.Show.SiteType.Title}) {string.Format(SubscribeCommand.SubscribeCommandFormat, notification.ShowId)}\n{notification.Show.Description}";
                    try
                    {
                        telegramApi.SendMessage(notification.User.TelegramUserId, text);
                    }
                    catch (Exception e)
                    {
                        Logger.Error(e, "SendShowsNotifications: An error occurred while sending new notifications");
                    }

                    notification.Notified = true;
                }

                Logger.Trace("SendShowsNotifications: Saving changes to database");
                db.SaveChanges();
            }
        }
Exemple #2
0
        public override void Execute()
        {
            using (AppDbContext db = new AppDbContext())
            {
                Program.Logger.Debug($"{GetType().Name}: Searching user with TelegramId: {Message.From.Id} in database");
                var user = db.GetUserByTelegramId(Message.From.Id);
                if (user == null)
                {
                    user = new User
                    {
                        TelegramUserId = Message.From.Id,
                        FirstName      = Message.From.FirstName,
                        LastName       = Message.From.LastName,
                        Username       = Message.From.Username
                    };

                    Program.Logger.Info($"{GetType().Name}: {user} is new User");
                    Program.Logger.Debug($"{GetType().Name}: Adding user {user} to database");
                    db.Users.Add(user);
                }
                else
                {
                    Program.Logger.Debug($"{GetType().Name}: User {user} is already exist");
                }

                Program.Logger.Debug($"{GetType().Name}: Subscribing {user} to all shows");
                var subscriptions = user.Subscriptions.ToList();
                foreach (Show show in db.Shows)
                {
                    Subscription subscription = new Subscription
                    {
                        User             = user,
                        Show             = show,
                        SubscriptionDate = DateTime.Now
                    };

                    if (subscriptions.Any(s => Equals(s.Show, show)))
                    {
                        continue;
                    }

                    db.Subscriptions.Add(subscription);
                }

                Program.Logger.Debug($"{GetType().Name}: Saving changes to database");
                db.SaveChanges();
            }

            Program.Logger.Debug($"{GetType().Name}: Sending response to {Message.From}");
            try
            {
                TelegramApi.SendMessage(Message.From, "Вы, братишка, подписаны на все сериалы");
            }
            catch (Exception e)
            {
                throw new Exception($"{GetType().Name}: An error occurred while sending response to {Message.From}", e);
            }

            Status = true;
        }
 static void Notify(string message)
 {
     Console.WriteLine(message);
     TelegramApi.SendMessage(
         Environment.GetEnvironmentVariable("TELEGRAM_KEY"),
         Environment.GetEnvironmentVariable("TELEGRAM_CHAT"),
         message
         );
 }
Exemple #4
0
        private async void metroButton10_Click(object sender, EventArgs e)
        {
            if (_chatId == 0)
            {
                return;
            }
            metroButton10.Enabled = false;
            await TelegramApi.SendMessage(_chatId.ToString(), "Wenn du diese Nachricht erhälst hast du alles richtig Konfiguriert ;-)");

            metroButton10.Enabled = true;
        }
Exemple #5
0
        private async void metroButton10_Click(object sender, EventArgs e)
        {
            if (String.IsNullOrWhiteSpace(metroTextBox9.Text))
            {
                return;
            }
            metroButton10.Enabled = false;
            await TelegramApi.SendMessage(metroTextBox9.Text,
                                          "Wenn du diese Nachricht erhälst hast du alles richtig Konfiguriert ;-)");

            metroButton10.Enabled = true;
        }
Exemple #6
0
 private void SendResponse(string response)
 {
     Program.Logger.Debug($"{GetType().Name}: Sending response to {Message.From}");
     try
     {
         TelegramApi.SendMessage(Message.From, response);
     }
     catch (Exception e)
     {
         throw new Exception($"{GetType().Name}: An error occurred while sending response to {Message.From}", e);
     }
 }
Exemple #7
0
        public override void Execute()
        {
            Program.Logger.Debug($"{GetType().Name}: Sending help message to {Message.From}");
            try
            {
                TelegramApi.SendMessage(Message.From, string.Format(HelpTemplate, Message.From.FirstName));
            }
            catch (Exception e)
            {
                throw new Exception($"{GetType().Name}: An error occurred while sending help message to {Message.From}", e);
            }

            Status = true;
        }
Exemple #8
0
        public override void Execute()
        {
            Program.Logger.Debug($"{GetType().Name}: Sending message to {Message.From}");
            try
            {
                TelegramApi.SendMessage(Message.From, "Пощади, братишка");
            }
            catch (Exception e)
            {
                throw new Exception($"{GetType().Name}: An error occurred while sending message to {Message.From}", e);
            }

            Status = true;
        }
Exemple #9
0
        private bool RequestShow(out string showTitle)
        {
            if (string.IsNullOrEmpty(Arguments))
            {
                Program.Logger.Debug($"{GetType().Name}: Sending 'Enter show title' prompt");
                try
                {
                    TelegramApi.SendMessage(Message.From, "Введите название сериала");
                }
                catch (Exception e)
                {
                    throw new Exception($"{GetType().Name}: An error occurred while sending prompt", e);
                }

                Program.Logger.Debug($"{GetType().Name}: Waiting for a message that contains show title");
                try
                {
                    showTitle = TelegramApi.WaitForMessage(Message.From).Text;
                }
                catch (Exception e)
                {
                    throw new Exception($"{GetType().Name}: An error occurred while waiting for a message that contains show title", e);
                }
            }
            else
            {
                showTitle = Arguments;
            }

            using (AppDbContext db = new AppDbContext())
            {
                Program.Logger.Debug($"{GetType().Name}: Searching show {showTitle} in database");
                var shows = db.GetShowsByTitle(showTitle);
                if (shows == null || shows.Count == 0)
                {
                    return(false);
                }

                var subscriptionCommands = string.Join("; ", shows.Select(s => $"{s.SiteType.Title}: {string.Format(SubscribeCommandFormat, s.Id)}"));
                TelegramApi.SendMessage(Message.From, subscriptionCommands);
                return(true);
            }
        }
Exemple #10
0
        protected void SendPages(List <string> pagesList)
        {
            try
            {
                Program.Logger.Debug($"{GetType().Name}: Sending shows list");

                for (int i = 0; i < pagesList.Count; i++)
                {
                    string page = pagesList[i];
                    if (i != pagesList.Count - 1)
                    {
                        page += "\n/next or /stop";
                    }

                    TelegramApi.SendMessage(Message.From, page);
                    if (i == pagesList.Count - 1)
                    {
                        break;
                    }

                    Message message;
                    do
                    {
                        message = TelegramApi.WaitForMessage(Message.From);
                        if (message?.Text != "/stop" && message?.Text != "/next")
                        {
                            TelegramApi.SendMessage(Message.From, "\n/next or /stop");
                        }
                    }while (message?.Text != "/stop" && message?.Text != "/next");

                    if (message.Text == "/stop")
                    {
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw new Exception($"{GetType().Name}: An error occurred while sending shows list", e);
            }
        }
Exemple #11
0
        public override void Execute()
        {
            List <Show> userShows = null;

            using (var db = new AppDbContext())
            {
                Program.Logger.Debug($"{GetType().Name}: Searching user with TelegramId: {Message.From.Id} in database");

                var user = db.GetUserByTelegramId(Message.From.Id);
                if (user == null)
                {
                    Program.Logger.Debug($"{GetType().Name}: User {Message.From} is not exists");
                }
                else
                {
                    Program.Logger.Debug($"{GetType().Name}: Retrieving user's subscriptions");
                    userShows = user.Subscriptions.Select(s => s.Show).ToList();
                }

                if (userShows == null || userShows.Count == 0)
                {
                    Program.Logger.Debug($"{GetType().Name}: Sending response to {Message.From}");
                    try
                    {
                        TelegramApi.SendMessage(Message.From, "Вы не подписаны ни на один сериал");
                    }
                    catch (Exception e)
                    {
                        throw new Exception($"{GetType().Name}: An error occurred while sending response to {Message.From}", e);
                    }

                    Status = true;
                }
                else
                {
                    List <string> pages = GetPages(userShows.Select(s => $"- {s.Title} ({s.OriginalTitle}) {s.SiteType.Title}").ToList(), MaxPageSize);
                    SendPages(pages);
                    Status = true;
                }
            }
        }
Exemple #12
0
        public override void Execute()
        {
            Program.Logger.Debug($"{GetType().Name}: Sending help message to {Message.From}");
            try
            {
                TelegramApi.SendMessage(
                    Message.From,
                    "Список команд: \n" +
                    "/shows - вывести список всех сериалов \n" +
                    "/subscribe - подписаться на сериал \n" +
                    "/unsubscribe - отписаться от сериала \n" +
                    "/unsubscribe_all - отписаться от всех сериалов \n" +
                    "/help - справка");
            }
            catch (Exception e)
            {
                throw new Exception($"{GetType().Name}: An error occurred while sending help messge to {Message.From}", e);
            }

            Status = true;
        }
Exemple #13
0
        private void SetSetting(Settings settings, Message msg)
        {
            switch (msg.Text)
            {
            case WebUiUrlSetCommand:
                Program.Logger.Debug($"{GetType().Name}: {WebUiUrlSetCommand} command received");
                settings.WebUiUrl = TelegramApi.WaitForMessage(Message.From).Text;
                break;

            case WebUiPasswordSetCommand:
                Program.Logger.Debug($"{GetType().Name}: {WebUiPasswordSetCommand} command received");
                settings.WebUiPassword = TelegramApi.WaitForMessage(Message.From).Text;
                break;

            case SiteLoginSetCommand:
                Program.Logger.Debug($"{GetType().Name}: {SiteLoginSetCommand} command received");
                settings.SiteLogin = TelegramApi.WaitForMessage(Message.From).Text;
                break;

            case SitePasswordSetCommand:
                Program.Logger.Debug($"{GetType().Name}: {SitePasswordSetCommand} command received");
                settings.SitePassword = TelegramApi.WaitForMessage(Message.From).Text;
                break;

            case SaveSettingsCommand:
                Program.Logger.Debug($"{GetType().Name}: {SaveSettingsCommand} command received");
                break;

            case CancelCommand:
                Program.Logger.Debug($"{GetType().Name}: {CancelCommand} command received");
                break;

            default:
                Program.Logger.Debug($"{GetType().Name}: Unknown command received");
                TelegramApi.SendMessage(Message.From, "Пощади, братишка");
                break;
            }
        }
Exemple #14
0
        public static async Task DoRemindWhenPossible(string productid)
        {
            Database.OpenConnection();
            var getReminderEntrys =
                new SQLiteCommand("SELECT * FROM Reminders INNER JOIN Products ON Products.ID = Reminders.ProductID WHERE Reminders.ProductID = @productid AND (Reminders.[Erinnerung Gesendet] IS NULL OR Reminders.[Erinnerung Gesendet] < @datetime)",
                                  Database.Connection);

            getReminderEntrys.Parameters.AddWithValue("@productid", productid);
            getReminderEntrys.Parameters.AddWithValue("@datetime", DateTime.Now.AddMinutes(-Settings.Get <int>("RemindResendAfterMinutes")).ToString("yyyy-MM-dd HH:mm:ss"));
            using (SQLiteDataReader remind = getReminderEntrys.ExecuteReader())
            {
                List <string> remindsToSend = new List <string>();
                while (remind.Read())
                {
                    Logger.Write("Erinnerungen gefunden für ProductID: " + productid + " mit dem Erinnerungspreis: " + remind["Preis"], LogLevel.Debug);

                    List <string> conditions = new List <string>();
                    Convert.ToString(remind["Zustand"]).TrimEnd().Split(',')
                    .ToList()
                    .ForEach(item =>
                    {
                        if (String.IsNullOrWhiteSpace(Convert.ToString(remind["Preis: " + item])) || Convert.ToDecimal(remind["Preis: " + item]) > Convert.ToDecimal(remind["Preis"]))
                        {
                            return;
                        }
                        remindsToSend.Add(item + ": " + Convert.ToString(remind["Preis: " + item]));
                        conditions.Add(item);
                        Logger.Write("Treffer zur Erinnerung hinzugefügt: " + item + ": " + Convert.ToString(remind["Preis: " + item]), LogLevel.Debug);
                    });

                    if (remindsToSend.Any())
                    {
                        /* Erstellt einen neuen Warenkorb
                         * var catInfo = AmazonApi.CreateCart("DE", "B00YUIM2J0");
                         * if (catInfo?.Cart.PurchaseURL != null)
                         * {
                         *  Debug.WriteLine(catInfo?.Cart.PurchaseURL);
                         * }
                         */

                        string shortUrl = Settings.Get <bool>("ShowOnlyDealConditions")
                            ? await URLShortener.Generate(Amazon.MakeReferralLink(Convert.ToString(remind["Store"]),
                                                                                  Convert.ToString(remind["ASIN / ISBN"]), conditions))
                            : null;

                        shortUrl = shortUrl ?? Convert.ToString(remind["URL"]);

                        string notificationText = remind["Name"] + "\n" +
                                                  "Store: " + remind["Store"] + " - ASIN/ISBN: " +
                                                  remind["ASIN / ISBN"] + "\n\n" +
                                                  "Erinnerungs Preis: " + remind["Preis"] + "\n\n" +
                                                  "Aktuelle Amazon Preise:\n";
                        remindsToSend.ForEach(i => notificationText += i + "\n");
                        notificationText += "\nLink: " + shortUrl;

                        if (!String.IsNullOrWhiteSpace(Convert.ToString(remind["Telegram"])))
                        {
                            await TelegramApi.SendMessage(Convert.ToString(remind["Telegram"]), notificationText);
                        }

                        if (!String.IsNullOrWhiteSpace(Convert.ToString(remind["Email"])))
                        {
                            await Mail.NotificationSend(Convert.ToString(remind["Email"]), notificationText,
                                                        Convert.ToString(remind["Name"]));
                        }

                        Database.OpenConnection();
                        SQLiteCommand updateRemind =
                            new SQLiteCommand(
                                "UPDATE Reminders SET [Erinnerung Gesendet] = @lastsend WHERE ID = @id",
                                Database.Connection);
                        updateRemind.Parameters.AddWithValue("@id", remind["ID"]);
                        updateRemind.Parameters.AddWithValue("@lastsend", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                        updateRemind.ExecuteNonQuery();

                        Display();
                    }
                }
            }
        }
Exemple #15
0
        public override void Execute()
        {
            using (AppDbContext db = new AppDbContext())
            {
                Program.Logger.Debug($"{GetType().Name}: Retrieving notification with id: {NotificationId}");
                var notification = db.GetNotificationById(NotificationId);
                if (notification == null)
                {
                    Program.Logger.Debug($"{GetType().Name}: Notification with specified Id was not found");
                    Status = false;
                    return;
                }

                Program.Logger.Debug($"{GetType().Name}: Retrieving settings of {notification.Subscription.User}");
                var settings = db.GetSettingsByUser(notification.Subscription.User);
                if (settings == null)
                {
                    Program.Logger.Debug($"{GetType().Name}: User's settings were not found");
                    Status = false;
                    return;
                }

                ITorrentGetter            torrentGetter = new LostFilmTorrentGetter();
                List <TorrentDescription> torrents      = null;
                Program.Logger.Debug($"{GetType().Name}: Retrieving torrents for {notification.Episode.Show} - {notification.Episode.Title}");
                try
                {
                    torrents = torrentGetter.GetEpisodeTorrents(notification.Episode, settings.SiteLogin, settings.SitePassword);
                }
                catch (Exception e)
                {
                    Program.Logger.Error(e, $"An error occured while retrieving torrents for {notification.Episode.Show.Title} - {notification.Episode.Title}");
                    TelegramApi.SendMessage(Message.From, "(Не удалось получить список торрентов. Возможно указан неверный логин/пароль)");
                    Status = false;
                    return;
                }

                Program.Logger.Debug($"{GetType().Name}: Number of torrents: {torrents?.Count() ?? 0}");
                TorrentDescription torrent = null;
                if (torrents != null && torrents.Count() != 0)
                {
                    Program.Logger.Debug($"{GetType().Name}: Retrieving torrent with required quality ({Quality})");
                    torrent = torrents.FirstOrDefault(t => t.Quality == Quality);
                }

                if (torrent == null)
                {
                    Program.Logger.Debug($"{GetType().Name}: Torrent with required quality was not found");
                    Status = false;
                    return;
                }

                Program.Logger.Debug($"{GetType().Name}: Creating new download task");
                db.DownloadTasks.Add(new DownloadTask()
                {
                    Episode    = notification.Episode,
                    User       = notification.Subscription.User,
                    TorrentUrl = torrent.TorrentUri.ToString()
                });

                Program.Logger.Debug($"{GetType().Name}: Saving changes to database");
                db.SaveChanges();
                Status = true;
            }
        }
Exemple #16
0
        public override void Execute()
        {
            using (AppDbContext db = new AppDbContext())
            {
                Program.Logger.Debug($"{GetType().Name}: Searching user's settings in database");
                var settings = db.GetSettingsByUser(db.GetUserByTelegramId(Message.From.Id));
                var text     = GetMessageContent(settings);
                Program.Logger.Debug($"{GetType().Name}: Sending commands list");
                try
                {
                    TelegramApi.SendMessage(Message.From, text);
                }
                catch (Exception e)
                {
                    throw new Exception($"{GetType().Name}: An error occurred while sending commands list", e);
                }

                bool newSettings = false;
                if (settings == null)
                {
                    Program.Logger.Debug($"{GetType().Name}: Creating new settings for {Message.From}");
                    newSettings = true;
                    settings    = new Settings {
                        User = db.GetUserByTelegramId(Message.From.Id)
                    };
                }

                Message msg;
                do
                {
                    Program.Logger.Debug($"{GetType().Name}: Waiting for a command");
                    try
                    {
                        msg = TelegramApi.WaitForMessage(Message.From);
                    }
                    catch (Exception e)
                    {
                        throw new Exception($"{GetType().Name}: An error occurred while waiting for a command", e);
                    }

                    SetSetting(settings, msg);
                }while (msg.Text != SaveSettingsCommand && msg.Text != CancelCommand);

                if (msg.Text == SaveSettingsCommand)
                {
                    Program.Logger.Debug($"{GetType().Name}: Saving changes to database");
                    if (newSettings)
                    {
                        db.Settings.Add(settings);
                    }

                    db.SaveChanges();
                }
                else
                {
                    Program.Logger.Debug($"{GetType().Name}: Exiting without saving changes to database");
                }
            }

            Status = true;
        }
Exemple #17
0
        public override void Execute()
        {
            Show   show;
            string showTitle     = string.Empty;
            bool   subscribeById = ShowId != null;

            if (ShowId == null)
            {
                bool showFound = RequestShow(out showTitle);
                if (!showFound)
                {
                    SendShowList(showTitle, GetMessageSize());
                }

                Status = true;
                return;
            }

            string response;

            Program.Logger.Info($"{GetType().Name}: {Message.From} is trying to subscribe to '{(subscribeById ? $"Id = {ShowId}" : showTitle)}'");
            using (AppDbContext db = new AppDbContext())
            {
                show = db.GetShowById(ShowId.Value);
                if (show == null)
                {
                    Program.Logger.Info($"{GetType().Name}: Show '{(subscribeById ? $"Id = {ShowId}" : showTitle)}' was not found");
                    response = $"Сериал '{(subscribeById ? $"Id = {ShowId}" : showTitle)}' не найден";
                    Program.Logger.Debug($"{GetType().Name}: Sending response to {Message.From}");
                    try
                    {
                        TelegramApi.SendMessage(Message.From, response);
                    }
                    catch (Exception e)
                    {
                        throw new Exception($"{GetType().Name}: An error occurred while sending response to {Message.From}", e);
                    }

                    Status = true;
                    return;
                }

                Program.Logger.Debug($"{GetType().Name}: Searching user with TelegramId: {Message.From.Id} in database");
                var  user    = db.GetUserByTelegramId(Message.From.Id);
                bool newUser = false;
                if (user == null)
                {
                    user = new User
                    {
                        TelegramUserId = Message.From.Id,
                        FirstName      = Message.From.FirstName,
                        LastName       = Message.From.LastName,
                        Username       = Message.From.Username
                    };

                    newUser = true;
                }

                Program.Logger.Debug($"{GetType().Name}: Checking for subscription existence");
                var subscriptionExists = user.Subscriptions.Any(s => s.Show.Id == show.Id);
                if (subscriptionExists)
                {
                    Program.Logger.Info($"{GetType().Name}: User {Message.From} is already subscribed to {show.OriginalTitle}");
                    response = $"Вы уже подписаны на сериал \"{show.Title}\" ({show.SiteType.Title})";
                }
                else
                {
                    Subscribe(db, user, show, newUser);
                    response = $"Вы подписались на сериал \"{show.Title}\" ({show.SiteType.Title})";
                }

                Program.Logger.Debug($"{GetType().Name}: Saving changes to database");
                db.SaveChanges();
            }

            Program.Logger.Debug($"{GetType().Name}: Sending response to {Message.From}");
            try
            {
                TelegramApi.SendMessage(Message.From, response);
            }
            catch (Exception e)
            {
                throw new Exception($"{GetType().Name}: An error occurred while sending response to {Message.From}", e);
            }

            Status = true;
        }
        public override void Execute()
        {
            string response;
            using (var db = new AppDbContext())
            {
                do
                {
                    Program.Logger.Debug($"{GetType().Name}: Searching user with TelegramId: {Message.From.Id} in database");
                    var user = db.GetUserByTelegramId(Message.From.Id);
                    if (user == null)
                    {
                        Program.Logger.Debug($"{GetType().Name}: User with TelegramId: {Message.From.Id} is not found");
                        response = "Вы не подписаны ни на один сериал";
                        break;
                    }

                    var subscriptions = user.Subscriptions;
                    if (!subscriptions.Any())
                    {
                        Program.Logger.Debug($"{GetType().Name}: {user} has no subscriptions");
                        response = "Вы не подписаны ни на один сериал";
                        break;
                    }

                    Program.Logger.Debug($"{GetType().Name}: Sending the confirmation message to {user}");
                    try
                    {
                        TelegramApi.SendMessage(Message.From, "Вы действительно хотите отписаться от всех сериалов?\n/yes /no");
                    }
                    catch (Exception e)
                    {
                        throw new Exception($"{GetType().Name}: An error occurred while sending the confirmation message to {user}", e);
                    }

                    Program.Logger.Debug($"{GetType().Name}: Waiting for a message that contains confirmation");
                    Message msg;
                    try
                    {
                        msg = TelegramApi.WaitForMessage(Message.From);
                    }
                    catch (Exception e)
                    {
                        throw new Exception($"{GetType().Name}: An error occurred while waiting for a message that contains confirmation", e);
                    }

                    if (msg.Text.ToLower() != "/yes")
                    {
                        Program.Logger.Debug($"{GetType().Name}: {user} cancel command");
                        Status = true;
                    }

                    Program.Logger.Debug($"{GetType().Name}: Deleting notifications for all subscriptions");
                    foreach (var subscription in subscriptions)
                    {
                        db.Notifications.RemoveRange(db.Notifications.Where(n => n.Subscription.Id == subscription.Id));
                    }

                    Program.Logger.Debug($"{GetType().Name}: Deleting all subscriptions");
                    db.Subscriptions.RemoveRange(subscriptions);
                    response = "Вы отписались от всех сериалов";
                }
                while (false);

                Program.Logger.Debug($"{GetType().Name}: Saving changes to database");
                db.SaveChanges();
            }

            Program.Logger.Debug($"{GetType().Name}: Sending response to {Message.From}");
            try
            {
                TelegramApi.SendMessage(Message.From, response);
            }
            catch (Exception e)
            {
                throw new Exception($"{GetType().Name}: An error occurred while sending response to {Message.From}", e);
            }

            Status = true;
        }