Пример #1
0
        private static void Bot_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            if (e.Message.Type == Telegram.Bot.Types.Enums.MessageType.Text)
            {
                //Contato Inicial ou Reiniciando o bot
                if (e.Message.Text.Contains("/start"))
                {
                    Send(e, "Ola " + e.Message.From.Username + "\n Escolha uma cidade");
                    Send(e, Cities());
                    if (!UserSteps.ContainsKey(e.Message.From.Id))
                    {
                        UserSteps.Add(e.Message.From.Id, "Cidade");
                    }
                    else
                    {
                        UserSteps[e.Message.From.Id] = "Cidade";
                    }

                    agendamento      = new Agendamento();
                    agendamento.Id   = Guid.NewGuid();
                    agendamento.Nome = e.Message.From.Username;
                }
                else
                {
                    switch (UserSteps[e.Message.From.Id])
                    {
                    case "Cidade":


                        if (Cities().Find(c => c.Contains(e.Message.Text)) != null)
                        {
                            agendamento.Cidade = e.Message.Text;

                            Send(e, e.Message.From.Username + "\n Escolha uma acomodação");
                            Send(e, Houses());
                            UserSteps[e.Message.From.Id] = "Acomodação";
                        }
                        else
                        {
                            Send(e, "Comando Inválido. Escolha uma das cidades");
                            Send(e, Cities());
                        }

                        break;

                    case "Acomodação":


                        if (Houses().Find(c => c.Contains(e.Message.Text)) != null)
                        {
                            agendamento.Acomodação = e.Message.Text;

                            Send(e, e.Message.From.Username + "\n Escolha uma escola");
                            Send(e, Schools());
                            UserSteps[e.Message.From.Id] = "Escola";
                        }
                        else
                        {
                            Send(e, "Comando Inválido. Escolha uma das acomodações");
                            Send(e, Houses());
                        }

                        break;

                    case "Escola":


                        if (Schools().Find(c => c.Contains(e.Message.Text)) != null)
                        {
                            agendamento.Escola = e.Message.Text;

                            Send(e, e.Message.From.Username + "\n Escolha uma dos adicionais");
                            Send(e, Adds());
                            UserSteps[e.Message.From.Id] = "Adicional";
                        }
                        else
                        {
                            Send(e, "Comando Inválido. Escolha uma das escolas");
                            Send(e, Schools());
                        }

                        break;

                    case "Adicional":


                        if (Adds().Find(c => c.Contains(e.Message.Text)) != null)
                        {
                            agendamento.Adicionais = e.Message.Text;

                            Send(e, e.Message.From.Username + "\n Digite seu tempo de permanencia em dias, meses ou anos");
                            UserSteps[e.Message.From.Id] = "Tempo";
                        }
                        else
                        {
                            Send(e, "Comando Inválido. Escolha uma dos adicionais");
                            Send(e, Adds());
                        }

                        break;

                    case "Tempo":


                        if (IsValidTime(e.Message.Text))
                        {
                            agendamento.Tempo = e.Message.Text;

                            Send(e, "Solicitação de Intercambio\n-Cidade: " + agendamento.Cidade + "\n-Acomodação: " + agendamento.Acomodação + "\n-Escola: " + agendamento.Escola + "\n-Adicional: " + agendamento.Adicionais + "\n-Tempo de Permanencia: " + agendamento.Tempo);
                            Send(e, e.Message.From.Username + "\n Confirmar Solicitação ?(Sim/Não)");
                            UserSteps[e.Message.From.Id] = "Confirmação";
                        }
                        else
                        {
                            Send(e, "Comando Inválido. Digite seu tempo de permanencia em dias, meses ou anos");
                            Send(e, Adds());
                        }

                        break;

                    case "Confirmação":


                        if (e.Message.Text == "Sim")
                        {
                            Send(e, "Diga quando você virá a agencia");
                            UserSteps[e.Message.From.Id] = "Agendamento";
                        }
                        else if (e.Message.Text == "Não")
                        {
                            agendamento      = new Agendamento();
                            agendamento.Id   = Guid.NewGuid();
                            agendamento.Nome = e.Message.From.Username;

                            Send(e, "Reiniciando...Escolha a cidade");
                            Send(e, Cities());
                            UserSteps[e.Message.From.Id] = "Cidade";
                        }
                        else
                        {
                            Send(e, "Comando Inválido. Confirmar Solicitação ?(Sim/Não)");
                        }

                        break;



                    case "Agendamento":

                        if (IsValidDateTimeTest(e.Message.Text))
                        {
                            Send(e, "Visita Agendada!");
                            UserSteps[e.Message.From.Id] = "Finalizado";
                            agendamento.VisitaNaAgencia  = e.Message.Text;
                        }
                        else
                        {
                            Send(e, "Data Invalida");
                        }

                        break;



                    default:
                        break;
                    }
                }
            }
        }
        ///사용자로 부터 Message Recv
        private static async void Bot_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs messageEventArgs)
        {
            /// Message 객체
            var message = messageEventArgs.Message;

            /// 예외처리
            if (message == null || message.Type != Telegram.Bot.Types.Enums.MessageType.Text)
            {
                return;
            }

            /// "/사용자추가" 라는 명령을 받음
            if (message.Text.StartsWith("/사용자추가"))
            {
                dicUserState[message.Chat.Id] = UserState.addUser;
                await Bot.SendTextMessageAsync(message.Chat.Id, @"사용자 이름과 나이를 입력해 주세요. ex)윈도우프로그래밍,28");
            }
            /// "/사용자삭제" 라는 명령을 받음
            else if (message.Text.StartsWith("/사용자삭제"))
            {
                dicUserState[message.Chat.Id] = UserState.deleteUser;
                await Bot.SendTextMessageAsync(message.Chat.Id, "사용자 이름을 입력해 주세요.");
            }

            /// "/사용자목록" 라는 명령을 받음
            else if (message.Text.StartsWith("/사용자목록"))
            {
                dicUserState[message.Chat.Id] = UserState.none;

                string _message = string.Empty;
                Users.ForEach(x => _message += string.Format("이름 : {0}, 나이 : {1}\r\n", x.Name, x.Age));

                await Bot.SendTextMessageAsync(message.Chat.Id, _message);
            }

            /// "/오늘의영어단어 명령
            else if (message.Text.StartsWith("/오늘의영어단어"))
            {
                engword[message.Chat.Id] = EngState.none;

                string _message = string.Empty;
                await Bot.SendTextMessageAsync(message.Chat.Id, "오늘의 영어단어 10개");

                //Words.ForEach(x => _message += string.Format("영어단어 : {0}\n 뜻 : {1}\r\n", x.Word, x.KorWord));
                Words.ForEach(x => _message += string.Format("영어단어 : {0}\n", x.Word));
                await Bot.SendTextMessageAsync(message.Chat.Id, _message);
            }

            /// "/도움말" 라는 명령을 받음
            else if (message.Text.StartsWith("/도움말"))
            {
                var usage = @"/사용자추가    - 사용자 추가 /사용자삭제 - 사용자 삭제 /사용자목록  - 사용자 목록 /도움말 - 도움말";
                await Bot.SendTextMessageAsync(message.Chat.Id, usage, replyMarkup : new ReplyKeyboardMarkup());
            }
            /// 그 외 다른 말을 받을 경우 사용자 상태를 보고 적절하게 대응한다.
            else
            {
                /// 예외처리
                if (!dicUserState.ContainsKey(message.Chat.Id))
                {
                    await Bot.SendTextMessageAsync(message.Chat.Id, "먼 말인지 모르겠어요.");

                    return;
                }

                /// 사용자 상태가 사용자 추가일 경우
                if (dicUserState[message.Chat.Id] == UserState.addUser)
                {
                    /// 이름,나이 로 입력을 받을 것이기 때문에 , 로 tokenizing하자
                    /// 0번은 이름, 1번은 나이
                    string[] NameAndAge = message.Text.Split(',');

                    /// 쪼갰는데 개수가 2보다 작으면 잘못된 값을 받았다 판단
                    if (NameAndAge.Length < 2)
                    {
                        await Bot.SendTextMessageAsync(message.Chat.Id, @"다시 입력해 주세요. ex)윈도우프로그래밍,28");

                        return;
                    }

                    /// 이름 나이 셋팅
                    string _name  = NameAndAge[0];
                    int    _age   = 0;
                    bool   result = Int32.TryParse(NameAndAge[1], out _age);

                    /// 나이값이 정상이면 추가
                    if (result)
                    {
                        // DB작업을 해야한다면 여기서 하면 될것같다.
                        Users.Add(new User(_name, _age));
                        await Bot.SendTextMessageAsync(message.Chat.Id, message.Text + " 사용자를 추가 했어요.");

                        dicUserState[message.Chat.Id] = UserState.none;
                    }
                    /// 나이값이 이상하면 예외
                    else
                    {
                        await Bot.SendTextMessageAsync(message.Chat.Id, @"나이가 이상해요. 다시 입력해 주세요.");
                    }
                }

                /// 사용자 상태가 사용자 삭제일 경우
                else if (dicUserState[message.Chat.Id] == UserState.deleteUser)
                {
                    /// SingleOfDefault로 사용자를 찾았는데 없으면 예외처리 있으면 삭제
                    var _user = Users.SingleOrDefault(x => x.Name == message.Text);
                    if (_user != null)
                    {
                        // DB작업을 해야한다면 여기서 하면 될것같다.
                        Users.Remove(_user);
                        await Bot.SendTextMessageAsync(message.Chat.Id, message.Text + " 사용자를 삭제 했어요.");

                        dicUserState[message.Chat.Id] = UserState.none;
                    }
                    else
                    {
                        await Bot.SendTextMessageAsync(message.Chat.Id,
                                                       message.Text + @" 사용자가 없어요. 다시 입력해 주세요.");
                    }
                }

                /// 사용자 상태가 추가, 삭제가 아닌 경우 시치미 뚝
                else
                {
                    await Bot.SendTextMessageAsync(message.Chat.Id, "먼 말인지 모르겠어요.");
                }
            }
        }
Пример #3
0
        private static async void Bot_OnMessageAsync(object sender, Telegram.Bot.Args.MessageEventArgs e)//Обртаботка текста из чата
        {
            Console.WriteLine("Message! From: " + e.Message.From.Id + "\nText: " + e.Message.Text);
            var message = e.Message;            //сообщение из чата
            var id      = message.From.Id;      //id пользователя

            if (Commands.containsId(id))        //Если id уже существует в словаре "запросов"
            {
                switch (Commands.getStatus(id)) //смотрим найденного id статус в словаре
                {
                case "full name":
                    string[] fullName = message.Text.Split();
                    await DataBase.addUserData(id, DataBase.dataTypes.last_name, fullName[0]);

                    Thread.Sleep(1000);
                    await DataBase.addUserData(id, DataBase.dataTypes.first_name, fullName[1]);

                    Thread.Sleep(1000);
                    await DataBase.addUserData(id, DataBase.dataTypes.father_name, fullName[2]);

                    Thread.Sleep(2000);
                    // Это поле в бд
                    // Распарсить вход на три слова
                    goto case "aded";

                case "date":
                    await DataBase.addUserData(id, DataBase.dataTypes.birthdate, message.Text);

                    Thread.Sleep(2000);
                    // Это поле в бд
                    goto case "aded";

                case "group":
                    await DataBase.addUserData(id, DataBase.dataTypes.ac_group, message.Text);

                    Thread.Sleep(2000);
                    // Это поле в бд
                    goto case "aded";

                case "aded":
                    if (Commands.checkAboutStatus(DataBase.userData(id)))
                    {
                        Thread.Sleep(2000);
                        var keyboard = new InlineKeyboardMarkup(
                            new InlineKeyboardButton[][]
                        {
                            // First row
                            new [] {
                                // First column
                                InlineKeyboardButton.WithCallbackData("по месту требования"),

                                // Second column
                                InlineKeyboardButton.WithCallbackData("соц защита"),
                            },
                        }
                            );

                        await bot.SendTextMessageAsync(message.Chat.Id, "Уточните ещё раз, какую нужно справку?", replyMarkup : keyboard);

                        Commands.removeStatus(id);
                    }
                    // Если чекер тру, вызываем addBid и удаляем сценарий из словоря
                    break;
                }
            }
            else //если id нет в словаре значит бот ничего не ждет от него
            {
                bool flag = false;
                if (message.Type == Telegram.Bot.Types.Enums.MessageType.Text) //если сообщение текст
                {
                    string textMes = message.Text.ToLower();                   //распознаем команду попутно приводим вводимый текст к нижнему регистру

                    if (textMes == "/start")
                    {
                        Commands.regNewUser(id);
                        Commands.hello(id);
                        flag = true;
                    }

                    if (textMes == "привет")
                    {
                        Commands.hello(id);
                        flag = true;
                    }
                    if (textMes == "конец пары")
                    {
                        Commands.endClassTime(id);
                        flag = true;
                    }
                    if (textMes == "карта")
                    {
                        Commands.map(id);
                        flag = true;
                    }
                    if (textMes == "сессия")
                    {
                        Commands.setka(id);
                        flag = true;
                    }
                    if (textMes == "расписание")
                    {
                        Commands.timetable(id);
                        flag = true;
                    }
                    if (textMes == "статус справок")
                    {
                        Commands.status(id);
                        flag = true;
                    }
                    if (textMes == "мероприятия")
                    {
                        Commands.events(id);
                        flag = true;
                    }
                    // inline buttons
                    if (textMes == "справка") //Если ввели слово справка создаем инлайн кнопки с вариантами
                    {
                        var keyboard = new InlineKeyboardMarkup(
                            new InlineKeyboardButton[][]
                        {
                            // First row
                            new [] {
                                // First column
                                InlineKeyboardButton.WithCallbackData("по месту требования"),

                                // Second column
                                InlineKeyboardButton.WithCallbackData("соц защита"),
                            },
                        }
                            );

                        await bot.SendTextMessageAsync(message.Chat.Id, "Какую тебе нужно справку?", replyMarkup : keyboard);

                        flag = true;
                    }


                    if (!flag || textMes == "/buttons")
                    {
                        var keyboard = new ReplyKeyboardMarkup
                        {
                            Keyboard = new[] {
                                new[]                  // row 1
                                {
                                    new KeyboardButton("Привет"),
                                    new KeyboardButton("Конец пары")
                                },
                                new[]
                                {
                                    new KeyboardButton("Мероприятия"),
                                    new KeyboardButton("Расписание")
                                },
                                new[]
                                {
                                    new KeyboardButton("Сессия"),
                                    new KeyboardButton("Справка")
                                },
                                new[]
                                {
                                    new KeyboardButton("Карта"),
                                    new KeyboardButton("Статус справок")
                                },
                            },
                            ResizeKeyboard = true
                        };
                        await bot.SendTextMessageAsync(message.Chat.Id, "Вот тебе кнопки!", replyMarkup : keyboard);
                    }
                }
            }
        }
