Exemplo n.º 1
0
        public static async Task Execute(CallbackData data)
        {
            //достать данные из таблицы
            var flats = Handlers.GoogleSheetsHandler.CheckFlatData(data.Sender.Id);

            if (flats.Count > 0)
            {
                //отправить подтверждение
                var receiver = data.Sender.Id;

                var message = new KeyboardMessage
                {
                    Receiver     = receiver,
                    Sender       = client.BotUserData,
                    Text         = $"Вы указывали квартиры : {String.Join(",", flats)}. Выберите действие.",
                    TrackingData = ViberBotTrackingData.Build("", "StartSetFlatNumberAction"),
                    Keyboard     = KeyboardHandler.CustomButtons(new string[][] { new string[] { "Добавить квартиру", "AddFlatNumberAction" }, new string[] { "Удалить квартиру", "ConfirmDeleteFlatNumberAction" }, new string[] { "Отмена", "Cancel" } })
                };

                await client.SendMessage(receiver, message);
            }
            else
            {
                await AddFlatNumberAction.Execute(data);
            }
        }
Exemplo n.º 2
0
        public static async Task Execute(CallbackData data)
        {
            var text         = ((TextMessage)data.Message).Text;
            var receiver     = data.Sender.Id;
            var trackingData = ViberBotTrackingData.Get(data.Message.TrackingData);

            if (text == "no")
            {
                await StartSetFlatNumberAction.Execute(data);

                return;
            }
            else if (text == "yes")
            {
                var flatNumber = trackingData.Data[DataField.FlatNumber.ToString()];

                //сохранить в таблицу
                Handlers.GoogleSheetsHandler.AddUserFlatNumber(flatNumber, data.Sender);

                await client.SendTextMessage(receiver, "Данные успешно сохранены.");
            }
            else
            {
                var message = new KeyboardMessage
                {
                    Receiver     = receiver,
                    Sender       = client.BotUserData,
                    Text         = $"Выберите действи из списка.",
                    TrackingData = ViberBotTrackingData.Build("SetFlatNumberAction", "SetFlatNumberAction", trackingData.Data),
                    Keyboard     = KeyboardHandler.YesNoCancel()
                };

                await client.SendMessage(receiver, message);
            }
        }
Exemplo n.º 3
0
        public static async Task Execute(CallbackData data)
        {
            //достать данные из таблицы

            var flatNumber = ((TextMessage)data.Message).Text;

            var lastData = Handlers.GoogleSheetsHandler.GetFlatData(flatNumber);

            var trackingData = ViberBotTrackingData.Get(data.Message.TrackingData);

            trackingData.Data.Add(DataField.FlatNumber.ToString(), flatNumber);

            //отправить подтверждение
            var receiver = data.Sender.Id;

            var message = new KeyboardMessage
            {
                Receiver     = receiver,
                Sender       = client.BotUserData,
                Text         = $"Квартира - { flatNumber}. Предыдущие показания счетчика - {lastData}. Введите текущие показания.",
                TrackingData = ViberBotTrackingData.Build("EnterSendDataAction", "СonfirmSendDataAction", trackingData.Data),
                Keyboard     = KeyboardHandler.Cancel
            };
            await client.SendMessage(receiver, message);
        }
Exemplo n.º 4
0
        public static async Task Execute(CallbackData data)
        {
            //достать данные из таблицы
            var receiver = data.Sender.Id;
            var flats    = Handlers.GoogleSheetsHandler.CheckFlatData(data.Sender.Id);

            if (flats.Any())
            {
                var flatButtonsData = new List <string[]>();

                foreach (var flat in flats)
                {
                    flatButtonsData.Add(new string[] { flat.ToString(), flat.ToString() });
                }

                flatButtonsData.Add(new string[] { "Отмена", "Cancel" });
                //отправить подтверждение

                var message = new KeyboardMessage
                {
                    Receiver     = receiver,
                    Sender       = client.BotUserData,
                    Text         = $"Выберите номер квартиру для удаления.",
                    TrackingData = ViberBotTrackingData.Build("ConfirmDeleteFlatNumberAction", "DeleteFlatNumberAction"),
                    Keyboard     = KeyboardHandler.CustomButtons(flatButtonsData.ToArray())
                };

                await client.SendMessage(receiver, message);
            }
            else
            {
                await client.SendTextMessage(receiver, "Нет привязаных квартир.");
            }
        }
