Advertisement
askanton

Як додати captcha в телеграм бот | Вивчаємо #python

Jun 28th, 2023
827
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.55 KB | None | 0 0
  1. import telebot  # імпортуємо бібліотеку
  2. import random
  3.  
  4. # токе бота отриманий BotFather
  5. bot_token = "****************************g"
  6.  
  7. # Посилання із запрошенням на нашу групу
  8. group_invite_link = "https://t.me/+**********************"
  9. # Описуємо правила
  10. rules = """
  11. Вітаю в нашій групі!
  12.  
  13. Прочитайте та підтвердьте наступні правила:
  14.  
  15. 1. Правило 1
  16. 2. Правило 2
  17. 3. Правило 3
  18.  
  19. """
  20.  
  21. # Створюємо бота
  22. bot = telebot.TeleBot(token=bot_token)
  23.  
  24.  
  25. def captcha_txt():
  26.     operators = [
  27.         "*",
  28.         "-",
  29.         "/",
  30.         "+",
  31.     ]
  32.     operator = random.choice(operators)
  33.  
  34.     while True:
  35.         left_part = random.randint(0, 10)
  36.         right_part = random.randint(1, 10)
  37.  
  38.         if operator == "*":
  39.             data = left_part * right_part
  40.         elif operator == "-":
  41.             if left_part < right_part:
  42.                 left_part, right_part = right_part, left_part
  43.             data = left_part - right_part
  44.         elif operator == "/":
  45.             data = left_part / right_part
  46.             if not data.is_integer():
  47.                 continue  # Знову генеруємо left_part та right_part
  48.             data = int(data)
  49.         else:
  50.             data = left_part + right_part
  51.  
  52.         break  # Break the loop if a valid result is obtained
  53.     return left_part, right_part, data, operator
  54.  
  55.  
  56. @bot.callback_query_handler(
  57.     func=lambda call: True
  58. )  # Тут перевіряємо праильність вирішення каптчі
  59. def handle_button_click(call):
  60.     bot.answer_callback_query(call.id)  # Відлювлюємо відповідь
  61.     # Перевіряємо відповідь
  62.     if call.data == "incorrect":
  63.         bot.send_message(call.message.chat.id, "Невірна відповідь. Спробуйте знову.")
  64.         # Перезапускаємо процес
  65.         start(call.message)
  66.  
  67.  
  68. @bot.message_handler(commands=["start"])
  69. def start(message):
  70.     bot.send_message(message.chat.id, rules)
  71.     left_part, right_part, data, operator = captcha_txt()  # генеруємо всі дані
  72.     print(left_part, right_part, data, operator)
  73.     button_list = [  # створюємо список з конпками
  74.         telebot.types.InlineKeyboardButton(
  75.             text=f"Погоджуюсь з правилами. Правильна відповідь {data}",
  76.             url=group_invite_link,
  77.         ),
  78.         telebot.types.InlineKeyboardButton(
  79.             text=f"Погоджуюсь з правилами. Правильна відповідь {random.randint(0, 50)}",
  80.             callback_data="incorrect",
  81.         ),
  82.         telebot.types.InlineKeyboardButton(
  83.             text=f"Погоджуюсь з правилами. Правильна відповідь {random.randint(0, 50)}",
  84.             callback_data="incorrect",
  85.         ),
  86.     ]
  87.  
  88.     random.shuffle(button_list)  # тасуємо список з кнопками
  89.  
  90.     keyboard_capt = telebot.types.InlineKeyboardMarkup()
  91.     for button in button_list:
  92.         keyboard_capt.add(button)
  93.  
  94.     bot.send_message(
  95.         message.chat.id,
  96.         f"Для того щоб приєднатись до групи оберіть кнопку з правильною відповіддю на вираз: {left_part} {operator} {right_part}",
  97.         reply_markup=keyboard_capt,
  98.     )
  99.  
  100.  
  101. # Запускаєм бота
  102. bot.polling()
  103.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement