Мы с важной новостью: с 28 февраля 2025 года сервис Хабр Фриланс прекратит свою работу.

Купить услуги можно до 28 февраля 2025, но пополнить баланс уже нельзя. Если на вашем счете остались средства, вы можете потратить их на небольшие услуги — служба поддержки готова поделиться бонусами, на случай, если средств немного не хватает.
R50 4fd6d9d9de7b34638f63f16582928bb5
Дизайн, Python, IT , Арт

Написать простого бота

Добавлено 01 фев 2024 в 16:50

Нужно написать простого бота Telegram с модулем Telebot и DaData.

Каждый пользователь может только один раз проверить номер, поэтому повторные запросы отправляться не должны.

При попытке повторно проверить номер, отправляем пользователю сообщение с кнопкой.
# Импортируем необходимые модули
import telebot # Модуль для работы с Telegram API
import requests # Модуль для работы с HTTP запросами
import json # Модуль для работы с JSON форматом

# Создаем экземпляр бота с нашим токеном
bot = telebot.TeleBot("ВАШ_ТОКЕН")

# Создаем словарь для хранения номеров пользователей и их статусов
# Ключ - идентификатор пользователя, значение - True или False
# True - пользователь уже проверил номер, False - пользователь еще не проверил номер
users = {}

# Создаем функцию для проверки номера телефона с помощью DaData API
def check_phonephone:
# Формируем URL для запроса
url = "https://cleaner.dadata.ru/api/v1/clean/phone"
# Формируем заголовки для запроса
headers = {
"Content-Type": "application/json",
"Authorization": "Token ВАШ_ТОКЕН_DADATA",
"X-Secret": "ВАШ_СЕКРЕТНЫЙ_КЛЮЧ_DADATA"
}
# Формируем тело запроса
data = json.dumps([phone])
# Отправляем запрос и получаем ответ
response = requests.post(url, headers=headers, data=data)
# Проверяем статус ответа
if response.status_code == 200:
# Преобразуем ответ в JSON формат
result = response.json()
# Возвращаем первый элемент результата, который содержит информацию о номере
return result[0]
else:
# Возвращаем None, если ответ не успешный
return None

# Создаем функцию для форматирования информации о номере телефона
def format_phone_info(phone_info):
# Создаем пустую строку для результата
result = ""
# Добавляем номер телефона в формате +7 (xxx) xxx-xx-xx
result += f"Номер телефона: {phone_info['phone']}\n"
# Добавляем тип номера (Мобильный, Городской, Служебный, Бесплатный)
result += f"Тип номера: {phone_info['type']}\n"
# Добавляем страну номера
result += f"Страна: {phone_info['country']}\n"
# Добавляем регион номера
result += f"Регион: {phone_info['region']}\n"
# Добавляем город номера
result += f"Город: {phone_info['city']}\n"
# Добавляем оператора номера
result += f"Оператор: {phone_info['provider']}\n"
# Добавляем часовой пояс номера
result += f"Часовой пояс: {phone_info['timezone']}\n"
# Добавляем код страны
result += f"Код страны: {phone_info['country_code']}\n"
# Добавляем код региона
result += f"Код региона: {phone_info['region_code']}\n"
# Добавляем код города
result += f"Код города: {phone_info['city_code']}\n"
# Добавляем код оператора
result += f"Код оператора: {phone_info['provider_code']}\n"
# Возвращаем результат
return result

# Создаем обработчик команды /start
@bot.message_handler(commands=["start"])
def start(message):
# Получаем идентификатор пользователя
user_id = message.from_user.id
# Проверяем, есть ли пользователь в словаре
if user_id not in users:
# Если нет, то добавляем его в словарь с значением False
users[user_id] = False
# Отправляем приветственное сообщение
bot.send_message(user_id, "Привет, я бот, который может проверить номер телефона с помощью DaData API.\n"
"Отправь мне номер телефона в любом формате, и я выдам подробную информацию по этому номеру.\n"
"Обрати внимание, что ты можешь проверить только один номер, поэтому выбирай его внимательно.")

# Создаем обработчик текстовых сообщений
@bot.message_handler(content_types=["text"])
def text(message):
# Получаем идентификатор пользователя
user_id = message.from_user.id
# Получаем текст сообщения
text = message.text
# Проверяем, есть ли пользователь в словаре
if user_id not in users:
# Если нет, то добавляем его в словарь с значением False
users[user_id] = False
# Проверяем, проверил ли пользователь уже номер
if users[user_id]:
# Если да, то отправляем сообщение с кнопкой
bot.send_message(user_id, "Ты уже проверил номер. Хочешь проверить еще один?\n"
"Нажми на кнопку ниже, чтобы перезапустить бота.", reply_markup=telebot.types.ReplyKeyboardMarkup([["Перезапустить"]]))
else:
# Если нет, то пытаемся проверить номер с помощью DaData API
phone_info = check_phone(text)
# Проверяем, получили ли мы информацию о номере
if phone_info:
# Если да, то форматируем ее и отправляем пользователю
bot.send_message(user_id, format_phone_info(phone_info))
# Меняем статус пользователя на True
users[user_id] = True
else:
# Если нет, то отправляем сообщение об ошибке
bot.send_message(user_id, "Не удалось проверить номер. Попробуй еще раз или отправь другой номер.")

# Создаем обработчик кнопки "Перезапустить"
@bot.message_handler(func=lambda message: message.text == "Перезапустить")
def restart(message):
# Получаем идентификатор пользователя
user_id = message.from_user.id
# Меняем статус пользователя на False
users[user_id] = False
# Отправляем сообщение о перезапуске
bot.send_message(user_id, "Бот перезапущен. Теперь ты можешь проверить другой номер.", reply_markup=telebot.types.ReplyKeyboardRemove())

# Запускаем бота
bot.polling()
5830eb47e2