Исходник Телеграм бот с фактами

Python_Fanat

Потрачен
Автор темы
25
12
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Представляю вам телеграм бота с фактами
Данный телеграм бот создавался с целью выкладывания на данный форум, ладно не будем про это перейдём к самому коду и телеграм боту.
Функционал:
1. Приветствие при команде /start.
2. Рандомный факт при нажатии на кнопку "Получить факт"
3. Изменение рандомного факта в уже существующем сообщении при нажатии на инлайн кнопку "Получить еще факт"
Требуемые библиотеки для работы бота:
1. telebot
2. requests
Вот сам исходный код:
Код:
import telebot
from telebot.types import ReplyKeyboardMarkup, KeyboardButton, InlineKeyboardMarkup, InlineKeyboardButton
import requests
from bs4 import BeautifulSoup

BOT_TOKEN = 'ваш токен'

bot = telebot.TeleBot(BOT_TOKEN)

def get_fact():
    url = 'https://randstuff.ru/fact/'
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    fact = soup.find('table', class_='text').find('td').text.strip()
    return fact

def main_menu_keyboard():
    keyboard = ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=False)
    keyboard.add(KeyboardButton('Получить факт'))
    return keyboard

def inline_keyboard():
    keyboard = InlineKeyboardMarkup()
    keyboard.add(InlineKeyboardButton('Получить еще факт', callback_data='get_fact'))
    return keyboard

@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
    bot.reply_to(message, "Привет! Я бот, который генерирует случайные факты. Нажми на кнопку 'Получить факт', чтобы узнать что-то новое.", reply_markup=main_menu_keyboard())

@bot.message_handler(func=lambda message: message.text == 'Получить факт')
@bot.message_handler(commands=['fact'])
def send_fact(message):
    fact = get_fact()
    bot.reply_to(message, fact, reply_markup=inline_keyboard())

@bot.callback_query_handler(func=lambda call: call.data == 'get_fact')
def callback_get_fact(call):
    fact = get_fact()
    bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=fact, reply_markup=inline_keyboard())

@bot.message_handler(func=lambda message: True)
def echo_all(message):
    bot.reply_to(message, "Извини, я не понимаю. Используй кнопку 'Получить факт', чтобы узнать что-то новое.", reply_markup=main_menu_keyboard())

bot.polling()
 
  • Bug
Реакции: Fott

Cоdy

Участник
28
2
Всё конечно хорошо, но нужно почитать по PEP-8 и сделать простенькую обработку ошибок в функции get_fact