示例#1
0
            public Task <IEnumerable <IReply> > Invoke(TelegramMessageEventArgs input)
            {
                var gs = new GameState(_command);

                _command.CurrentState = gs;
                return(gs.BeginGame());
            }
示例#2
0
        public async Task <IEnumerable <IReply> > Invoke(TelegramMessageEventArgs args)
        {
            //There can be placed special invoke logic
            IEnumerable <IReply> result = await OnInvoke(args);

            return(result);
        }
示例#3
0
        protected override async Task <IEnumerable <IReply> > OnInvoke(TelegramMessageEventArgs input)
        {
            string board  = GetBoard(input.Message.Text);
            string output = await GetThreadsList(board);

            return(new TextReply(output).Yield());
        }
示例#4
0
        protected override Task <IEnumerable <IReply> > OnInvoke(TelegramMessageEventArgs input)
        {
            string expression = input.Message.Text.Substring(1);

            WolframAlpha wolfram = new WolframAlpha(ApiToken);

            QueryResult results = wolfram.Query(expression);

            if (results == null)
            {
                return(Task.FromResult(Nothing));
            }

            var sb = new StringBuilder();

            foreach (var pod in results.Pods)
            {
                sb.AppendLine(pod.Title);

                if (pod.SubPods == null)
                {
                    continue;
                }

                foreach (var subPod in pod.SubPods)
                {
                    sb.AppendLine(subPod.Title);
                    sb.AppendLine(subPod.Plaintext);
                }
            }

            return(FromResult(new TextReply(sb.ToString())));
        }
示例#5
0
        protected override async Task <IEnumerable <IReply> > OnInvoke(TelegramMessageEventArgs input)
        {
            string anekdot = await Task.Run(() => GetAnekdot());

            string decoded = HttpUtility.HtmlDecode(anekdot); //no idea if required

            return(new TextReply(decoded).Yield());
        }
示例#6
0
        protected override async Task <IEnumerable <IReply> > OnInvoke(TelegramMessageEventArgs input)
        {
            int poolSize = 6393;
            int index    = _random.Next(poolSize) + 1;

            byte[] gif = await GetGif(index);

            return(new VideoReply(gif).Yield());
        }
示例#7
0
            public Task <IEnumerable <IReply> > Invoke(TelegramMessageEventArgs input)
            {
                if (MessageEquals(input, "всё", "все", "конец", "завершить", "end"))
                {
                    _command.CurrentState = new BeginGameState(_command);
                    return(FromResult(new TextReply("Викторина завершена")));
                }

                if (MessageEquals(input, "не знаю"))
                {
                    string answer = _currentQuestion.Answer;
                    _currentQuestion = _questions.PickRandom();
                    return(Task.FromResult((IEnumerable <IReply>) new IReply[]
                    {
                        new TextReply($"Правильный ответ: {answer}"),
                        new TextReply($"Следующий вопрос: {_currentQuestion.Text}")
                    }));
                }

                if (MessageEquals(input, "счет", "счёт", "score"))
                {
                    int score = _records.GetPoints(input.From);
                    return(Task.FromResult((IEnumerable <IReply>) new IReply[]
                    {
                        new TextReply($"Счет игрока {input.From.Username}: {score}"),
                    }));
                }

                if (MessageEquals(input, "топ"))
                {
                    int count = 10;

                    string top = _records.Data.OrderByDescending(t => t.Value)
                                 .Select((t, i) => $"{i+1}. {t.Key.FirstName} {t.Key.LastName} - {t.Value}")
                                 .Take(count)
                                 .StringJoin("\r\n");

                    return(Task.FromResult((IEnumerable <IReply>) new IReply[]
                    {
                        new TextReply($"Топ-{count} игроков:\r\n\r\n" + top),
                    }));
                }

                if (MessageEquals(input, _currentQuestion.Answer))
                {
                    string answer = _currentQuestion.Answer;
                    _currentQuestion = _questions.PickRandom();
                    _records.AddPoints(input.From, PointsPerCorrectAnswer);
                    return(Task.FromResult((IEnumerable <IReply>) new IReply[]
                    {
                        new TextReply($"Правильно, {input.From.FirstName} ты получаешь {PointsPerCorrectAnswer} очков! Это {answer}"),
                        new TextReply($"Следующий вопрос: {_currentQuestion.Text}")
                    }));
                }

                return(Task.FromResult(Nothing));
            }
示例#8
0
 private void MessageGeneratedEvent(object sender, TelegramMessageEventArgs e)
 {
     if (e.Immediately)
     {
         Sender.Add(e.TelegramMessage);
     }
     else
     {
         Sender.Enqueue(e.TelegramMessage);
     }
 }
示例#9
0
        protected override async Task <IEnumerable <IReply> > OnInvoke(TelegramMessageEventArgs input)
        {
            var user = await TryGet <User>(_client, "getme");

            if (user?.Username == null)
            {
                return(Nothing);
            }

            return(new TextReply($"Привет, меня зовут {user.Username}").Yield());
        }
示例#10
0
        public async Task <IEnumerable <IReply> > Invoke(TelegramMessageEventArgs input)
        {
            if (ThrottleFilter != null && !ThrottleFilter.CanExecute())
            {
                TimeSpan remainingTime = ThrottleFilter.Frequency.Value - (DateTime.Now - ThrottleFilter.LastExecution);
                return(new TextReply(GetOverThrottleText(remainingTime)).Yield());
            }

            IEnumerable <IReply> result = await OnInvoke(input);

            ThrottleFilter?.Executed();
            return(result);
        }