Пример #4
0
        private static void botOnMessgage(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            Console.Out.WriteLine(e.Message.Text);
            if (e.Message.Type == Telegram.Bot.Types.Enums.MessageType.Text)
            {
                String text = e.Message.Text;
                String arg;
                var    rgxClearMatch  = Regex.Match(text.ToLower(), "^/clear( \".+\")");
                var    rgxNewMatch    = Regex.Match(text.ToLower(), "^/new( \".+\")");
                var    rgxChangeMatch = Regex.Match(text.ToLower(), "^/change( \".+\")");
                var    rgxEntryMatch  = Regex.Match(text.ToLower(), "^[\\S]+ (\".+\")");
                var    rgxArg         = Regex.Match(text, "\".+\"");
                if (rgxArg.Value.Length > 2)
                {
                    arg = rgxArg.Value.Substring(1, rgxArg.Length - 2);
                }
                else
                {
                    arg = "";
                }


                if (text.ToLower() == "/help")
                {
                    helpMenu(e);
                }
                else if (rgxClearMatch.Success)
                {
                    clearDict(e, arg);
                }
                else if (rgxNewMatch.Success)
                {
                    if (metaDict.ContainsKey(arg))
                    {
                        bot.SendTextMessageAsync(e.Message.Chat.Id, "This dictionary already exists");
                    }
                    else
                    {
                        metaDict.Add(arg, new Dictionary <string, string>());
                        bot.SendTextMessageAsync(e.Message.Chat.Id, "Dictionary \"" + arg + "\" has been added");
                    }
                }
                else if (rgxChangeMatch.Success)
                {
                    if (metaDict.ContainsKey(arg))
                    {
                        currentDict    = metaDict[arg];
                        currentDictKey = arg;
                        bot.SendTextMessageAsync(e.Message.Chat.Id, "Dictionary changed to: " + arg);
                    }
                    else
                    {
                        bot.SendTextMessageAsync(e.Message.Chat.Id, "That dictionary does't exist");
                    }
                }
                else if (text.ToLower() == "/all" | text.ToLower() == "/every")
                {
                    if (metaDict.Count == 0)
                    {
                        bot.SendTextMessageAsync(e.Message.Chat.Id, "There are no dictionarys available");
                    }

                    foreach (KeyValuePair <string, Dictionary <string, string> > dict in metaDict)
                    {
                        bot.SendTextMessageAsync(e.Message.Chat.Id, dict.Key);

                        if (text.ToLower() == "/every")
                        {
                            foreach (KeyValuePair <string, string> dictEntry in dict.Value)
                            {
                                bot.SendTextMessageAsync(e.Message.Chat.Id, dictEntry.Key + " : " + dictEntry.Value);
                            }
                        }
                    }

                    Console.WriteLine("Outputting Dict");
                }
                else if (rgxEntryMatch.Success)
                {
                    string[] res = Regex.Split(text, " ");
                    if (currentDict == null)
                    {
                        return;
                    }
                    if (currentDict.ContainsKey(res[0]))
                    {
                        currentDict[res[0]] = arg;
                        bot.SendTextMessageAsync(e.Message.Chat.Id, res[0] + " updated to: " + arg);
                    }
                    else
                    {
                        currentDict.Add(res[0], arg);
                        bot.SendTextMessageAsync(e.Message.Chat.Id, res[0] + " : " + arg + " Added");
                        Console.WriteLine("<" + res[0] + " : " + arg + "> Added");
                    }
                }
                else
                {
                    bot.SendTextMessageAsync(e.Message.Chat.Id, "Sorry that was not a recognised value.\nPlease send a one word key you would like to store then a value in speech marks\n e.g Scrubs \"Are banned\"");
                    Console.WriteLine("Fault");
                }
            }
        }
Пример #5
0
 public DataResult(Telegram.Bot.Args.MessageEventArgs rawdata)
 {
     this.RawMessageData = rawdata;
     this.Message        = rawdata.Message;
 }
Пример #6
0
        protected async void Api_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            // first awaits some time to prevent flooding
            await Task.Delay(Configs.BasicDelay);

            // collect message info
            // and bind tgUser with dbUser
            Message msg    = e.Message;
            User    tgUser = e.Message.From;
            IUser   user   = await UsersController.GetOrCreateUser(tgUser);

            BotResponse response = new BotResponse(user);

            // lock the context, so user cant spam thousand messages
            // while some operations execute!
            if (ContextController.GetUserState(user)?.OccupieContext() == false)
            {
                return;
            }


            // First of all checks if user registered in db or wherever else
            if (user.IsRegistered == false)
            {
                // all required register actions done in method...
                response = await DoRegistration(user);

                await UiController.HandleResponse(response, msg.Chat.Id);

                ContextController.GetUserState(user).RealiseContex();
                return;
                // ...just await and exit from here
            }


            // checks from chat or from user sended message
            // and call according methods for handling input
            if (!IsChat())             // <<--- Msg from user
            {
                var userState    = ContextController.GetUserState(user);
                var handledInput = HandleUserInputMessage(msg, user);

                // if user didn't start any conversation yet
                if (userState.CurrentDialog == null)
                {
                    response = await Dialogs.RootDialog.Execute(user);
                }

                else if (handledInput.Type == BotRequest.RequestType.Command)
                {
                    // command detected - breack context, build new and execute it

                    // something like stub
                    // change later!!!!!!!!!!!!!!!!!!!!!!
                    // nothing to do, just send current user dialog
                    response = new BotResponse(null, BotResponse.ResponseType.Dialog, user, userState.CurrentDialog);
                }
                else if (userState.CurrentState == UserContextState.ContextState.AwaitInput)
                {
                    response = ContextController.AddRequest(user, handledInput);
                }
                else
                {
                    // nothing to do, just send current user dialog
                    response = new BotResponse(null, BotResponse.ResponseType.Dialog, user, userState.CurrentDialog);
                }
            }

            // message comes from chat,
            // so handle it in another way
            else           // <<--- Msg from chat
            {
                throw new NotImplementedException("ToDo!");
                // >>>>>>>>>>>>>>>>>>>ToDo<<<<<<<<<<<<<<<<<<<<<
            }

            // display whatewer results come from response
            // user state updates there
            await UiController.HandleResponse(response, msg.Chat.Id);

            ContextController.GetUserState(user).RealiseContex();
            // next message can be handled again

            #region microservice methods
            // some inline service methods
            bool IsChat() => msg.From.Id != msg.Chat.Id;

            #endregion
        }
Пример #7
0
        private async void MessageReceived(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            if (e.Message.Type != Telegram.Bot.Types.Enums.MessageType.TextMessage)
            {
                return;
            }
            string response;
            long   chatID  = e.Message.Chat.Id;
            string message = e.Message.Text.ToLower();

            if (message.StartsWith(SubscribeMessageDescription))
            {
                message = message.Replace(SubscribeMessageDescription + " ", "").ToUpper();
                try
                {
                    if (Subscribe(message, chatID))
                    {
                        response = "You were successfully subscribed.";
                    }
                    else
                    {
                        response = "Seems you're subscribed already.";
                    }
                }
                catch
                {
                    response = IncorrectQueryResponse;
                }
            }
            else if (message.StartsWith(UnsubscribeMessageDescription))
            {
                message = message.Replace(UnsubscribeMessageDescription + " ", "").ToUpper();
                try
                {
                    if (Unsubscribe(message, chatID))
                    {
                        response = "You were successfully unsubscribed.";
                    }
                    else
                    {
                        response = "Seems you weren't subscribed before.";
                    }
                }
                catch
                {
                    response = IncorrectQueryResponse;
                }
            }
            else if (message.StartsWith(FreeDatesMessageDescription))
            {
                message = message.Replace(FreeDatesMessageDescription + " ", "").ToUpper();
                try
                {
                    List <string> freeDates = GetFreeDates(message);
                    if (freeDates.Count != 0)
                    {
                        response = string.Format("Free dates for {0} embassy:\n{1}", message, freeDates.BuildString());
                    }
                    else
                    {
                        response = string.Format("There are no free dates for {0} embassy.", message);
                    }
                }
                catch (KeyNotFoundException)
                {
                    response = IncorrectQueryResponse;
                }
                catch (Exception ex)
                {
                    response = "Unable to fetch free dates. Reason: " + ex.Message;
                }
            }
            else if (message.StartsWith(BusyDatesMessageDescription))
            {
                message = message.Replace(BusyDatesMessageDescription + " ", "").ToUpper();
                try
                {
                    List <string> busyDates = GetBusyDates(message);
                    if (busyDates.Count != 0)
                    {
                        response = string.Format("Busy dates for {0} embassy:\n{1}", message, busyDates.BuildString());
                    }
                    else
                    {
                        response = string.Format("Unable to find busy dates for {0} embassy.", message);
                    }
                }
                catch (KeyNotFoundException)
                {
                    response = IncorrectQueryResponse;
                }
                catch (Exception ex)
                {
                    response = "Unable to fetch busy dates. Reason: " + ex.Message;
                }
            }
            else if (message.StartsWith(LastUpdateMessageDescription))
            {
                message = message.Replace(LastUpdateMessageDescription + " ", "").ToUpper();
                try
                {
                    response = GetLastUpdate(message).ToString();
                }
                catch
                {
                    response = IncorrectQueryResponse;
                }
            }
            else if (message == HelpMessageDescription)
            {
                response = HelpMessageResponse;
            }
            else if (message == AvailableVisasMessageDescription)
            {
                List <string> registered = GetRegisteredEmbassies();
                if (registered.Count != 0)
                {
                    response = "Available embassies:\n" + registered.BuildString();
                }
                else
                {
                    response = "There are no available embassies to check.";
                }
            }
            else
            {
                response = IncorrectQueryResponse;
            }
            await Bot.SendTextMessageAsync(chatID, response);
        }
Пример #8
0
        /// <summary>
        /// Дефолтный обработчик события получения сообщения ботом
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void MessageListener(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            var message = e.Message;

            await StartOfDefault(message);
        }