Exemplo n.º 5
0
        public static async Task Execute(CallbackData data)
        {
            var receiver = data.Sender.Id;

            if (int.TryParse(((TextMessage)data.Message).Text, out int userValue))
            {
                //учесть данные в поле трекинга

                var trackingData = ViberBotTrackingData.Get(data.Message.TrackingData);

                var flatNumber = trackingData.Data[DataField.FlatNumber.ToString()];

                trackingData.Add(DataField.FlatValue.ToString(), userValue.ToString());

                //запросить  подтверждение
                var message = new KeyboardMessage
                {
                    Receiver     = receiver,
                    Sender       = client.BotUserData,
                    Text         = $"Для квартиры - {flatNumber}. Вы указали - {userValue}. Данные верны?",
                    TrackingData = ViberBotTrackingData.Build("СonfirmSendDataAction", "SendDataAction", trackingData.Data),
                    Keyboard     = KeyboardHandler.YesNoCancel()
                };
                await client.SendMessage(receiver, message);
            }
            else
            {
                //неверное значение
                await client.SendTextMessage(receiver, BotError.BadValue);
            }
        }
Exemplo n.º 6
0
        public static async Task Execute(CallbackData data)
        {
            // проверить есть ли запись о пользователе вообще
            //или создавать ее во время приветствия

            //отправить подтверждение
            var receiver = data.Sender.Id;

            //достать данные из таблицы
            var contactsData = Handlers.GoogleSheetsHandler.GetContactsData(data.Sender.Id);
            var trackingData = JsonConvert.DeserializeObject <ViberBotTrackingData>(data.Message.TrackingData);

            trackingData.Add(DataField.Contacts.ToString(), contactsData);

            var message = new KeyboardMessage
            {
                Receiver     = receiver,
                Sender       = client.BotUserData,
                Text         = $"Указанные контактные данные - {contactsData}. Введите номер телефона по которому можно было бы с вами связаться. Данные вводите в числовом формате без пробелов. Пример: +370123456789",
                TrackingData = ViberBotTrackingData.Build("StartSendContactsAction", "СonfirmSendContactsAction", trackingData.Data),
                Keyboard     = KeyboardHandler.Cancel
            };

            await client.SendMessage(receiver, message);
        }
Exemplo n.º 7
0
        private async Task ProcessMessageCallback(CallbackData data)
        {
            if (data.Event == "message")
            {
                var messageText = ((TextMessage)data.Message).Text;

                if (messageText.ToLower() == "start")
                {
                    data.Message.TrackingData = ViberBotTrackingData.Empty();
                    await MenuAction.Execute(data);

                    return;
                }
                if (messageText.ToLower() == "cancel" || data.Message.TrackingData == null)
                {
                    data.Message.TrackingData = ViberBotTrackingData.Empty();
                    await DefaultAction.Execute(data);

                    return;
                }
                if (messageText.ToLower() == "help")
                {
                    data.Message.TrackingData = ViberBotTrackingData.Empty();
                    await HelpAction.Execute(data);

                    return;
                }
                try
                {
                    var trackingData = JsonConvert.DeserializeObject <ViberBotTrackingData>(data.Message.TrackingData);

                    if (messageText.Contains("Action"))
                    {
                        trackingData.NextAction = messageText;
                    }

                    if (trackingData != null && !string.IsNullOrEmpty(trackingData.NextAction))
                    {
                        Type magicType = Type.GetType($"ViberBot.Client.Actions.{trackingData.NextAction}");
                        if (magicType != null)
                        {
                            MethodInfo magicMethod = magicType.GetMethod("Execute");
                            magicMethod.Invoke(null, new object[] { data });
                        }
                    }
                    else
                    {
                        await DefaultAction.Execute(data);
                    }
                }
                catch
                {
                    await SendTextMessage(data.Sender.Id, BotError.SomethingWentWrong);
                }
            }
        }
Exemplo n.º 8
0
        public async Task <string> SendTextMessage(string receiver, string text)
        {
            var message = new KeyboardMessage
            {
                Receiver     = receiver,
                Sender       = BotUserData,
                Text         = text,
                TrackingData = ViberBotTrackingData.Empty(),
                Keyboard     = KeyboardHandler.MainMenu
            };

            return(await SendMessage(receiver, message));
        }
