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