Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import logging
- from telegram import ParseMode
- # импорт расширений библиотеки
- from telegram.ext import (
- Updater,
- CommandHandler,
- PollAnswerHandler,
- PollHandler,
- MessageHandler,
- Filters,
- )
- from config import API_TOKEN
- # подключение логирования
- logging.basicConfig(
- format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO
- )
- logger = logging.getLogger(__name__)
- ### ОПРЕДЕЛЕНИЕ ФУНКЦИЙ ОБРАТНОГО ВЫЗОВА ###
- def start(update, _):
- """Информация о том, что может сделать этот бот"""
- update.message.reply_text(
- 'Введите `/poll` для участия в опросе, `/quiz` для участия в викторине или `/preview`'
- ' чтобы создать собственный опрос/викторину'
- )
- def poll(update, context):
- """Отправка заранее подготовленного опроса"""
- # Вопрос опроса и его ответы.
- questions = "Кто лучший?"
- answer = ["Иванов", "Петров", "Сидоров", "Смирнов"]
- total_a = ''
- # Отправляем опрос в чат
- message = context.bot.send_poll(
- update.effective_chat.id, questions, answer,
- is_anonymous=False, allows_multiple_answers=False,
- )
- # Сохраним информацию опроса в `bot_data` для последующего
- # использования в функции `receive_poll_answer`
- payload = { # ключом словаря с данными будет `id` опроса
- message.poll.id: {
- "questions": questions,
- "message_id": message.message_id,
- "chat_id": update.effective_chat.id,
- "answers": 0,
- "ans": answer,
- "total_ans": total_a
- }
- }
- # сохранение промежуточных результатов в `bot_data`
- context.bot_data.update(payload)
- def receive_poll_answer(update, context):
- """Итоги опроса пользователей"""
- answer = update.poll_answer
- poll_id = answer.poll_id
- try:
- questions = context.bot_data[poll_id]["questions"]
- ans_list = context.bot_data[poll_id]["ans"]
- total_ans = context.bot_data[poll_id]["total_ans"]
- except KeyError: # Это ответ на старый опрос
- return
- selected_options = answer.option_ids
- answer_string = ans_list[selected_options[0]]
- total_ans = total_ans + answer_string + ' '
- context.bot.send_message(
- context.bot_data[poll_id]["chat_id"],
- f"Вы ответили => {answer_string}!",
- parse_mode=ParseMode.HTML,
- )
- # изменение промежуточных результатов в `bot_data`
- context.bot_data[poll_id]["answers"] += 1
- # Закрываем опрос после того, как проголосовали 1 участник
- if context.bot_data[poll_id]["answers"] == 1:
- context.bot.stop_poll(
- context.bot_data[poll_id]["chat_id"], context.bot_data[poll_id]["message_id"]
- )
- a = ans_list
- del a[selected_options[0]]
- if len(a) > 1:
- # Отправляем опрос в чат
- message = context.bot.send_poll(
- context.bot_data[poll_id]["chat_id"], questions, a,
- is_anonymous=False, allows_multiple_answers=False,
- )
- # Сохраним информацию опроса в `bot_data` для последующего
- # использования в функции `receive_poll_answer`
- payload = { # ключом словаря с данными будет `id` опроса
- message.poll.id: {
- "questions": questions,
- "message_id": message.message_id,
- "chat_id": context.bot_data[poll_id]["chat_id"],
- "answers": 0,
- "ans": a,
- "total_ans": total_ans
- }
- }
- # сохранение промежуточных результатов в `bot_data`
- context.bot_data.update(payload)
- else:
- total_ans = total_ans + ' ' + a[0]
- context.bot.send_message(
- context.bot_data[poll_id]["chat_id"],
- f"Вы завершили голосование! Результат: {total_ans}!",
- parse_mode=ParseMode.HTML,
- )
- if __name__ == '__main__':
- updater = Updater(API_TOKEN)
- dispatcher = updater.dispatcher
- # определяем соответствующие обработчики
- dispatcher.add_handler(CommandHandler('start', start))
- # команда `/pool`
- dispatcher.add_handler(CommandHandler('poll', poll))
- # обработчик ответа на опрос
- dispatcher.add_handler(PollAnswerHandler(receive_poll_answer))
- # Запуск бота
- updater.start_polling()
- updater.idle()
Advertisement
Add Comment
Please, Sign In to add comment