Пример #9
0
        /// <summary>
        /// Обработчик сообщения боту
        /// </summary>
        /// <param name="sender">Объект отправивший сигнал</param>
        /// <param name="e">Событие отправки сообщения</param>
        private static async void Bot_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            var message = e.Message;

            if (message == null)
            {
                return;                     // если сообщение null выходим из метода
            }
            long chatId = message.Chat.Id;  // идентификатор чата

            // Получение и сохранение ботом фото, аудио, видео и документа (и отправка их назад пользователю)
            switch (message.Type)
            {
            case MessageType.Photo:                                                                    // пользователь прислал фото
                string fileNamePhoto = message.Photo[message.Photo.Length - 1].FileUniqueId + ".jpeg"; // имя файла фото
                string fileIdPhoto   = message.Photo[message.Photo.Length - 1].FileId;                 // идентификатор файла фото

                // Последнее фото в массиве PhotoSize является оригиналом
                DownLoad(fileIdPhoto, fileNamePhoto);

                // Отправка фото обратно
                await Bot.SendPhotoAsync(chatId, fileIdPhoto);

                break;

            case MessageType.Audio:                                                                      // пользователь прислал аудио
                string fileNameAudio = message.Audio.Title + "." + message.Audio.MimeType.Split("/")[1]; // имя файла аудио
                string fileIdAudio   = message.Audio.FileId;                                             // идентификатор файла аудио

                DownLoad(fileIdAudio, fileNameAudio);

                // Отправка аудио обратно
                await Bot.SendAudioAsync(chatId, fileIdAudio);

                break;

            case MessageType.Video:                                                                             // пользователь прислал видео
                string fileNameVideo = message.Video.FileUniqueId + "." + message.Video.MimeType.Split("/")[1]; // имя файла видео
                string fileIdVideo   = message.Video.FileId;                                                    // идентификатор файла видео

                DownLoad(fileIdVideo, fileNameVideo);

                // Отправка аудио обратно
                await Bot.SendVideoAsync(chatId, fileIdVideo);

                break;

            case MessageType.Document:                               // пользователь прислал документ
                string fileNameDocument = message.Document.FileName; // имя файла документа
                string fileIdDocument   = message.Document.FileId;   // идентификатор файла документа

                DownLoad(fileIdDocument, fileNameDocument);

                // Отправка аудио обратно
                await Bot.SendDocumentAsync(chatId, fileIdDocument);

                break;


            case MessageType.Text:
                // Если чат пользователя в игре, то играем
                if (games.isFindId(chatId))
                {
                    string city = message.Text;     // город, который отправил пользователь

                    // Если пользователь решил выйти из игры
                    if (city.ToUpper() == "КОНЕЦ")
                    {
                        games.removeGame(chatId);       // удаляем игру
                        return;
                    }

                    // Если город есть в "википедии" бота
                    if (games.returnGame(chatId).isWikiKnowCity(city))
                    {
                        string lastCityBot = games.returnGame(chatId).LastCityBotSay;       // предыдущий названный ботом город

                        // Если бот уже называл город
                        if (!String.IsNullOrEmpty(lastCityBot))
                        {
                            if (char.ToUpper(lastCityBot[lastCityBot.Length - 1]) == 'Ь')
                            {
                                if (char.ToUpper(lastCityBot[lastCityBot.Length - 2]) != char.ToUpper(city[0]))
                                {
                                    await Bot.SendTextMessageAsync(chatId, $"Город должен начинаться на букву '{lastCityBot[lastCityBot.Length - 2]}'!");

                                    return;
                                }
                            }
                            else
                            {
                                if (char.ToUpper(lastCityBot[lastCityBot.Length - 1]) != char.ToUpper(city[0]))
                                {
                                    await Bot.SendTextMessageAsync(chatId, $"Город должен начинаться на букву '{lastCityBot[lastCityBot.Length - 1]}'!");

                                    return;
                                }
                            }
                        }


                        games.returnGame(chatId).delCitiyInWikiBOT(city);       // удаляем город из общего списка городов ("википедии бота"), чтобы город не повторялся
                        games.returnGame(chatId).delCityInKnowBOT(city);        // удаляем город из "базы знаний" бота

                        // Если город оканчивается на мягкий знак, то бот ищет в своей "базе знаний" город начинающийся на предпоследнюю букву
                        if (city[city.Length - 1] == 'ь')
                        {
                            city = games.returnGame(chatId).cityWhoBotKnow(city[city.Length - 2]);
                        }
                        else
                        {
                            city = games.returnGame(chatId).cityWhoBotKnow(city[city.Length - 1]);
                        }

                        // Если бот не может дать ответ то завершаем игру
                        if (String.IsNullOrEmpty(city))
                        {
                            await Bot.SendTextMessageAsync(chatId, "Молодец, выигрышь за тобой!");

                            await Bot.SendTextMessageAsync(chatId, "конец");

                            Console.WriteLine($"Выиграл! username: '******', имя: '{message.Chat.FirstName}', фамилия: {message.Chat.LastName}"); // логирование

                            games.removeGame(chatId);                                                                                                              // удаляем игру
                            return;
                        }

                        games.returnGame(chatId).LastCityBotSay = city;     // последний названный ботом город (для проверки следующего города, введенного пользователем)

                        string htmlCity = $"<i>{city}</i>";
                        await Bot.SendTextMessageAsync(chatId, htmlCity, parseMode : ParseMode.Html);

                        games.returnGame(chatId).delCitiyInWikiBOT(city);       // удаляем город из общего списка городов ("википедии бота"), чтобы город не повторялся
                        games.returnGame(chatId).delCityInKnowBOT(city);        // удаляем город из "базы знаний" бота
                    }
                    else
                    {
                        // Если города нет в "википедии" бота, либо его уже называли
                        await Bot.SendTextMessageAsync(chatId, $"Город '{city}' моя Википедия не знает! Возможно этот город уже называли.");

                        return;
                    }

                    return;
                }

                break;

            default:

                break;
            }


            if (message.Text == null)
            {
                return;                         // если текст сообщения null выходим из метода
            }
            // Сообщение от бота (в формате HTML)
            var answerText = "Меня зовут Сказочник.\nЯ люблю общаться с людьми, рассказывать разные сказки и играть в 'Города'!\n\n" +
                             "<b>Выбери команду:</b>\n" +
                             "/start - <i>запуск бота</i>\n" +
                             "/menu - <i>вывод меню</i>";

            switch (message.Text)
            {
            case "/start":
                await Bot.SendTextMessageAsync(chatId, answerText, ParseMode.Html);     // вывод начального сообщения

                break;

            case "/menu":
                // Создаем меню (клавиатуру)
                var inlineKeyboard = new InlineKeyboardMarkup(new[] {
                    new[] { InlineKeyboardButton.WithCallbackData(menu["Story"]) },
                    new[] { InlineKeyboardButton.WithCallbackData(menu["Sities"]) }
                });

                await Bot.SendTextMessageAsync(chatId, "<b>Чем займемся?</b>", parseMode : ParseMode.Html, replyMarkup : inlineKeyboard);

                break;

            default:
                // Общение с ботом через DialogFlow
                // Инициализируем аргументы ответа
                SessionName session    = SessionName.FromProjectSession(projectID, sessionID);
                var         queryInput = new QueryInput {
                    Text = new TextInput {
                        Text         = message.Text,
                        LanguageCode = "ru-ru"
                    }
                };

                // Создаем ответ пользователю
                DetectIntentResponse response = await dFlowClient.DetectIntentAsync(session, queryInput);

                answerText = response.QueryResult.FulfillmentText;

                if (answerText == "")
                {
                    // Intents для непонятных боту фраз
                    queryInput.Text.Text = "непонятно";
                }

                // Создаем ответ пользователю, если введен непонятный вопрос (набор букв)
                response = await dFlowClient.DetectIntentAsync(session, queryInput);

                answerText = response.QueryResult.FulfillmentText;

                Console.WriteLine($"Общается username: '******', имя: '{message.Chat.FirstName}', фамилия: {message.Chat.LastName}"); // логирование

                await Bot.SendTextMessageAsync(chatId, answerText);                                                                                    // отправляем пользователю ответ

                break;
            }
        }
Пример #10
0
        private static void MessageRecieved(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            MessageAnalyze.MessageFromUser(e.Message);

            /*
             * if (e.Message.Type == Telegram.Bot.Types.Enums.MessageType.Text)
             * {
             *  if (Application.messagesEnabled) Console.WriteLine($"{e.Message.From.FirstName} [{DateTime.Now.Hour}:{DateTime.Now.Minute}]: {e.Message.Text}");
             *  if (e.Message.Text == "/start")
             *  {
             *      bot.SendTextMessageAsync(e.Message.Chat.Id, $"⚡️Введите ФИО человека: ");
             *  }
             *  else
             *  {
             *      List<Person> res = PdfExplorer.Find(e.Message.Text);
             *      if (res != null && res.Count > 0)
             *      {
             *          if (res.Count == 1)
             *          {
             *              string formOfStudy = "";
             *              switch (res[0].formOfStudy)
             *              {
             *                  case Person.StudyForm.budget: formOfStudy = "бюджет"; break;
             *                  case Person.StudyForm.paid: formOfStudy = "платная"; break;
             *                  case Person.StudyForm.targeting: formOfStudy = "целевик"; break;
             *              }
             *              bot.SendTextMessageAsync(e.Message.Chat.Id, $"Найден студент:\n\n✅{res[0].fullName}\n💳 Форма обучения: {formOfStudy}\n📚 Сумма баллов: " +
             *                  $"{res[0].points}\n⚡️ Группа: {res[0].group}\n📅 Год поступления: {res[0].year}");
             *          }
             *          else if (res.Count > 1)
             *          {
             *              bot.SendTextMessageAsync(e.Message.Chat.Id, $"Найдено студентов: {res.Count}\n");
             *              int counter = 0;
             *              string responce = "";
             *              foreach (Person per in res)
             *              {
             *                  string formOfStudy = "";
             *                  switch (per.formOfStudy)
             *                  {
             *                      case Person.StudyForm.budget: formOfStudy = "бюджет"; break;
             *                      case Person.StudyForm.paid: formOfStudy = "платная"; break;
             *                      case Person.StudyForm.targeting: formOfStudy = "целевик"; break;
             *                  }
             *                  responce += $"✅{per.fullName}\n💳 Форма обучения: {formOfStudy}\n📚 Сумма баллов: " +
             *                      $"{per.points}\n⚡️ Группа: {per.group}\n📅 Год поступления: {per.year}\n\n--------------------\n\n";
             *                  counter++;
             *                  if (counter > 10)
             *                  {
             *                      counter = 0;
             *                      bot.SendTextMessageAsync(e.Message.Chat.Id, responce);
             *                      responce = "";
             *                  }
             *              }
             *              bot.SendTextMessageAsync(e.Message.Chat.Id, responce);
             *          }
             *      }
             *      else bot.SendTextMessageAsync(e.Message.Chat.Id, $"Студент не найден");
             *  }
             * }
             */
        }
Пример #11
0
        private static async void Bot_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            if (e.Message.Text.StartsWith("help"))
            {
                await Bot.SendTextMessageAsync(e.Message.Chat.Id, "Hello, " + e.Message.Chat.Username);

                await Bot.SendTextMessageAsync(e.Message.Chat.Id, "Send /image(type). Type can be either nebula, cluster or galaxy.");
            }

            if (e.Message.Text.StartsWith("/image("))
            {
                var query = e.Message.Text.Split('(')[1].Split(')')[0];

                if (query == "nebula1")
                {
                    using (var stream = System.IO.File.OpenRead(imagesPath + nebulas[0]))
                    {
                        InputOnlineFile inputOnlineFile = new InputOnlineFile(stream);
                        await Bot.SendPhotoAsync(e.Message.Chat.Id, inputOnlineFile, "<i>The Crab Nebula</i>", Telegram.Bot.Types.Enums.ParseMode.Html);
                    }
                }

                if (query == "cluster1")
                {
                    using (var stream = System.IO.File.OpenRead(imagesPath + clusters[0]))
                    {
                        InputOnlineFile inputOnlineFile = new InputOnlineFile(stream);
                        await Bot.SendPhotoAsync(e.Message.Chat.Id, inputOnlineFile, "<i>The globular cluster in the constellation Aquarius</i>", Telegram.Bot.Types.Enums.ParseMode.Html);
                    }
                }

                if (query == "galaxy1")
                {
                    using (var stream = System.IO.File.OpenRead(imagesPath + galaxies[0]))
                    {
                        InputOnlineFile inputOnlineFile = new InputOnlineFile(stream);
                        await Bot.SendPhotoAsync(e.Message.Chat.Id, inputOnlineFile, "<i>The Andromeda Galaxy is the nearest major galaxy to the Milky Way</i>", Telegram.Bot.Types.Enums.ParseMode.Html);
                    }
                }

                /*if (query == "nebulas")
                 * {
                 *  List<FileStream> streams = new List<FileStream>
                 *  {
                 *      System.IO.File.OpenRead(imagesPath + nebulas[0]),
                 *      System.IO.File.OpenRead(imagesPath + nebulas[1]),
                 *      System.IO.File.OpenRead(imagesPath + nebulas[2]),
                 *  };
                 *
                 *  List<InputMediaPhoto> media = new List<InputMediaPhoto>();
                 *
                 *  foreach(var stream in streams)
                 *  {
                 *      media.Add(new InputMediaPhoto(new InputMedia(stream, stream.Name)));
                 *  }
                 *  await Bot.SendMediaGroupAsync(media, e.Message.Chat.Id);
                 *
                 *  foreach(var stream in streams)
                 *  {
                 *      stream.Close();
                 *  }
                 * }*/

                Random rand = new Random();

                if (query == "nebula")
                {
                    int nebulaR = rand.Next(nebulas.Count);
                    using (var stream = System.IO.File.OpenRead(imagesPath + nebulas[nebulaR]))
                    {
                        InputOnlineFile inputOnlineFile = new InputOnlineFile(stream);
                        await Bot.SendPhotoAsync(e.Message.Chat.Id, inputOnlineFile, "<i>Random nebula image</i>", Telegram.Bot.Types.Enums.ParseMode.Html);
                    }
                }

                if (query == "cluster")
                {
                    int clusterR = rand.Next(clusters.Count);
                    using (var stream = System.IO.File.OpenRead(imagesPath + clusters[clusterR]))
                    {
                        InputOnlineFile inputOnlineFile = new InputOnlineFile(stream);
                        await Bot.SendPhotoAsync(e.Message.Chat.Id, inputOnlineFile, "<i>Random cluster image</i>", Telegram.Bot.Types.Enums.ParseMode.Html);
                    }
                }

                if (query == "galaxy")
                {
                    int galaxyR = rand.Next(galaxies.Count);
                    using (var stream = System.IO.File.OpenRead(imagesPath + galaxies[galaxyR]))
                    {
                        InputOnlineFile inputOnlineFile = new InputOnlineFile(stream);
                        await Bot.SendPhotoAsync(e.Message.Chat.Id, inputOnlineFile, "<i>Random cluster image</i>", Telegram.Bot.Types.Enums.ParseMode.Html);
                    }
                }
            }
        }
