HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Python
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 17.10.2024, 18:09
Python_Fanat
Новичок
Регистрация: 17.10.2024
Сообщений: 24
С нами: 829557

Репутация: 8
По умолчанию

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

Функционал:

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()
 
Ответить с цитированием

  #2  
Старый 29.10.2024, 05:22
Cоdy
Новичок
Регистрация: 23.04.2021
Сообщений: 28
С нами: 2662646

Репутация: 8
По умолчанию

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





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.