Exemplo n.º 9
0
        public static async Task Execute(CallbackData data)
        {
            //отправить подтверждение
            var receiver = data.Sender.Id;

            var message = new KeyboardMessage
            {
                Receiver     = receiver,
                Sender       = client.BotUserData,
                Text         = $"Укажите номер вашей квартиры.",
                TrackingData = ViberBotTrackingData.Build("AddFlatNumberAction", "СonfirmSetFlatNumberAction"),
                Keyboard     = KeyboardHandler.Cancel
            };

            await client.SendMessage(receiver, message);
        }
Exemplo n.º 10
0
        public static async Task Execute(CallbackData data)
        {
            //отправить подтверждение
            var receiver = data.Sender.Id;

            var message = new KeyboardMessage
            {
                Receiver     = receiver,
                Sender       = client.BotUserData,
                Text         = $"Выберите действие из списка.",
                TrackingData = ViberBotTrackingData.Empty(),
                Keyboard     = KeyboardHandler.MainMenu
            };

            await client.SendMessage(receiver, message);
        }
Exemplo n.º 11
0
        public static async Task Execute(CallbackData data)
        {
            var receiver = data.Sender.Id;

            if (int.TryParse(((TextMessage)data.Message).Text, out int userValue))
            {
                //учесть данные в поле трекинга
                var flats = Handlers.GoogleSheetsHandler.CheckFlatData(data.Sender.Id);

                if (flats.Any(f => f.ToString() == userValue.ToString()))
                {
                    await client.SendTextMessage(receiver, $"Вы указали - {userValue}. Уже в списке.");
                }
                else if (userValue <= 0 || userValue > ViberBotClient.GetInstance().Settings.FlatsNumber)
                {
                    await client.SendTextMessage(receiver, $"Вы указали - {userValue}. Номер квартиры должен быть от 1 до {ViberBotClient.GetInstance().Settings.FlatsNumber}.");
                }
                else
                {
                    var trackingData = ViberBotTrackingData.Get(data.Message.TrackingData);

                    trackingData.Add(DataField.FlatNumber.ToString(), userValue.ToString());

                    //запросить  подтверждение
                    var message = new KeyboardMessage
                    {
                        Receiver     = receiver,
                        Sender       = client.BotUserData,
                        Text         = $"Вы указали - {userValue}. Данные верны?",
                        TrackingData = ViberBotTrackingData.Build("СonfirmSetFlatNumberAction", "SetFlatNumberAction", trackingData.Data),
                        Keyboard     = KeyboardHandler.YesNoCancel()
                    };

                    await client.SendMessage(receiver, message);
                }
            }
            else
            {
                //неверное значение
                await client.SendTextMessage(receiver, BotError.BadValue);
            }
        }
Exemplo n.º 12
0
        public static async Task Execute(CallbackData data)
        {
            //достать данные из таблицы
            Handlers.GoogleSheetsHandler.AddUser(data.User);

            //отправить подтверждение
            var receiver = data.User.Id;

            //добавить пользователя

            var message = new KeyboardMessage
            {
                Receiver     = receiver,
                Sender       = client.BotUserData,
                Text         = $"Добрый день я бот который помогает учитывать данные счетчика электроэнерги. Пожалуйста зарегистрируйте квартиру и контактные данные.",
                TrackingData = ViberBotTrackingData.Empty(),
                Keyboard     = KeyboardHandler.Start
            };
            await client.SendMessage(receiver, message);
        }
Exemplo n.º 13
0
        public static async Task Execute(CallbackData data)
        {
            //отправить подтверждение
            var receiver = data.Sender.Id;

            var helpFile = client.Settings.HelpFile;

            var message = new KeyboardMessage
            {
                Receiver     = receiver,
                Sender       = client.BotUserData,
                Text         = $"Добрый день я бот который помогает учитывать данные счетчика электроэнерги. Инструкцию по использованию можно найти по адресу {helpFile.Url}.",
                TrackingData = ViberBotTrackingData.Empty(),
                Keyboard     = KeyboardHandler.MainMenu
            };
            await client.SendMessage(receiver, message);

            var helpLink = new LinkMessage
            {
                Receiver = receiver,
                Sender   = client.BotUserData,
                Media    = helpFile.Url,
            };

            await client.SendMessage(receiver, helpLink);

            var filemessage = new FileMessage
            {
                Receiver = receiver,
                Sender   = client.BotUserData,
                Media    = helpFile.Url,
                Size     = helpFile.Size,
                FileName = helpFile.FileName
            };

            await client.SendMessage(receiver, filemessage);

            await DefaultAction.Execute(data);
        }