Пример #12
0
 private void Bot_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
 {
     _chatIds.Add(e.Message.Chat.Id);
     Bot.SendTextMessageAsync(e.Message.Chat.Id, "OK!");
 }
Пример #13
0
        private static void BotClient_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            if (!e.Message.From.IsBot &&
                e.Message.Type == Telegram.Bot.Types.Enums.MessageType.TextMessage &&
                e.Message.Text.StartsWith("/"))
            {
                StringBuilder responseMessage = new StringBuilder();

                responseMessage.AppendLine(string.Format("Machine - '{0}'", Environment.MachineName));
                responseMessage.AppendLine(string.Format("WorkerName - '{0}'", ConfigManager.GeneralConfig.WorkerName));
                string message = e.Message.Text.ToLower();
                if (message == "/info")
                {
                    responseMessage.AppendLine(_GetStatus(TelegramOptions.FullStatus));
                }
                else if (message == "/running")
                {
                    responseMessage.AppendLine(_GetStatus(TelegramOptions.IsRunning));
                }
                else if (message == "/profit")
                {
                    responseMessage.AppendLine(_GetStatus(TelegramOptions.Profit));
                }
                else if (message == string.Format("/forcestop:{0}", ConfigManager.GeneralConfig.WorkerName))
                {
                    responseMessage.AppendLine(_GetStatus(TelegramOptions.ForceStop));
                }
                else if (message == string.Format("/forcestart:{0}", ConfigManager.GeneralConfig.WorkerName.ToLower()))
                {
                    responseMessage.AppendLine(_GetStatus(TelegramOptions.ForceStart));
                }
                else if (message == string.Format("/forcerestart:{0}", ConfigManager.GeneralConfig.WorkerName))
                {
                    responseMessage.AppendLine(_GetStatus(TelegramOptions.ForceRestart));
                }
                else if (message == "/start")
                {
                    responseMessage.AppendLine(string.Format("Bot start successfully'"));
                }
                else if (message.StartsWith("/sendautoinfo"))
                {
                    if (message == "/sendautoinfo")
                    {
                        SendAutoInfo();
                    }
                }
                else if (message.StartsWith("/stopautoinfo"))
                {
                    if (message == "/stopautoinfo")
                    {
                        StopAutoInfo();
                    }
                }
                else if (message.StartsWith("/addtoautoinfo"))
                {
                    if (ConfigManager.GeneralConfig.TelegramChatID.Split(',').Contains(e.Message.Chat.Id.ToString()))
                    {
                        responseMessage.AppendLine("Already added to the AutoInfo List");
                    }
                    else
                    {
                        ConfigManager.GeneralConfig.TelegramChatID += "," + e.Message.Chat.Id.ToString();
                        responseMessage.AppendLine("successfully added to the AutoInfo List");
                    }
                }
                else
                {
                    responseMessage.AppendLine(string.Format("Invalid Command: '{0}'", e.Message.Text));
                }

                SendText(responseMessage.ToString(), e.Message.Chat.Id.ToString());
            }
        }
Пример #14
0
        // async OnMessage event task for the bot
        // it has to be async so the bot can be always listening
        private async static void BotClient_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            // Normal text message. Checks wether the message does have text.
            // in case it does, the bot answers.
            #region Text Message
            if (e.Message.Text != null)
            {
                Console.WriteLine($"Received text message in chat {e.Message.Chat.Id}.");

                // the bot sends asynchronously a message to the chat
                await botClient.SendTextMessageAsync(
                    chatId : e.Message.Chat.Id,
                    text : "You said:\n" + e.Message.Text
                    );
            }
            #endregion

            // Normal text message, with all the properties
            // a text message can have.
            #region Text message with properties
            Message textMessage = await botClient.SendTextMessageAsync(
                chatId : e.Message.Chat, // or a chat id: 123456789
                text : "Trying *all the parameters* of `sendMessage` method",
                parseMode : ParseMode.Markdown,
                disableNotification : true,
                replyToMessageId : e.Message.MessageId,
                replyMarkup : new InlineKeyboardMarkup(InlineKeyboardButton.WithUrl(
                                                           "Check sendMessage method",
                                                           "https://core.telegram.org/bots/api#sendmessage"
                                                           ))
                );

            #endregion

            // Almost all of the methods for sending messages return you
            // the message you just sent.
            #region Messages return you the message you sent (as an object)
            Console.WriteLine(
                $"{textMessage.From.FirstName} sent message {textMessage.MessageId} " +
                $"to chat {textMessage.Chat.Id} at {textMessage.Date.ToLocalTime()}. " + // if you don't use ToLocalTime(), the bot will show the UTC time.
                $"It is a reply to message {textMessage.ReplyToMessage.MessageId} " +
                $"and has {textMessage.Entities.Length} message entities."
                );
            #endregion

            // Photo message. It gets the image from a URL on the internet.
            // All images can have captions. You can use HTML or Markdown on them.
            #region Photo Message
            Message photoMessage = await botClient.SendPhotoAsync(
                chatId : e.Message.Chat,
                photo : "https://github.com/TelegramBots/book/raw/master/src/docs/photo-ara.jpg",
                caption : "<b>Ara bird</b>. <i>Source</i>: <a href=\"https://pixabay.com\">Pixabay</a>",
                parseMode : ParseMode.Html
                );

            #endregion

            // Sticker message. Sticker files should be in WebP format.
            // Sends two messages. The first one gets the sticker by passing HTTP URL
            // to WebP sticker file, and the second by reusing the file_id of the
            // first sticker (kinda like a cache?)
            #region Sticker Messages
            Message stickerMessage1 = await botClient.SendStickerAsync(
                chatId : e.Message.Chat,
                sticker : "https://github.com/TelegramBots/book/raw/master/src/docs/sticker-fred.webp"
                );

            Message stickerMessage2 = await botClient.SendStickerAsync(
                chatId : e.Message.Chat,
                sticker : stickerMessage1.Sticker.FileId
                );

            #endregion

            // Audio message. Opens it in Media Player. MP3 Format.
            // Telegram can read metadata from the MP3 file (that's why
            // there are commented properties; the bot gets the same
            // properties, but from the file metadata!)
            #region Audio Message
            Message audioMessage = await botClient.SendAudioAsync(
                e.Message.Chat,
                "https://github.com/TelegramBots/book/raw/master/src/docs/audio-guitar.mp3"

                /*,
                 * performer: "Joel Thomas Hunger",
                 * title: "Fun Guitar and Ukulele",
                 * duration: 91 // in seconds
                 */
                );

            #endregion

            // Voice message. Not opened in Media Player (played directly
            // on the chat). OGG Format.
            // In this case, the OGG file is on our disk!
            #region Voice Message
            Message voiceMessage;
            using (var stream = System.IO.File.OpenRead("C:/Users/Biel/source/repos/TelegramBot/voice-nfl_commentary.ogg"))
            {
                voiceMessage = await botClient.SendVoiceAsync(
                    chatId : e.Message.Chat,
                    voice : stream,
                    duration : 36
                    );
            }
            #endregion


            // You can send MP4 files as a regular video or as a video note.
            // Other video formats must be sent as a file.

            // Video message. They can have caption, reply, and reply markup
            // (like other multimedia messages)
            // You can optionally specify the duration and the resolution
            // of the video. In this case the video is streamed,
            // meaning the user can partly watch the video on stream, without
            // having to download it completely.
            #region Video Message
            Message videoMessage = await botClient.SendVideoAsync(
                chatId : e.Message.Chat,
                video : "https://raw.githubusercontent.com/TelegramBots/book/master/src/docs/video-countdown.mp4",
                thumb : "https://raw.githubusercontent.com/TelegramBots/book/master/src/2/docs/thumb-clock.jpg",
                supportsStreaming : true
                );

            #endregion

            // Video note message. They are shown in circles to the user.
            // They are usually short (1 minute or less).
            // You can send a video note only by the video file or
            // reusing the file_id of another video note.
            // (sending it by its HTTP URL is not supported currently)
            #region Video Note Message
            Message videoNoteMessage;
            using (var stream = System.IO.File.OpenRead("C:/Users/step/Source/Repos/TelegramBotExamples/video-waves.mp4"))
            {
                videoNoteMessage = await botClient.SendVideoNoteAsync(
                    chatId : e.Message.Chat,
                    videoNote : stream,
                    duration : 47,
                    length : 360    // value of width/height
                    );
            }
            #endregion

            // Poll message. They can be sent only to groups and channels.
            // You can optionally send a keyboard with a poll,
            // both inline and a regular one.
            #region Poll Message
            Message pollMessage = await botClient.SendPollAsync(
                chatId : "@group_or_channel_username",
                question : "Did you ever hear the tragedy of Darth Plagueis The Wise?",
                options : new []
            {
                "Yes for the hundredth time!",
                "No, who's that?"
            }
                );

            #endregion

            // To stop the poll, you need to know original chat and message ids
            // (you get them from the Poll object you get on SendPollAsync, the pollMessage)
            #region Closing a Poll
            Poll poll = await botClient.StopPollAsync(
                chatId : pollMessage.Chat.Id,
                messageId : pollMessage.MessageId
                );

            #endregion


            // Filtering messages for commands
            if (e.Message.Text == "/sayhello")
            {
                Message sayHello = await botClient.SendTextMessageAsync
                                   (
                    chatId : e.Message.Chat.Id,
                    text : "Hello! Glad to see you!"
                                   );
            }

            if (e.Message.Text == "/saygoodbye")
            {
                Message sayHello = await botClient.SendTextMessageAsync
                                   (
                    chatId : e.Message.Chat.Id,
                    text : "Bye! Have a nice day!"
                                   );
            }
        }
