
import telebot # для работы с телеграм ботом
import re # для работы с регулярными выражениями
import wikipedia # для поиска статей и изображений на Википедии
import requests # для работы с HTTP запросами
import json # для работы с JSON данными
# Создаем объект бота с помощью токена
# Вставьте свой токен вместо YOUR-TOKEN
bot = telebot.TeleBot("*?((*")
# Создаем клавиатуру с двумя кнопками: "Значение" и "Фото"
keyboard = telebot.types.ReplyKeyboardMarkup(resize_keyboard=True)
button1 = telebot.types.KeyboardButton("Значение")
button2 = telebot.types.KeyboardButton("Фото")
keyboard.add(button1, button2)
# Определяем функцию, которая будет обрабатывать команду /start
@bot.message_handler(commands=["start"])
def start_message(message):
# Отправляем приветственное сообщение и показываем клавиатуру
bot.send_message(message.chat.id, "Привет! Я чат-бот, который может показать тебе значение или фото любого слова. Нажми на одну из кнопок и введи слово.", reply_markup=keyboard)
# Определяем функцию, которая будет обрабатывать текстовые сообщения от пользователя
@bot.message_handler(content_types=["text"])
def handle_text(message):
# Получаем текст сообщения
text = message.text
# Проверяем, является ли текст словом (состоит из букв и пробелов)
if re.match("^[a-zA-Zа-яА-Я ]+$", text):
# Проверяем, какая кнопка была нажата перед вводом слова
if message.reply_to_message:
# Если была нажата кнопка "Значение"
if message.text == "Значение":
# Пытаемся найти статью на Википедии по этому слову
try:
page = wikipedia.page(text)
# Получаем краткое описание статьи и отправляем его пользователю
summary = page.summary
bot.send_message(message.chat.id, summary)
# Если не удалось найти статью на Википедии, сообщаем пользователю об ошибке
except wikipedia.exceptions.PageError:
bot.send_message(message.chat.id, "Извините, я не нашел статьи на Википедии по слову " + text)
except wikipedia.exceptions.DisambiguationError:
bot.send_message(message.chat.id, "Извините, это слово имеет несколько значений. Пожалуйста, уточните свой запрос.")
# Если была нажата кнопка "Фото"
elif message.text == "Фото":
# Пытаемся найти изображение на Википедии по этому слову
try:
page = wikipedia.page(text)
# Получаем список изображений, связанных со статьей
images = page.images
# Если список не пустой, выбираем случайное изображение и отправляем его пользователю
if images:
import random
image = random.choice(images)
bot.send_photo(message.chat.id, image)
# Иначе сообщаем пользователю, что не нашли изображений на Википедии по этому слову
else:
bot.send_message(message.chat.id, "Извините, я не нашел изображений на Википедии по слову " + text)
# Если не удалось найти статью на Википедии, сообщаем пользователю об ошибке
except wikipedia.exceptions.PageError:
bot.send_message(message.chat.id, "Извините, я не нашел статьи на Википедии по слову " + text)
except wikipedia.exceptions.DisambiguationError:
bot.send_message(message.chat.id, "Извините, это слово имеет несколько значений. Пожалуйста, уточните свой запрос.")
# Продолжаем попытку найти изображение с помощью Bing Image Search API
# Формируем URL для запроса к Bing Image Search API
# Вставьте свой ключ доступа вместо YOUR-KEY
url = "https://api.bing.microsoft.com/v7.0/images/search?q=" + text + "&count=1&subscription-key=*:*:"
# Делаем запрос и получаем ответ в виде JSON данных
response = requests.get(url)
data = json.loads(response.text)
# Получаем список результатов поиска
results = data["value"]
# Если список не пустой, выбираем первый результат и получаем его URL
if results:
image = results[0]["contentUrl"]
# Отправляем изображение пользователю по его URL
bot.send_photo(message.chat.id, image)
# Иначе сообщаем пользователю, что не нашли изображений по этому слову
else:
bot.send_message(message.chat.id, "Извините, я не нашел изображений по слову " + text + " ни на Википедии, ни на Bing Image Search API")
else:
# Если ни одна кнопка не была нажата перед вводом слова, спрашиваем пользователя, что он хочет узнать: значение или фото
bot.send_message(message.chat.id, "Что вы хотите узнать о слове " + text + ": его значение или фото?", reply_markup=keyboard)
else:
# Если текст не является словом, сообщаем пользователю об этом
bot.send_message(message.chat.id, "Пожалуйста, введите одно слово.")
# Запускаем бота
bot.polling(none_stop=True, interval=0)