示例#11
0
        private void GenerateMessage(TelegramMessageEventArgs e, bool nonPriorityQueue = false)
        {
            EventHandler <TelegramMessageEventArgs> handler;

            if (nonPriorityQueue)
            {
                handler = NonPriorityMessageGenerated;
            }
            else
            {
                handler = MessageGenerated;
            }
            handler?.Invoke(this, e);
        }
示例#12
0
        public async Task <IEnumerable <IReply> > Invoke(TelegramMessageEventArgs input)
        {
            var result = new List <IReply>();

            foreach (var command in Commands)
            {
                if (command.ShouldInvoke(input))
                {
                    var output = await command.Invoke(input);

                    result.AddRange(output);
                }
            }
            return(result);
        }
示例#13
0
        // end

        private void UpdatesThread()
        {
            Logger.LogMessage("Бот запущен.");
            while (isRun)
            {
                var updates = GetUpdates();

                foreach (var update in updates)
                {
                    updateOffset = update.UpdateId + 1;

                    if (update.CallbackQuery != null && OnCallbackQuery != null)
                    {
                        var args = new CallbackQueryEventArgs
                        {
                            CallbackQuery = update.CallbackQuery
                        };

                        OnCallbackQuery(args);
                    }

                    if (update.Message != null && OnMessage != null)
                    {
                        var args = new TelegramMessageEventArgs
                        {
                            ChatId    = update.Message.Chat.Id,
                            MessageId = update.Message.MessageId,
                            From      = update.Message.From,
                            Message   = update.Message
                        };

                        OnMessage(args);
                    }
                    if (update.InlineQuery != null && OnInlineQuery != null)
                    {
                        var args = new InlineQueryEventArgs
                        {
                            InlineQuery = update.InlineQuery
                        };

                        OnInlineQuery(args);
                    }
                }

                System.Threading.Thread.Sleep(1000);
            }
        }
示例#14
0
        private async Task ProcessMessage(Message message)
        {
            var args = new TelegramMessageEventArgs
            {
                ChatId    = message.Chat.Id,
                MessageId = message.MessageId,
                From      = message.From,
                Message   = message
            };

            var results = await _invoker.Invoke(args);

            foreach (var result in results)
            {
                //сюда reply sender
            }
        }
示例#15
0
        protected override async Task <IEnumerable <IReply> > OnInvoke(TelegramMessageEventArgs input)
        {
            byte[] image;
            try
            {
                image = await GetRandomCatImage();
            }
            catch (WebException ex)
            {
                Logger.Log(ex);
                return(Nothing);
            }

            return(new IReply[]
            {
                new ImageReply(image, "Кто-то сказал " + FindCatWord(input.Message.Text) + "???")
            });
        }
示例#16
0
        private async Task ProcessMessage(Message message)
        {
            var args = new TelegramMessageEventArgs
            {
                ChatId    = message.Chat.Id,
                MessageId = message.MessageId,
                From      = message.From,
                Message   = message
            };

            var results = await _invoker.Invoke(args);

            foreach (var result in results)
            {
                await _replySender.Send(result, args.ChatId);

                await Task.Delay(300);
            }
        }
示例#17
0
 protected override async Task <IEnumerable <IReply> > OnInvoke(TelegramMessageEventArgs input)
 {
     return((await GetRandomXkcd()).Yield());
 }
示例#18
0
 public override bool ShouldInvoke(TelegramMessageEventArgs input)
 {
     return(MessageEquals(input, "xkcd"));
 }
示例#19
0
 public bool ShouldInvoke(TelegramMessageEventArgs input)
 {
     return(true);
 }
示例#20
0
 public override bool ShouldInvoke(TelegramMessageEventArgs input)
 {
     return(MessageEquals(input, "ролл", "roll", "/roll"));
 }
示例#21
0
 public bool ShouldInvoke(TelegramMessageEventArgs input)
 {
     return(MessageEquals(input, "викторина"));
 }
示例#22
0
 private void NonPriorityMessageGeneratedEvent(object sender, TelegramMessageEventArgs e)
 {
     Bot.NonPriorityMessageSender.Enqueue(e.TelegramMessage);
 }
示例#23
0
 public abstract Task <IEnumerable <IReply> > OnInvoke(TelegramMessageEventArgs input);
示例#24
0
 //Abstract methods
 public abstract bool ShouldInvoke(TelegramMessageEventArgs args);
示例#25
0
 protected static bool MessageEquals(TelegramMessageEventArgs args, params string[] values)
 {
     return(StringEqualsToOneOf(args?.Message?.Text, values));
 }
示例#26
0
 public override bool ShouldInvoke(TelegramMessageEventArgs input)
 {
     OneRequestPer(TimeSpan.FromSeconds(5));
     return(MessageEquals(input, "gif", "гифочку", "гифку", "гиф"));
 }
示例#27
0
        public override bool ShouldInvoke(TelegramMessageEventArgs input)
        {
            string prefix = "харкач";

            return(MessageEquals(input, prefix) || Regex.IsMatch(input.Message.Text, prefix + @" +\/.", RegexOptions.IgnoreCase));
        }
示例#28
0
 public override bool ShouldInvoke(TelegramMessageEventArgs input)
 {
     OneRequestPer(TimeSpan.FromSeconds(30));
     return(input?.Message?.Text.StartsWith("!") ?? false);
 }
示例#29
0
 protected override Task <IEnumerable <IReply> > OnInvoke(TelegramMessageEventArgs input)
 {
     return(FromResult(new TextReply(_random.Next(0, 101).ToString())));
 }
示例#30
0
 public override bool ShouldInvoke(TelegramMessageEventArgs input)
 {
     OneRequestPer(TimeSpan.FromSeconds(5));
     return(input?.Message?.Text?.ToUpper().Contains("КОТ") ?? false);
 }