Пример #15
0
        private async static void BotClient_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            var message = e.Message;

            if (message.Type != MessageType.Text)
            {
                return;
            }
            Console.WriteLine($"{message.From.FirstName} отправил сообщение: {message.Text} ПО времени {DateTime.Now}");

            if (message.Text.StartsWith("/buy"))
            {
                //////////////////////////PAY//////////////////////
                id = message.Text.Replace("/buy", string.Empty).TrimStart().Split(',');
                MainWork  newWork  = new MainWork();
                BDwithPay pay      = new BDwithPay();
                var       boolInfo = newWork.CheckInDBAcc(id).GetAwaiter().GetResult();
                if (boolInfo.All(x => x == true))
                {
                    var    cost      = newWork.CostsID(id);      // цена акков по ID
                    int    IdPeop    = e.Message.From.Id;        // ID человека
                    string FirstName = e.Message.From.FirstName; // Ник юзера
                    string LastName  = e.Message.From.LastName;  // ник юзера
                    string url       = pay.Method(IdPeop, FirstName, LastName, id).GetAwaiter().GetResult();
                    //сделать проверку на наличие акков
                    await botClient.SendTextMessageAsync(e.Message.Chat, "На покупку у вас будет 5 минут, после ваш счет будет отменен");

                    await botClient.SendTextMessageAsync(e.Message.Chat, url);

                    if (pay.UpdatePayments(id).GetAwaiter().GetResult() == true)
                    {
                        var accsForGive = newWork.BuyId(id).GetAwaiter().GetResult();
                        foreach (var acc in accsForGive)
                        {
                            await botClient.SendTextMessageAsync(e.Message.Chat, acc);
                        }
                        await botClient.SendTextMessageAsync(e.Message.Chat, "Спасибо за покупку, покупайте еще!");

                        Console.WriteLine($"Была совершена покупка: FirstName: {e.Message.From.FirstName} || LastName: {e.Message.From.LastName}");
                    }
                    else
                    {
                        await botClient.SendTextMessageAsync(e.Message.Chat, "Вы не успели оплатить. Ваша заявка отклонена!");

                        Console.WriteLine($"Не успел оплатить за аккаунты: FirstName:{e.Message.From.FirstName} LastName:{e.Message.From.LastName}");
                    }
                }
                else
                {
                    await botClient.SendTextMessageAsync(e.Message.Chat, "Один или несколько аккаунтов из вашего списка уже КУПЛЕНЫ либо вы ошиблись с вводом ID!");

                    Console.WriteLine($"Нехватка Акков/ОшибкаID:\nFirstName:{e.Message.From.FirstName}\nLastName:{e.Message.From.LastName} ");
                }
                //////////////////////////PAY//////////////////////
            }

            switch (message.Text)
            {
            case "/start":
                try
                {
                    string commands      = "Создатель TG: /creator \r\nПокупка: /menu \r\nДополнительная информация: /info";
                    var    replyKeyBoard = new ReplyKeyboardMarkup(new[] {
                        new[]
                        {
                            new KeyboardButton("MENU")
                        }
                    })
                    {
                        ResizeKeyboard = true
                    };
                    await botClient.SendTextMessageAsync(e.Message.Chat, commands, replyMarkup : replyKeyBoard);
                }
                catch
                {
                    Console.WriteLine("Был возможный краш!");
                }
                break;

            case "/menu":
            case "MENU":
                try
                {
                    await botClient.SendTextMessageAsync(e.Message.Chat, "VPN сервисы:");

                    var inlineKeyBoard = new InlineKeyboardMarkup(new[] {
                        new[]
                        {
                            InlineKeyboardButton.WithCallbackData("NORD")
                        },
                        new[]
                        {
                            InlineKeyboardButton.WithCallbackData("IPVANISH")
                        },
                        new[]
                        {
                            InlineKeyboardButton.WithCallbackData("ZETMATE")
                        },
                        new[]
                        {
                            InlineKeyboardButton.WithCallbackData("HMAPRO")
                        },
                        new[]
                        {
                            InlineKeyboardButton.WithCallbackData("WINDSCRIBE")
                        },
                        new[]
                        {
                            InlineKeyboardButton.WithCallbackData("TUNNELBEAR")
                        },
                        new[]
                        {
                            InlineKeyboardButton.WithCallbackData("VYPRVPN")
                        }
                    });
                    await botClient.SendTextMessageAsync(e.Message.Chat, "Выберите что хотели бы купить", replyMarkup : inlineKeyBoard);
                }
                catch
                {
                    Console.WriteLine("Был возможный краш!");
                }
                break;

            case "/creator":
                try
                {
                    await botClient.SendTextMessageAsync(e.Message.Chat, "@user1771");
                }
                catch
                {
                    Console.WriteLine("Был возможный краш!");
                }

                break;

            case "/info":
                try
                {
                    await botClient.SendTextMessageAsync(e.Message.Chat, "Для поддержки обращаться - @user1771");
                }
                catch
                {
                    Console.WriteLine("Был возможный краш!");
                }
                break;
            }
        }
Пример #16
0
 private void BotOnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
 => OnMessage?.Invoke(sender, new TLMessage()
 {
     ChatId = e.Message.Chat.Id, Message = e.Message.Text.Trim()
 });
Пример #17
0
 public void Bot_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
 {
     Console.WriteLine($"[{e.Message.Chat.Id}, user: {e.Message.From.Id}] @{e.Message.From?.Username}: {e.Message.Text}");
 }
Пример #18
0
        private static async void BotOnMessageReceived(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            var message = e.Message;

            if (message == null || message.Type != MessageType.Text) //добавить вывод типа сообщения
            {
                return;
            }

            string name = $"{message.From.FirstName} {message.From.LastName}";

            Console.WriteLine($"{name} отправил сообщение: {message.Text}'");

            switch (message.Text)
            {
            case "/start":
                string text =
                    @"Список команд:
/start - запуск бота
/inline - вывод меню
/keyboard - вывод клавиатуры";
                await Bot.SendTextMessageAsync(message.From.Id, text);

                break;

            case "/inline":
                var inlineKeyboard = new InlineKeyboardMarkup(new[]
                {
                    new[]
                    {
                        InlineKeyboardButton.WithUrl("Vk", "https://vk.com/milisov"),
                        InlineKeyboardButton.WithUrl("Telegram", "https://t.me/milisov")
                    },
                    new[]
                    {
                        InlineKeyboardButton.WithCallbackData("Пункт 1"),
                        InlineKeyboardButton.WithCallbackData("Пункт 2")
                    }
                });
                await Bot.SendTextMessageAsync(message.From.Id, "Выберите пункт меню", replyMarkup : inlineKeyboard);

                break;

            case "/keyboard":
                var replyKeyboard = new ReplyKeyboardMarkup(new[]
                {
                    new[]
                    {
                        new KeyboardButton("Привет!"),
                        new KeyboardButton("Как дела?")
                    },
                    new[]
                    {
                        new KeyboardButton("Контакт")
                        {
                            RequestContact = true
                        },
                        new KeyboardButton("Геолокация")
                        {
                            RequestLocation = true
                        }
                    }
                });
                await Bot.SendTextMessageAsync(message.Chat.Id, "Сообщение", replyMarkup : replyKeyboard);

                break;

            default:
                break;
            }
        }
Пример #19
0
        private static void Bot_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            if (e.Message.Type == Telegram.Bot.Types.Enums.MessageType.Photo ||
                e.Message.Type == Telegram.Bot.Types.Enums.MessageType.Document
                )
            {
                DownloadFile(e.Message);
                return;
            }

            string msg = e.Message.Text;

            if (msg == null)
            {
                return;
            }

            botUser.teleID  = e.Message.Chat.Id;
            botUser.getNews = false;
            try
            {
                botCntrlr.Register(botUser);
            }
            catch (Exception ex)
            {
                throw (ex);
            }



            string msgGist = new string(msg.Where(c => !char.IsPunctuation(c)).ToArray());

            //Console.WriteLine(e.Message.Chat.Id + "has sent a message!");


            if (msg.Trim() == "/start" || msgGist.Contains("start"))
            {
                bot.SendTextMessageAsync(e.Message.Chat.Id, usage);
                return;
            }
            #region greeting
            if (msgGist.Trim() == "سلام" || msgGist.Trim() == "درود")
            {
                bot.SendTextMessageAsync(e.Message.Chat.Id, "درود!");
                return;
            }
            if (msgGist.Trim() == "خوبی" || msgGist.Trim() == "چطوری" || msgGist.Trim() == "چطورین" || msgGist.Trim() == "چه طوری" || msgGist.Trim() == "چه طورین")
            {
                Random r = new Random();
                int    a = r.Next(0, 3);
                switch (a)
                {
                case 0: bot.SendTextMessageAsync(e.Message.Chat.Id, "ممنونم."); break;

                case 1: bot.SendTextMessageAsync(e.Message.Chat.Id, "مرسی، تو خوبی؟"); break;

                case 2: bot.SendTextMessageAsync(e.Message.Chat.Id, "سپاس، شما چطوری؟"); break;

                case 3: bot.SendTextMessageAsync(e.Message.Chat.Id, "دعا گوییم. شما خوبی؟"); break;
                }
                return;
            }
            #endregion

            #region adv
            if (msgGist.Trim() == "تبلیغات" || msgGist.Trim() == "تبلیغ" || msg.Contains("تبلیغات") || msg.Contains("تبلیغ"))
            {
                var inBtnAdv       = InlineKeyboardButton.WithCallbackData("دریافت تبلیغات", "Recieve_Adv");
                var inBtnCancelAdv = InlineKeyboardButton.WithCallbackData("لغو تبلیغات", "Cancel_Adv");
                var keyboard       = new InlineKeyboardButton[]
                {
                    inBtnAdv,
                    inBtnCancelAdv
                };
                inkeyMrk = new InlineKeyboardMarkup(keyboard);
                bot.SendTextMessageAsync(e.Message.Chat.Id, "آیا مایل به دریافت تبلیغات ما هستید؟", Telegram.Bot.Types.Enums.ParseMode.Default, false, false, 0, inkeyMrk);
                return;
            }
            if (msgGist.Trim() == "پیام همگانی" || msg.Contains("پیام همگانی"))
            {
                //string msg = { ("این یک پیام همگانی و تبلیغاتی است") };
                SendMessageToAll("این یک پیام همگانی و تبلیغاتی است");
                return;
            }
            #endregion

            #region film
            if (msgGist.Trim().Contains("فیلم") || msgGist.Trim().Contains("سریال"))
            {
                //keyborad
                rkm          = new ReplyKeyboardMarkup();
                rkm.Keyboard =
                    new KeyboardButton[][]
                {
                    new KeyboardButton[]
                    {
                        new KeyboardButton("خانوادگی اجتماعی"),
                        new KeyboardButton("انیمیشن"),
                    },

                    new KeyboardButton[]
                    {
                        new KeyboardButton("تریلر - اکشن")
                    },

                    new KeyboardButton[]
                    {
                        new KeyboardButton("کمدی"),
                        new KeyboardButton("درام"),
                        new KeyboardButton("دیگر...")
                    }
                };

                /*
                 *          //keyboard2
                 *          var inBtnFamily = InlineKeyboardButton.WithCallbackData("خانوادگی", "genre-family");
                 *          var inBtnAnimation = InlineKeyboardButton.WithCallbackData("انیمیشن", "genre-animation");
                 *          var inBtnCancel = InlineKeyboardButton.WithCallbackData("هیچکدام", "genre-cancel");
                 *          var keyboard = new InlineKeyboardButton[][]
                 *                  {
                 *                      new InlineKeyboardButton[]
                 *                      {
                 *                          inBtnFamily,
                 *                          inBtnAnimation
                 *                      },
                 *                      new InlineKeyboardButton[]
                 *                      {
                 *                          inBtnCancel
                 *                      }
                 *                  };
                 *          inkeyMrk = new InlineKeyboardMarkup(keyboard);
                 */

                bot.SendTextMessageAsync(e.Message.Chat.Id, "چه فیلمی دوست دارید؟", Telegram.Bot.Types.Enums.ParseMode.Default, false, false, 0, rkm);
                return;
            }
            if (msgGist.Trim() == "انیمیشن")
            {
                bot.SendTextMessageAsync(e.Message.Chat.Id, "بچه شدی؟");
                bot.SendTextMessageAsync(
                    e.Message.Chat.Id,
                    "انتخاب شما: انیمیشن",
                    replyMarkup: new ReplyKeyboardRemove());
                return;
            }

            if (msgGist.Trim() == "خانوادگی اجتماعی")
            {
                bot.SendTextMessageAsync(e.Message.Chat.Id, "زن ذلیل، میخوای بشینی با زن ت فیلم ببینی!!");
                bot.SendTextMessageAsync(
                    e.Message.Chat.Id,
                    "انتخاب شما: خانوادگی اجتماعی",
                    replyMarkup: new ReplyKeyboardRemove());
                return;
            }
            #endregion

            if (msg.Trim() == "عکس" || msgGist.Contains("عکس"))
            {
                string fileName = @"D:\Hadi\Files\sir.png";
                Stream strm     = new FileStream(fileName, FileMode.Open);
                Telegram.Bot.Types.InputFiles.InputOnlineFile photo = new Telegram.Bot.Types.InputFiles.InputOnlineFile(strm);
                //Telegram.Bot.Types.InputFiles.InputFileStream
                bot.SendPhotoAsync(e.Message.Chat.Id, photo);
            }
            //else
            //{
            // bot.SendTextMessageAsync(e.Message.Chat.Id, "متوجه نشدم");
            //}
        }
Пример #20
0
        private static async void BotOnMessageReceived(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            var message = e.Message;// создаем переменную Message

            if (message == null || message.Type != MessageType.TextMessage)
            {
                return;
            }

            string name = $"{message.From.FirstName}  {message.From.LastName}";

            Console.WriteLine($"{name } отправил сообщение :'{ message.Text}'"); // такой то пользователь отправил такое то сообщение

            switch (message.Text)                                                // если текст сообщения равен команде старт , то будут выполняться определенные дейстия
            {
            case "/start":
                string text =
                    @"список команд:
                        /start - список команд
                        /inline- вывод меню 
                        /keyboard - вывод клавиатуры ";
                await Bot.SendTextMessageAsync(message.From.Id, text);

                break;

            case "/inline":
                var inlineKeyboard = new InlineKeyboardMarkup(new[]
                {
                    new[]
                    {
                        InlineKeyboardButton.WithUrl("VK", "https://vk.com/id345147153"),
                        InlineKeyboardButton.WithUrl("Vk2", "https://vk.com/id177186771")
                    },
                    new[]
                    {
                        InlineKeyboardButton.WithCallbackData("Пункт 1 "),
                        InlineKeyboardButton.WithCallbackData("Пункт 2 ")
                    }
                });
                await Bot.SendTextMessageAsync(message.From.Id, "Выберите пункт меню",
                                               replyMarkup : inlineKeyboard);

                break;

            case "/keyboard":
                var replyKeyboard = new ReplyKeyboardMarkup(new[]
                {
                    new[]
                    {
                        new KeyboardButton("Привет"),
                        new KeyboardButton("Как дела ?")
                    },
                    new[]
                    {
                        new KeyboardButton("Контакт")
                        {
                            RequestContact = true
                        },
                        new KeyboardButton("Геолокация")
                        {
                            RequestLocation = true
                        }
                    }
                });
                await Bot.SendTextMessageAsync(message.Chat.Id, "Сообщение", replyMarkup : replyKeyboard);

                break;

            default:
                var    response = apiAi.TextRequest(message.Text);
                string answer   = response.Result.Fulfillment.Speech;
                if (answer == "")
                {
                    answer = "прости я тебя не понял";
                }
                await Bot.SendTextMessageAsync(message.From.Id, answer);

                break;
            }
        }
