ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Python (https://forum.antichat.xyz/forumdisplay.php?f=205)
-   -   Телеграм бот с фактами (https://forum.antichat.xyz/showthread.php?t=1522702)

Python_Fanat 17.10.2024 18:09

Представляю вам телеграм бота с фактами
Данный телеграм бот создавался с целью выкладывания на данный форум, ладно не будем про это перейдём к самому коду и телеграм боту.

Функционал:

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()


Cоdy 29.10.2024 05:22

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


Время: 06:43