예제 #1
0
        private async void BotOnCallbackQueryReceived(object sender, CallbackQueryEventArgs callbackQueryEventArgs)
        {
            var callbackQuery = callbackQueryEventArgs.CallbackQuery;

            // Обработка голосования
            TelegramPoll poll = polls.FirstOrDefault(p => p.ChatId == callbackQuery.Message.Chat.Id &&
                                                     p.MessageId == callbackQuery.Message.MessageId);

            if (poll != null)
            {
                bool isVoted = poll.RegisterAnswer(callbackQuery.Data, callbackQuery.From);
                await bot.AnswerCallbackQueryAsync(
                    callbackQuery.Id,
                    isVoted?$"Голос за {callbackQuery.Data}!" : "Ваш голос уже учтён!");

                return;
            }

            try
            {
                await bot.AnswerCallbackQueryAsync(
                    callbackQuery.Id,
                    $"Received {callbackQuery.Data}");
            }
            catch (Exception ex)
            {
            }
        }
예제 #2
0
        public virtual void GetPoolResult(object sender, Message message)
        {
            if (polls.Count == 0)
            {
                bot.SendTextMessageAsync(
                    message.Chat.Id,
                    "Нет доступных голосований.",
                    replyMarkup: new ReplyKeyboardRemove());
                return;
            }

            // Пользователь не указал голосование
            if (message.Text.Split(' ').Length < 2)
            {
                ReplyKeyboardMarkup requestReplyKeyboard = new ReplyKeyboardMarkup(polls.Select(p => new KeyboardButton($"/pollresult {p.Question}")), true, true);

                bot.SendTextMessageAsync(
                    message.Chat.Id,
                    "Результат какого голосования показать?",
                    replyMarkup: requestReplyKeyboard);
            }
            else
            {
                // Проверка голосований
                TelegramPoll poll = polls.FirstOrDefault(p => p.Question == message.Text);
                poll?.ShowPollResult(message);
            }
        }
예제 #3
0
        public virtual void StopPool(object sender, Message message)
        {
            if (polls.Count == 0)
            {
                bot.SendTextMessageAsync(
                    message.Chat.Id,
                    "Нет доступных голосований.",
                    replyMarkup: new ReplyKeyboardRemove());
                return;
            }

            // Пользователь не указал голосование
            if (message.Text.Split(' ').Length < 2)
            {
                ReplyKeyboardMarkup requestReplyKeyboard = new ReplyKeyboardMarkup(polls.Select(p => new KeyboardButton($"/endpoll {p.Question}")), true, true);

                bot.SendTextMessageAsync(
                    message.Chat.Id,
                    "Какое голосование остановить?",
                    replyMarkup: requestReplyKeyboard);
            }
            else
            {
                // Проверка голосований
                TelegramPoll poll = polls.FirstOrDefault(p => p.Question == message.Text);
                if (poll == null)
                {
                    return;
                }

                if (poll.Creator != message.From)
                {
                    bot.SendTextMessageAsync(
                        message.Chat.Id,
                        "Голосование может остановить только создатель.",
                        replyMarkup: new ReplyKeyboardRemove());
                    return;
                }

                poll.EndPoll();
            }
        }
예제 #4
0
        public virtual void CreatePool(object sender, Message message)
        {
            string[] data     = message.Text.Split(':');
            string   question = data[0].Trim();

            string[] answers = data[1].Split(';');

            if (string.IsNullOrEmpty(question) || answers.Length < 2)
            {
                bot.SendTextMessageAsync(
                    message.Chat.Id,
                    "Неправильный формат команды.");
                return;
            }

            TelegramPoll poll = new TelegramPoll(bot, message.Chat.Id);

            poll.Send(message.From, question, answers);
            polls.Add(poll);

            // Удаление голосования по завершению
            poll.End += () => { polls.Remove(poll); };
        }