Пример #21
0
 private static void outDict(Telegram.Bot.Args.MessageEventArgs e, String key)
 {
 }
Пример #22
0
        private static async void Bot_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            var msg    = e.Message.Text;
            var cid    = e.Message.Chat.Id;
            var fromId = e.Message.From.Id; //для проверки на права доступа(типа добавления и т.д.)

            if (e.Message.Type == MessageType.DocumentMessage)
            {
                Console.WriteLine("Принимаем файл: " + e.Message.Document.FileName);

                try
                {
                    var file = await Bot.GetFileAsync(e.Message.Document.FileId);

                    //var filename = file.FileId + "." + file.FilePath.Split('.').Last();

                    using (var saveStream = new FileStream("Incoming" + "/" + e.Message.Document.FileName, FileMode.Create))
                    {
                        await file.FileStream.CopyToAsync(saveStream);
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Не удалось принять файл");
                }

                await Bot.SendTextMessageAsync(cid, "Файл принят");

                bool res = Parse.ProcessOneFile("Incoming" + "/" + e.Message.Document.FileName);

                if (res)
                {
                    await Bot.SendTextMessageAsync(cid, "Файл обработан");
                }
                else
                {
                    await Bot.SendTextMessageAsync(cid, "Файл не удалось обработать");
                }

                return;
            }

            Console.WriteLine("Incoming request: " + msg);
            Console.WriteLine("Search known chat: " + e.Message.Chat.FirstName + "; " + cid);

            var chatFinded = Chats.FindLast(chat => chat.Id == cid);

            if (chatFinded == null)
            {
                chatFinded = DB.DBCommands.FindOrInsertChat(e.Message.Chat);
                Chats.Add(chatFinded);

                Commands.SendKeyboardButtons(chatFinded);
            }

            if (msg == null)
            {
                return;
            }
            msg = msg.ToLower();
            msg = msg.Trim('/');
            msg = msg.Replace(AviaBot.Username.ToLower(), "");
            msg = msg.Replace("@", "");

            DB.DBCommands.AddChatIncomeMsg(chatFinded, msg);

            try
            {
                Commands.FindCommands(msg, chatFinded, fromId);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Unknown Commands.FindCommand exceprion: " + ex.Message);
            }
        }
Пример #23
0
        public static void Bot_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            Student stud;

            Program.students.ContainsStudByID(e.Message.Chat.Id, out stud);

            string message = "no_message";
            string answer  = "no_answer";

            if (e.Message.Type == Telegram.Bot.Types.Enums.MessageType.Text)
            {
                message = e.Message.Text.ToLower();
            }
            else
            {
                return;
            }

            Console.Write($"{DateTime.Now} | from: {e.Message.From.Id} | text: {message} | level before: {stud.users_loc}");

            /* =================================== РАБОТАЮТ ВЕЗДЕ =================================== */
            if (message == "/start")
            {
                answer = $"Привет, студент! Я бот-помощник в подготовке к сессии, моя задача - помочь тебе " +
                         $"правильно распределить время в подготовке к сессии, составив расписание, и " +
                         $"стимулировать начать готовиться к ней периодическими напоминаниями.\n\n" +
                         $"Сейчас ты в главном меню.\n" +
                         $"Отсюда ты можешь перейти:\n" +
                         $"• в раздел учёбы командой /study\n" +
                         $"• в раздел развлечений командой /fun\n\n" +
                         $"Ну что, будем учиться или отдохнём?";
                stud.users_loc = LevelOfCode.MAIN_MENU;
            }
            else if (message == "/menu")
            {
                answer = $"Ты в главном меню.\n" +
                         $"Отсюда ты можешь перейти:\n" +
                         $"• в раздел учёбы командой /study\n" +
                         $"• в раздел развлечений командой /fun\n" +
                         $"• получить информацию о боте командой /info\n\n" +
                         $"Ну что, будем учиться или отдохнём?";
                stud.users_loc = LevelOfCode.MAIN_MENU;
            }
            if (message == "/info")
            {
                answer = $"Я бот-помощник в подготовке к сессии, моя главная задача - помочь тебе " +
                         $"правильно распределить время в подготовке к сессии, составив расписание, и " +
                         $"стимулировать начать готовиться к ней периодическими напоминаниями. Также я могу помочь" +
                         $" тебе расслабиться во время подготовки рекомендацией музыки или забавным анекдотом.";
            }
            /* =================================== MAIN_MENU =================================== */
            else if (message == "/fun" && (stud.users_loc == LevelOfCode.MAIN_MENU || stud.users_loc == LevelOfCode.FUN_JANR))
            {
                answer = $"Ты в меню развлечений.\n" +
                         $"Здесь я могу:\n" +
                         $"• рассказать тебе случайный анекдот (команда /joke)\n" +
                         $"• порекомендовать музыку (команда /music)\n" +
                         $"• порекомендовать музыку по жанру (команда /gmusic)\n\n" +
                         $"Вернуться в главное меню - команда /menu";
                stud.users_loc = LevelOfCode.FUN_MENU;
            }
            else if (message == "/study" && stud.users_loc == LevelOfCode.MAIN_MENU)
            {
                answer = $"Ты в меню подготовки к сессии. ✏\n" +
                         $"Здесь я могу:\n" +
                         $"• составить тебе расписание для сессии (команда /makeschedule)\n" +
                         $"• дать совет по подготовке к сессии (команда /advice)\n" +
                         $"• дать информацию о прогрессе в подготовке, полученную на основе твоего следования расписанию - /my_success\n\n" +
                         $"Вернуться в главное меню - команда /menu";
                stud.users_loc = LevelOfCode.STUDY_MENU;
            }
            /* =================================== FUN_MENU =================================== */
            else if (message == "/joke" && stud.users_loc == LevelOfCode.FUN_MENU)
            {
                answer = Secondary.RandMilJoke();
            }
            else if (message == "/music" && stud.users_loc == LevelOfCode.FUN_MENU)
            {
                answer = Secondary.RandMusic();
            }
            else if (message == "/gmusic" && stud.users_loc == LevelOfCode.FUN_MENU)
            {
                answer = $"Хорошо, назови жанр.\n\nКлассика - /genre_classic\nРок - /genre_rock\nПоп - /genre_pop\n" +
                         $"Альтернатива - /genre_alternative\n\n" +
                         $"Вернуться в меню развлечений - команда /fan";
                stud.users_loc = LevelOfCode.FUN_JANR;
            }
            else if (message.Contains("/genre") && stud.users_loc == LevelOfCode.FUN_JANR)
            {
                string j = "";
                if (message.ToLower().Contains("classic"))
                {
                    j = "классическая";
                }
                else if (message.ToLower().Contains("rock"))
                {
                    j = "рок";
                }
                else if (message.ToLower().Contains("pop"))
                {
                    j = "поп";
                }
                else if (message.ToLower().Contains("alternative"))
                {
                    j = "альтернатива";
                }
                answer = Secondary.JanrRandMusic(j);
            }

            /* =================================== STUDY_MENU =================================== */
            else if (message == "/advice" && stud.users_loc == LevelOfCode.STUDY_MENU)
            {
                answer         = "Задавай свой вопрос, студент!";
                stud.users_loc = LevelOfCode.QUESTIONS_MENU;
            }
            /* =================================== QUESTIONS_MENU =================================== */
            else if (stud.users_loc == LevelOfCode.QUESTIONS_MENU)
            {
                if (message == "/there_is_not")
                {
                    answer = "Спасибо, ваш вопрос записан и скоро будет обработан! Возвращаем тебя в меню study.";
                    questionnaire.AddNewQuestion();
                    stud.users_loc = LevelOfCode.STUDY_MENU;
                }
                else
                {
                    answer = "Выбери свой вопрос в списке похожих. \nЕсли его здесь нет, введи - /there_is_not\nТогда вопрос будет отправлен" +
                             " нашим добровольцам, которые ответят на него, после чего вопрос с ответом пополнят базу. \nСписок:\n" + questionnaire.FindMatch(message);
                }
            }

            else if (message == "/my_success" && stud.users_loc == LevelOfCode.STUDY_MENU)
            {
                int dayUntil = (stud.current_exam.date.Date - DateTime.Now.Date).Days;
                if (stud.success < 0)
                {
                    answer = $"Подготовка идёт не особо хорошо. Советую поднапрячься, дней до экзамена: {dayUntil}.";
                }
                if (stud.success == 0)
                {
                    answer = $"Ты пока не начал готовиться.";
                }
                else
                {
                    answer = $"Подготовка идёт стабильно. Дней до экзамена: {dayUntil}.";
                }
            }

            /* ============================= СОСТАВЛЕНИЕ РАСПИСАНИЯ ============================= */
            else if (message == "/makeschedule" && stud.users_loc == LevelOfCode.STUDY_MENU)
            {
                answer         = "Отлично. Перед тем, как начать, введи название предмета, по которому будет ближайший экзамен.";
                stud.users_loc = LevelOfCode.MAKE_EXAM_NAME;
            }
            else if (stud.users_loc == LevelOfCode.MAKE_EXAM_NAME)
            {
                stud.current_exam.name = message;
                answer         = "Теперь введи количество вопросов в экзамене.";
                stud.users_loc = LevelOfCode.MAKE_EXAM_CNT;
            }
            else if (stud.users_loc == LevelOfCode.MAKE_EXAM_CNT)
            {
                int cnt_of_q = 1;
                if (int.TryParse(message, out cnt_of_q))
                {
                    answer = "Принято. Теперь введи дату экзамена в формате ДД.ММ.ГГГГ, например 12.06.2021";
                    stud.current_exam.question_cnt = cnt_of_q;
                    stud.users_loc = LevelOfCode.MAKE_EXAM_DATE;
                }
                else
                {
                    answer = "Количество вопросов - число. Попробуй ввести ещё раз.";
                }
            }
            else if (stud.users_loc == LevelOfCode.MAKE_EXAM_DATE)
            {
                int e_day   = 1;
                int e_month = 1;
                int e_year  = 2000;
                if (message.Length == 10 && int.TryParse(message.Substring(0, 2), out e_day) &&
                    int.TryParse(message.Substring(3, 2), out e_month) &&
                    int.TryParse(message.Substring(6, 4), out e_year) &&
                    e_month > 0 && e_month < 13 &&
                    e_year > 2020 && e_year < 2900 &&
                    IsRealDay(e_day, e_month, e_year))
                {
                    stud.current_exam.date = new DateTime(e_year, e_month, e_day, 8, 30, 0);
                    DateTime now = DateTime.Now;

                    int dayUntil = (stud.current_exam.date.Date - now.Date).Days;
                    if (dayUntil <= 1)
                    {
                        answer = "До экзамена слишком мало времени. Тут уж никакое расписание не поможет, так что прямо сейчас садить и учи всё подряд!";
                    }
                    else
                    {
                        DateTime[] dates = new DateTime[dayUntil];
                        for (int i = 0; i < dayUntil; i++)
                        {
                            DateTime date = new DateTime(now.Year, now.Month, now.Day, 13, 1, 7).AddDays(i + 1).AddMilliseconds(stud.student_id % 10000);
                            dates[i] = date;
                        }
                        ;
                        answer = "Твоё расписание готово. Каждый день в обед я буду напоминать тебе о том, что пора " +
                                 "начать подготовку. В случае чего ты всегда можешь её перенести на несколько минут или часов.";
                        stud.Shedule.Add(stud.current_exam.name, dates);
                    }
                    stud.users_loc = LevelOfCode.MAIN_MENU;
                }
                else
                {
                    answer = "Похоже, ты ввёл некорректную дату. Попробуй ввести ещё раз.";
                }
            }
            /* =============================== ПЕРЕНОС ПОДГОТОВКИ =============================== */
            else if (message == "/yes" && stud.users_loc == LevelOfCode.PREPARE_TIME)
            {
                answer = "Отлично, удачи!";
                stud.success++;
                stud.users_loc = stud.prev_loc;
            }
            else if (message == "/postpone_15_minutes" && stud.users_loc == LevelOfCode.PREPARE_TIME)
            {
                answer = "Хорошо, подготовка перенесена на 15 минут. Главное - долго не затягивай!";
                DateTime now      = DateTime.Now;
                DateTime new_date = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second).AddMinutes(15);
                int      dayUntil = (stud.current_exam.date.Date - now.Date).Days;
                int      l        = stud.Shedule[stud.current_exam.name].Length;
                stud.Shedule[stud.current_exam.name][l - dayUntil - 1] = new_date;
                stud.users_loc = stud.prev_loc;
            }
            else if (message == "/postpone_30_minutes" && stud.users_loc == LevelOfCode.PREPARE_TIME)
            {
                answer = "Хорошо, подготовка перенесена на 30 минут. Главное - долго не затягивай!";
                DateTime now      = DateTime.Now;
                DateTime new_date = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second).AddMinutes(30);
                int      dayUntil = (stud.current_exam.date.Date - now.Date).Days;
                int      l        = stud.Shedule[stud.current_exam.name].Length;
                stud.Shedule[stud.current_exam.name][l - dayUntil - 1] = new_date;
                stud.users_loc = stud.prev_loc;
            }
            else if (message == "/postpone_1_hour" && stud.users_loc == LevelOfCode.PREPARE_TIME)
            {
                answer = "Хорошо, подготовка перенесена на 1 час. Главное - долго не затягивай!";
                stud.success--;
                DateTime now      = DateTime.Now;
                DateTime new_date = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second).AddHours(1);
                int      dayUntil = (stud.current_exam.date.Date - now.Date).Days;
                int      l        = stud.Shedule[stud.current_exam.name].Length;
                stud.Shedule[stud.current_exam.name][l - dayUntil - 1] = new_date;
                stud.users_loc = stud.prev_loc;
            }
            else if (message == "/postpone_2_hour" && stud.users_loc == LevelOfCode.PREPARE_TIME)
            {
                answer = "Хорошо, подготовка перенесена на 2 часа. Главное - долго не затягивай!";
                stud.success--;
                DateTime now      = DateTime.Now;
                DateTime new_date = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second).AddHours(2);
                int      dayUntil = (stud.current_exam.date.Date - now.Date).Days;
                int      l        = stud.Shedule[stud.current_exam.name].Length;
                stud.Shedule[stud.current_exam.name][l - dayUntil - 1] = new_date;
                stud.users_loc = stud.prev_loc;
            }

            /* ================================================================================== */

            Console.WriteLine($" | level after: {stud.users_loc}");

            if (answer == "no_answer")
            {
                return;
            }

            Program.Bot.SendTextMessageAsync(stud.student_id, answer); // отправка сообщения
        }
