Пример #1
0
 protected static void OnExit(object sender, ConsoleCancelEventArgs args)
 {
     BOT.StopReceiving();
     Json_Data.WriteData();
     logger.Info("Exit.");
     _closing.Set();
 }
Пример #2
0
        /// <summary>
        /// "-nopreload" - prevents loading shedules on start
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            using (StreamReader file = File.OpenText("markov.json"))
            {
                JsonSerializer serializer = new JsonSerializer();
                Markov = (NodeChain)serializer.Deserialize(file, typeof(NodeChain));
            }
            //Markov = System.Text.Json.JsonSerializer.Deserialize<NodeChain>(File.ReadAllText("markov.json"));

            Json_Data.ReadData();
            KeyboardInit();


            BOT = new Telegram.Bot.TelegramBotClient(ReadToken());
            logger.Info("Bot connected.");
            BOT.OnMessage += BotOnMessageReceived;

            BOT.StartReceiving(new UpdateType[] { UpdateType.Message });
            //Scheduler.RunNotifier().GetAwaiter().GetResult();
            logger.Info("Waiting for messages...");

            Console.CancelKeyPress += OnExit;
            _closing.WaitOne();
        }
Пример #3
0
        static async void BotOnMessageReceived(object sender, MessageEventArgs MessageEventArgs)
        {
            Telegram.Bot.Types.Message msg = MessageEventArgs.Message;
            if (msg == null || msg.Type != MessageType.Text)
            {
                return;
            }

            string Answer = "Server Error";

            if (DateTime.UtcNow.Subtract(msg.Date).TotalMinutes > 3)
            {
                await BOT.SendTextMessageAsync(msg.Chat.Id, Answer);

                return;
            }

            if (UserList.ContainsKey(msg.Chat.Id))
            {
                UserList[msg.Chat.Id].LastAccess = DateTime.Now;
            }
            if (!IsRegistered(msg.Chat.Id))
            {
                UserList.Add(msg.Chat.Id, new User()
                {
                    ident = 3
                });
                Json_Data.WriteData();   //регистрация в базе
            }
            if (UserList[msg.Chat.Id].ident == 5)
            {
                bool onOrOff = msg.Text.ToLower() == "включить";
                UserList[msg.Chat.Id].eveningNotify = onOrOff;
                UserList[msg.Chat.Id].ident         = 3;
                Json_Data.WriteData();
                string onOrOffMsg = onOrOff ? "включено" : "выключено";
                Answer = $"Вечернее уведомление *{onOrOffMsg}*.";
            }
            else if (UserList[msg.Chat.Id].ident == 6)
            {
                bool onOrOff = msg.Text.ToLower() == "включить";
                UserList[msg.Chat.Id].morningNotify = onOrOff;
                UserList[msg.Chat.Id].ident         = 3;
                Json_Data.WriteData();
                string onOrOffMsg = onOrOff ? "включено" : "выключено";
                Answer = $"Уведомление за 15 минут до первой пары *{onOrOffMsg}*.";
            }
            else
            {
                try
                {
                    switch (msg.Text.ToLower())             // Обработка команд боту
                    {
                    case "/start":
                        Answer = "Добро пожаловать!\n" + _help;
                        break;

                    case "/joke":
                    case "анекдот":
                        do
                        {
                            Answer = Markov.MakeText(1, random).Replace(" . ", ". ");
                        } while (Answer.Length > 4096);     //Search for new joke if it exceeds Telegram text msg limit
                        break;

                    case "/knowme":
                    case "знаешь меня?":
                        Answer = $"Вы {msg.Chat.FirstName.Replace("`", "").Replace("_", "").Replace("*", "")}.";
                        break;

                    case "/eveningnotify":
                        Answer = $"Сейчас вечернее уведомление *{(UserList[msg.Chat.Id].eveningNotify ? "включено" : "выключено")}*. \nНастройте его.";
                        UserList[msg.Chat.Id].ident = 5;
                        await BOT.SendTextMessageAsync(msg.Chat.Id, Answer, ParseMode.Markdown, replyMarkup : notifierKeyboard);

                        return;

                    case "/morningnotify":
                        Answer = $"Сейчас утреннее уведомление *{(UserList[msg.Chat.Id].morningNotify ? "включено" : "выключено")}*. \nНастройте его.";
                        UserList[msg.Chat.Id].ident = 6;
                        await BOT.SendTextMessageAsync(msg.Chat.Id, Answer, ParseMode.Markdown, replyMarkup : notifierKeyboard);

                        return;


                    case "/stop":
                    case "стоп":
                        UserList.Remove(msg.Chat.Id);
                        Json_Data.WriteData();
                        Answer = "Я вас забыл! Для повторной регистрации пиши /start";
                        await BOT.SendTextMessageAsync(msg.Chat.Id, Answer, replyMarkup : new ReplyKeyboardRemove());

                        return;

                    case "помощь":
                    case "/help":
                        Answer = _help;
                        break;

                    case "/info":
                    case "информация":
                        Answer = "Прекрасный бот для генерации прекрасного настроения!\n" +
                                 "Данный бот, реализованный на марковских цепях, используя базу данных из свыше, чем 100т. анекдотов, способен генерировать новые шедевры комедийного искусства.";
                        break;

                    case "/forceupdate":
                        logger.Info($"Запрошено принудительное обновление, ID: {msg.Chat.Id}, @{msg.Chat.Username}.");

                        logger.Info($"Завершено принудительное обновление, ID: {msg.Chat.Id}, @{msg.Chat.Username}.");
                        Answer = "Данные обновлены!";
                        break;

                    default:
                        Answer = "Введены неверные данные, повторите попытку.";
                        break;
                    }
                }
                catch (System.Net.WebException e)
                {
                    logger.Error(e, "Catched exeption:");
                    Answer = "Ошибка! Вероятно, что-то умерло. Пожалуйста, попробуйте повторить запрос позднее.";
                }
            }
            try
            {
                await BOT.SendTextMessageAsync(msg.Chat.Id, Answer, ParseMode.Markdown, replyMarkup : defaultKeyboard);
            }
            catch (Exception ex) when(ex is System.Net.Http.HttpRequestException && ex.Message.Contains("429"))
            {
                logger.Warn(ex, $"Network error while answering @{msg.Chat.Username}");
            }
            catch (Exception ex) when(ex is Telegram.Bot.Exceptions.ApiRequestException)
            {
                logger.Warn(ex, $"Telegram API error while answering @{msg.Chat.Username}");
            }
        }