Exemplo n.º 14
0
        public static async Task Execute(CallbackData data)
        {
            var receiver = data.Sender.Id;

            var userValue = ((TextMessage)data.Message).Text;

            //TODO возможно сделать проверку номера
            Regex r = new Regex(@"^\+?\d{0,2}\-?\d{4,5}\-?\d{5,6}");

            if (r.IsMatch(userValue))
            {
                //учесть данные в поле трекинга

                var trackingData = ViberBotTrackingData.Get(data.Message.TrackingData);

                var contactsData = trackingData.Data[DataField.Contacts.ToString()];

                trackingData.Add(DataField.Contacts.ToString(), userValue);

                //запросить  подтверждение
                var message = new KeyboardMessage
                {
                    Receiver     = receiver,
                    Sender       = client.BotUserData,
                    Text         = $"Старые контактные данные - {contactsData}. Вы указали - {userValue}. Данные верны?",
                    TrackingData = ViberBotTrackingData.Build("СonfirmSendContactsAction", "SendContactsAction", trackingData.Data),
                    Keyboard     = KeyboardHandler.YesNoCancel()
                };
                await client.SendMessage(receiver, message);
            }
            else
            {
                //неверное значение
                await client.SendTextMessage(receiver, BotError.BadValue);
            }
        }
Exemplo n.º 15
0
        public static async Task Execute(CallbackData data)
        {
            //отправить подтверждение
            var receiver = data.Sender.Id;

            if (client.Settings.DataReadingPeriod != null)
            {
                //проверка даты
                var day = DateTime.Now.Date.Day;
                if (day < client.Settings.DataReadingPeriod.From || day > client.Settings.DataReadingPeriod.To)
                {
                    await client.SendTextMessage(receiver, BotError.Period(client.Settings.DataReadingPeriod.From.ToString(), client.Settings.DataReadingPeriod.To.ToString()));

                    return;
                }
            }
            //достать данные из таблицы
            var flats = Handlers.GoogleSheetsHandler.CheckFlatData(data.Sender.Id);

            if (flats.Count == 0)
            {
                var message = new KeyboardMessage
                {
                    Receiver     = receiver,
                    Sender       = client.BotUserData,
                    Text         = $"У вас не привязана ни одна квартира.",
                    TrackingData = ViberBotTrackingData.Empty(),
                    Keyboard     = KeyboardHandler.MainMenu
                };

                await client.SendMessage(receiver, message);
            }
            else if (flats.Count == 1)
            {
                var flatNumber = flats.FirstOrDefault().ToString();
                var lastData   = Handlers.GoogleSheetsHandler.GetFlatData(flatNumber);

                var trackingData = JsonConvert.DeserializeObject <ViberBotTrackingData>(data.Message.TrackingData);
                trackingData.Add(DataField.FlatNumber.ToString(), flatNumber);

                var message = new KeyboardMessage
                {
                    Receiver     = receiver,
                    Sender       = client.BotUserData,
                    Text         = $"Квартира - { flatNumber}. Предыдущие показания счетчика - {lastData}. Введите текущие показания.",
                    TrackingData = ViberBotTrackingData.Build("EnterSendDataAction", "СonfirmSendDataAction", trackingData.Data),
                    Keyboard     = KeyboardHandler.Cancel
                };

                await client.SendMessage(receiver, message);
            }
            else if (flats.Count > 1)
            {
                var flatButtonsData = new List <string[]>();
                foreach (var flat in flats)
                {
                    flatButtonsData.Add(new string[] { flat.ToString(), flat.ToString() });
                }
                flatButtonsData.Add(new string[] { "Отмена", "Cancel" });

                var message = new KeyboardMessage
                {
                    Receiver     = receiver,
                    Sender       = client.BotUserData,
                    Text         = $"У вас указано несколько квартир. Выберите нужную.",
                    TrackingData = ViberBotTrackingData.Build("StartSendDataAction", "EnterSendDataAction"),
                    Keyboard     = KeyboardHandler.CustomButtons(flatButtonsData.ToArray())
                };

                await client.SendMessage(receiver, message);
            }
        }