Пример #24
0
        private static void GetMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            var msg = e.Message;

            if (msg == null)
            {
                return;
            }
            msg.Date = msg.Date.ToLocalTime();
            if (TurnOn == DateTime.MinValue || DateTime.Compare(msg.Date, TurnOn) < 0)
            {
                return;                                                                                    ///not first
            }
            Chat CurChat = DB.IDtoChat(msg.Chat.Id);

            if (CurChat.LastMsgId == msg.MessageId)
            {
                return;
            }
            if (msg.Type == Telegram.Bot.Types.Enums.MessageType.Voice && CurChat.IsAdmin())
            {
                SpecCommands("block", CurChat);
            }
            if (msg.Type == Telegram.Bot.Types.Enums.MessageType.Text)
            {
                if (msg.Text[0] == '/')
                {
                    CommandAnalyse(msg.Text, CurChat, msg.Date);
                }
                else
                {
                    bool FromBot = msg.ReplyToMessage != null && msg.ReplyToMessage.From.Id == BOT;
                    if (!CurChat.IsPrivate() && !StringChanger.ToLower(StringChanger.RemoveSymb(msg.Text, "none")).Contains("сапфир") && !FromBot)
                    {
                        return;
                    }
                    if (CurChat.mode == 0)
                    {
                        SimpleTextAnalyse(msg.Text, CurChat);
                    }
                    else if (!TextToResp(msg.Text, CurChat))
                    {
                        if (!FromBot && !CurChat.IsPrivate())
                        {
                            return;
                        }
                        if (CurChat.mode == 1)
                        {
                            FindPhoto(msg.Text, CurChat);
                        }
                        else if (CurChat.mode == 2)
                        {
                            msg.Text = StringChanger.RemoveSymb(msg.Text, "none");
                            msg.Text = StringChanger.ToLower(msg.Text);
                            FindSong(msg.Text, CurChat);
                        }
                        else if (CurChat.mode == 3)
                        {
                            msg.Text = StringChanger.RemoveSpaces(msg.Text);
                            FindRhyme(msg.Text, CurChat);
                        }
                    }
                }
            }
            CurChat.LastMsgId = msg.MessageId;
            DB.SaveChat(CurChat, false);
        }
Пример #25
0
        /// <summary>
        /// Handle messages from user
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private static void Bot_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            try
            {
                if (e.Message.Text.StartsWith("/start") || e.Message.Text.StartsWith(Commands.HELP))
                {
                    var msg = new StringBuilder();
                    msg.AppendLine("Welcome!");
                    msg.AppendLine("This bot works with www.haveibeenpwned.com");
                    msg.AppendLine("Enter your email address to see if you are hacked.");
                    msg.AppendLine("Commands:");
                    msg.AppendLine("start - start bot");
                    msg.AppendLine("add - add email to subscribe list");
                    msg.AppendLine("remove - remove email from subscribe list");
                    msg.AppendLine("showemails - show subscribed emails");
                    msg.AppendLine("--------------------------------------");
                    msg.AppendLine(@"Using this bot, you agree with the law on personal data of the Russian Federation.
The bot can store and process your email and your telegram id.
This data is only needed to notify you via telegrams and will not be used to send spam.");
                    msg.AppendLine("--------------------------------------");
                    msg.AppendLine("\n\n");
                    msg.AppendLine("--------------------------------------");
                    msg.AppendLine(@"Используя данный бот, вы соглашаетесь с законом о персональных данных Российской Федерации.
Бот может хранить и обрабатывать ваш емайл и ваш телеграм ид.
Эти данные нужны только для оповещения Вас через телеграм и не будут использоваться для рассылки спама.");
                    msg.AppendLine("--------------------------------------");

                    /*
                     * start - start bot
                     * add - add email to subscribe list
                     * remove - remove email from subscribe list
                     * showemails - show subscribed emails
                     */
                    BotClient.Instance.SendTextMessageAsync(e.Message.From.Id, msg.ToString(), Telegram.Bot.Types.Enums.ParseMode.Markdown, false, false, e.Message.MessageId);
                    return;
                }
                else if (e.Message.Text.StartsWith("/email"))
                {
                    var msg = "Enter your email address to see if you are hacked.";
                    BotClient.Instance.SendTextMessageAsync(e.Message.From.Id, msg, Telegram.Bot.Types.Enums.ParseMode.Markdown, false, false);
                    return;
                }
                else if (e.Message.Text.StartsWith(Commands.ADD_EMAIL_COMMAND))
                {
                    var email = e.Message.Text.Remove(0, e.Message.Text.IndexOf(Commands.ADD_EMAIL_COMMAND) + Commands.ADD_EMAIL_COMMAND.Length).Trim();
                    if (!string.IsNullOrEmpty(email))
                    {
                        var rgUtils = new RegexUtilities();
                        if (!rgUtils.IsValidEmail(email))
                        {
                            BotClient.Instance.SendTextMessageAsync(e.Message.From.Id, $"'{email}' is not valid email!", Telegram.Bot.Types.Enums.ParseMode.Markdown, false, false);
                            return;
                        }
                        var client   = new HaveIBeenPwnedRestClient();
                        var response = client.GetAccountBreaches(email).Result;
                        var emailObj = new Email(email, response);
                        _emailManager.AddOrUpdateEmail(e.Message.From.Id, emailObj);
                        BotClient.Instance.SendTextMessageAsync(e.Message.From.Id, $"Add email '{email}' to subscribe list", Telegram.Bot.Types.Enums.ParseMode.Markdown, false, false);
                        SendBreaches(e.Message.From.Id, response);
                    }
                    return;
                }
                else if (e.Message.Text.StartsWith(Commands.REMOVE_EMAIL_COMMAND))
                {
                    var email = e.Message.Text.Remove(0,
                                                      e.Message.Text.IndexOf(Commands.REMOVE_EMAIL_COMMAND) + Commands.REMOVE_EMAIL_COMMAND.Length).Trim();
                    if (!string.IsNullOrEmpty(email))
                    {
                        var client   = new HaveIBeenPwnedRestClient();
                        var response = client.GetAccountBreaches(email).Result;
                        var emailObj = new Email(email, response);
                        _emailManager.RemoveEmail(e.Message.From.Id, emailObj);
                        BotClient.Instance.SendTextMessageAsync(e.Message.From.Id, $"Remove email '{email}' from subscribe list", Telegram.Bot.Types.Enums.ParseMode.Markdown, false, false);
                        return;
                    }
                    BotClient.Instance.SendTextMessageAsync(e.Message.From.Id, $"Can not remove email  from subscribe list", Telegram.Bot.Types.Enums.ParseMode.Markdown, false, false);
                    return;
                }
                else if (e.Message.Text.StartsWith(Commands.SHOW_EMAIL_LIST))
                {
                    var emailList = _emailManager.GetEmails(e.Message.From.Id);
                    BotClient.Instance.SendTextMessageAsync(e.Message.From.Id, $"Your subscribe list:", Telegram.Bot.Types.Enums.ParseMode.Markdown, false, false);
                    Thread.Sleep(50);
                    foreach (var em in emailList)
                    {
                        BotClient.Instance.SendTextMessageAsync(e.Message.From.Id, em.Name, Telegram.Bot.Types.Enums.ParseMode.Markdown, false, false);
                        Thread.Sleep(50);
                    }
                    if (!emailList.Any())
                    {
                        BotClient.Instance.SendTextMessageAsync(e.Message.From.Id, "No emails in list yet", Telegram.Bot.Types.Enums.ParseMode.Markdown, false, false);
                    }
                    return;
                }

                if (string.IsNullOrEmpty(e.Message.Text))
                {
                    return;
                }

                var regexUtils = new RegexUtilities();
                if (!regexUtils.IsValidEmail(e.Message.Text))
                {
                    BotClient.Instance.SendTextMessageAsync(e.Message.From.Id, $"'{e.Message.Text}' is not valid email!", Telegram.Bot.Types.Enums.ParseMode.Markdown, false, false);
                    return;
                }

                SendBreaches(e);
            }
            catch (Exception ex)
            {
                StaticUtils.Logger.LogError(ex, ex.Message);
            }
        }
Пример #26
0
        private async void Bot_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            var message = e.Message;

            if (message == null || message.Type != Telegram.Bot.Types.Enums.MessageType.Text || !message.Text.StartsWith("/"))
            {
                return;
            }

            string inputText    = message.Text;
            var    splitedText  = inputText.Split(' ');
            string formatedText = string.Empty;

            if (inputText.StartsWith("/주사위"))
            {
                bool rollDice   = true;
                bool startCheck = false;
                if (rankList.Contains(message.Chat.Id) == true)
                {
                    startCheck = true;
                }

                if (startCheck == true)
                {
                    if (keyValuePairs.ContainsKey(message.From.Id) == true)
                    {
                        var value = keyValuePairs[message.From.Id];
                        await bot.SendTextMessageAsync(message.Chat.Id, $"개인당 주사위를 1번씩만 굴릴 수 있습니다.\n{value.Item2} 의 이전 결과값은 {value.Item1} 입니다.");

                        rollDice = false;
                    }
                }

                if (rollDice == true)
                {
                    Random random      = new Random();
                    int    returnValue = 0;
                    int    maxValue    = 100;
                    if (splitedText.Count() > 1 && startCheck == false)
                    {
                        if (int.TryParse(splitedText[1], out maxValue) == false)
                        {
                            maxValue = 100;
                        }
                    }

                    returnValue = random.Next(1, maxValue);
                    string username = GetDisplayname(message.From);

                    formatedText = string.Format(@"{0} 이(가) 주사위를 굴려 {1}이 나왔습니다.(1-{2})", username, returnValue, maxValue);
                    if (startCheck == true)
                    {
                        keyValuePairs.Add(message.From.Id, new Tuple <int, string>(returnValue, username));
                    }
                    await bot.SendTextMessageAsync(message.Chat.Id, formatedText);
                }
            }
            else if (inputText.StartsWith("/시작"))
            {
                if (rankList.Contains(message.Chat.Id) == false)
                {
                    rankList.Add(message.Chat.Id);
                    keyValuePairs.Clear();
                    await bot.SendTextMessageAsync(message.Chat.Id, "지금부터 굴리는 주사위 값에 순위를 매깁니다.\n주사위는 한 번 씩만 굴릴 수 있습니다.\n주사위 값은 1과 100 사이의 값으로 강제합니다.");
                }
                else
                {
                    await bot.SendTextMessageAsync(message.Chat.Id, "결과 값을 먼저 확인 후 다시 시작해주세요.");
                }
            }
            else if (inputText.StartsWith("/결과"))
            {
                if (rankList.Contains(message.Chat.Id) == true)
                {
                    if (keyValuePairs.Count() == 0)
                    {
                        await bot.SendTextMessageAsync(message.Chat.Id, "아무도 주사위를 굴리지 않았습니다\n시작을 한 뒤에 주사위를 굴려주세요");

                        return;
                    }
                    rankList.Remove(message.Chat.Id);


                    await bot.SendTextMessageAsync(message.Chat.Id, GetResultValue());
                }
                else
                {
                    await bot.SendTextMessageAsync(message.Chat.Id, "시작을 하지 않았습니다.");
                }
            }
            else if (inputText.StartsWith("/로또"))
            {
                int generateCount = 1;
                if (splitedText.Count() > 1)
                {
                    if (int.TryParse(splitedText[1], out generateCount) == false)
                    {
                        generateCount = 1;
                    }
                }

                await bot.SendTextMessageAsync(message.Chat.Id, GetDisplayname(message.From) + " 님의 로또 예상 번호는\n" + GetLottoNumbers(generateCount) + " 입니다.");
            }
            else if (inputText.StartsWith("/도움말"))
            {
                // 도움말 출력
                StringBuilder sb = new StringBuilder();
                sb.AppendLine(@"현재 지원 기능은 아래와 같습니다.");
                sb.AppendLine(@"/로또 : 랜덤한 로또 번호 6자리 생성");
                sb.AppendLine(@"/주사위 : 1부터 100사이의 랜덤한 값 생성");
                sb.AppendLine(@"/시작 : 주사위 순위 기능");
                sb.AppendLine(@"/결과 : 주사위 순위 보기");

                await bot.SendTextMessageAsync(message.Chat.Id, sb.ToString());
            }
        }
 private static void BotOnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
 {
 }
Пример #28
0
        //
        // ---------- Обработка сообщений ----------
        //
        public static async void Bot_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            try
            {
                foreach (var item in admins)
                {
                    if (item.Id == e.Message.Chat.Id)
                    {
                        Console.WriteLine($"ID: {item.Id}  Name: {item.Name}");
                        Console.WriteLine($"InLoginMenu: {item.inLonigMenu} InEnterMoney: {item.inEnterMoney} inDeleteEmployee: {item.inDeleteEmployee}\ninChooseEmployeeMenu: {item.inChooseEmployeeMenu} inChooseEmployee: {item.inChooseEmployee}");
                    }
                }

                string message = e.Message.Text;

                await bot.DeleteMessageAsync(e.Message.Chat.Id, e.Message.MessageId);

                // Очистка сообщений
                // --------------------------------

                foreach (var admin in admins)
                {
                    if (admin.Id == e.Message.Chat.Id)
                    {
                        if (admin.messages == null)
                        {
                            break;
                        }
                        for (int i = 0; i < admin.messages.Count; i++)
                        {
                            await bot.DeleteMessageAsync(admin.messages[i].Chat.Id, admin.messages[i].MessageId);
                        }
                        admin.messages.Clear();
                        DataControl.SetAdmins(admins);
                        break;
                    }
                }
                foreach (var employee in allEmployees)
                {
                    if (employee.Id == e.Message.Chat.Id)
                    {
                        if (employee.messages == null)
                        {
                            break;
                        }
                        for (int i = 0; i < employee.messages.Count; i++)
                        {
                            await bot.DeleteMessageAsync(employee.messages[i].Chat.Id, employee.messages[i].MessageId);
                        }
                        employee.messages.Clear();
                        DataControl.SetEmployees(allEmployees);
                        break;
                    }
                }
                foreach (var user in users)
                {
                    if (user.Id == e.Message.Chat.Id)
                    {
                        if (user.messages == null)
                        {
                            break;
                        }
                        for (int i = 0; i < user.messages.Count; i++)
                        {
                            await bot.DeleteMessageAsync(user.messages[i].Chat.Id, user.messages[i].MessageId);
                        }
                        user.messages.Clear();
                        DataControl.SetUsers(users);
                        break;
                    }
                }

                // --------------------------------

                // Ввод заработанных денег и сохраннеие файлов
                foreach (var admin in admins)
                {
                    if (admin.Id == e.Message.Chat.Id && admin.inEnterMoney == true)
                    {
                        admin.inEnterMoney = false;
                        foreach (var employee in allEmployees)
                        {
                            if (employee.Id == admin.EnableTimerToEmployee.Id)
                            {
                                WorkDay temp = new WorkDay(DateTime.Now, DateTime.Now - admin.EnableTimerToEmployee.StartTime, Convert.ToDouble(e.Message.Text));
                                employee.workDays.Add(temp);
                                TimeSpan tempTime = DateTime.Now - admin.EnableTimerToEmployee.StartTime;
                                // сообщение работнику о рабочем времени
                                employee.messages.Add(await bot.SendTextMessageAsync(employee.Id,
                                                                                     $"Вермя работы: {Convert.ToInt32(tempTime.TotalMinutes)} минут\n" +
                                                                                     $"Заработок: {Convert.ToDouble(e.Message.Text)} $"));

                                if (employee.workDays.Count > 30)
                                {
                                    employee.workDays.RemoveAt(0);
                                }
                                admin.EnableTimerToEmployee = null;
                                DataControl.SetAdmins(admins);
                                DataControl.SetEmployees(allEmployees);

                                // console
                                Console.WriteLine($"Date: {temp.Date}\nTime: {temp.Time.Minutes}\nSum: {temp.Money}");
                                if (e.Message.Chat.Id == mainAdm || e.Message.Chat.Id == mainAdmNik)
                                {
                                    admin.messages.Add(await bot.SendTextMessageAsync(
                                                           e.Message.Chat.Id,
                                                           "Меню",
                                                           replyMarkup: Buttons.MainMenuForMainAdmin()));
                                }
                                else
                                {
                                    admin.messages.Add(await bot.SendTextMessageAsync(
                                                           e.Message.Chat.Id,
                                                           "Меню",
                                                           replyMarkup: Buttons.MainMenuForAdmin()));
                                }
                                return;
                            }
                        }
                    }
                }

                switch (e.Message.Text)
                {
                case "/start":
                {
                    if (!Checks.IsEmploye(e.Message.Chat.Id, allEmployees) &&
                        !Checks.IsAdmin(e.Message.Chat.Id, admins))
                    {
                        users.Add(new User(e.Message.Chat.Id, e.Message.Chat.FirstName, e.Message.Chat.LastName));
                        DataControl.SetUsers(users);
                        // console
                        Console.WriteLine($"Add new user:\nID: {e.Message.Chat.Id}\nName: {e.Message.Chat.FirstName}\nLast name: {e.Message.Chat.LastName}\n\n");
                        foreach (var user in users)
                        {
                            if (user.Id == e.Message.Chat.Id)
                            {
                                user.messages.Add(await bot.SendTextMessageAsync(
                                                      e.Message.Chat.Id,
                                                      "Выберите пункт меню",
                                                      replyMarkup: Buttons.StartMesage()));
                                return;
                            }
                        }
                    }
                    foreach (var employee in allEmployees)
                    {
                        if (employee.Id == e.Message.Chat.Id)
                        {
                            employee.messages.Add(await bot.SendTextMessageAsync(
                                                      e.Message.Chat.Id,
                                                      "Выберите пункт меню",
                                                      replyMarkup: Buttons.StartMesage()));
                            return;
                        }
                    }
                    foreach (var admin in admins)
                    {
                        if (admin.Id == e.Message.Chat.Id)
                        {
                            admin.messages.Add(await bot.SendTextMessageAsync(
                                                   e.Message.Chat.Id,
                                                   "Выберите пункт меню",
                                                   replyMarkup: Buttons.StartMesage()));
                            return;
                        }
                    }
                    break;
                }

                case "l36hoi9f":
                {
                    foreach (var item in admins)
                    {
                        if (item.Id == e.Message.Chat.Id)
                        {
                            item.inLonigMenu = false;
                            break;
                        }
                    }
                    foreach (var user in users)
                    {
                        if (user.Id == e.Message.Chat.Id)
                        {
                            admins.Add(new Admin(user));
                            DataControl.SetAdmins(admins);
                            // console
                            Console.WriteLine($"Add new admin:\nID: {e.Message.Chat.Id}\nName: {e.Message.Chat.FirstName}\nLast name: {e.Message.Chat.LastName}\n\n");
                            users.Remove(user);
                            DataControl.SetUsers(users);
                            break;
                        }
                    }
                    foreach (var employee in allEmployees)
                    {
                        if (employee.Id == e.Message.Chat.Id)
                        {
                            admins.Add(new Admin(employee));
                            DataControl.SetAdmins(admins);
                            // console
                            Console.WriteLine($"Add new admin:\nID: {e.Message.Chat.Id}\nName: {e.Message.Chat.FirstName}\nLast name: {e.Message.Chat.LastName}\n\n");
                            allEmployees.Remove(employee);
                            DataControl.SetEmployees(allEmployees);
                            break;
                        }
                    }
                    // console
                    Console.WriteLine($"Незарегистрированных пользователей: {users.Count}");
                    foreach (var admin in admins)
                    {
                        if (admin.Id == e.Message.Chat.Id)
                        {
                            if (e.Message.Chat.Id == mainAdm || e.Message.Chat.Id == mainAdmNik)
                            {
                                admin.messages.Add(await bot.SendTextMessageAsync(
                                                       e.Message.Chat.Id,
                                                       "Меню",
                                                       replyMarkup: Buttons.MainMenuForMainAdmin()));
                            }
                            else
                            {
                                admin.messages.Add(await bot.SendTextMessageAsync(
                                                       e.Message.Chat.Id,
                                                       "Меню",
                                                       replyMarkup: Buttons.MainMenuForAdmin()));
                            }
                            return;
                        }
                    }
                    break;
                }

                default:
                {
                    break;
                }
                }
            }
            catch (Exception)
            {
            }
        }
Пример #29
0
        private void Bot_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            Model.User user;
            Telegram.Bot.Types.Message message = e.Message;
            if (message != null && message.Type == MessageType.Text)
            {
                IQueryable <Model.User> users = _db.Users.Where((u) => u.TelegramId == message.From.Id);
                if (users.Count() > 0)
                {
                    user           = users.FirstOrDefault();
                    user.UserName  = message.From.Username;
                    user.FirstName = message.From.FirstName;
                    user.LastName  = message.From.LastName;

                    //lock (_lockObj)
                    //{
                    //    _uiContext.Send(async (obj) =>
                    //    {
                    //        _db.Users.Update(user);
                    //        await _db.SaveChangesAsync();
                    //    }, null);
                    //}

                    _uiContext.Send((obj) =>
                    {
                        _db.Users.Update(user);
                        _db.SaveChanges();
                    }, null);
                }
                else
                {
                    user = new Model.User()
                    {
                        TelegramId = message.From.Id,
                        UserName   = message.From.Username,
                        FirstName  = message.From.FirstName,
                        LastName   = message.From.LastName,
                        Date       = DateTime.Now
                    };

                    //lock (_lockObj)
                    //{
                    //    _uiContext.Send(async (obj) =>
                    //    {
                    //        _db.Users.Add(user);
                    //        await _db.SaveChangesAsync();
                    //    }, null);
                    //}

                    _uiContext.Send((obj) =>
                    {
                        _db.Users.Add(user);
                        _db.SaveChanges();
                    }, null);
                }

                //if (user == null)
                //{
                //    user = new Model.User()
                //    {
                //        TelegramId = message.From.Id,
                //        UserName = message.From.Username,
                //        FirstName = message.From.FirstName,
                //        LastName = message.From.LastName,
                //        Date = DateTime.Now
                //    };
                //    await _db.Users.AddAsync(user);
                //}
                //else
                //{
                //    _db.Users.Update(user);
                //}

                Model.Message messageDb = new Model.Message()
                {
                    UserId    = user.Id,
                    MessageId = message.MessageId,
                    ChatId    = message.Chat.Id,
                    Text      = message.Text,
                    Date      = message.Date
                };

                //lock (_lockObj)
                //{
                //    _uiContext.Send(async (obj) =>
                //    {
                //        _db.Messages.Add(messageDb);
                //        await _db.SaveChangesAsync();
                //    }, null);
                //}

                _uiContext.Send((obj) =>
                {
                    _db.Messages.Add(messageDb);
                    _db.SaveChanges();
                }, null);

                ReceiveMessage?.Invoke(this, new object[]
                {
                    message.Chat.Id,
                    message.Text
                });
            }
        }
Пример #30
0
        public static void Send(Telegram.Bot.Args.MessageEventArgs e, List <string> msgList)
        {
            var msg = msgList.Aggregate((i, j) => i + "\n" + j);

            Send(e, msg);
        }