@xqnz

Есть два кода телеграмм бота на питоне, как запихнуть один в кнопку wiki чтобы отправилось сообщение?

первый код(в него надо запихнуть второй код):

import telebot
from telebot import types # для указание типов

bot = telebot.TeleBot("токен")

@bot.message_handler(commands=['start'])
def start(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    btn1 = types.KeyboardButton("wiki")
    btn2 = types.KeyboardButton("❓ Задать вопрос")
    markup.add(btn1, btn2)
    bot.send_message(message.chat.id, text="Привет, {0.first_name}! Я тестовый бот для твоей статьи для <spoiler title="">habr.com".format(message.from_user), reply_markup=markup)
    
@bot.message_handler(content_types=['text'])
def func(message):
    if(message.text == "wiki"):
        bot.send_message(message.chat.id, text="Привеет..Отправьте мне любое слово, и я найду его значение на Wikipedia")
    elif(message.text == "❓ Задать вопрос"):
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        btn1 = types.KeyboardButton("Как меня зовут?")
        btn2 = types.KeyboardButton("Что я могу?")
        back = types.KeyboardButton("Вернуться в главное меню")
        markup.add(btn1, btn2, back)
        bot.send_message(message.chat.id, text="Задай мне вопрос", reply_markup=markup)
    
    elif(message.text == "Как меня зовут?"):
        bot.send_message(message.chat.id, "У меня нет имени..")
    
    elif message.text == "Что я могу?":
        bot.send_message(message.chat.id, text="Поздороваться с читателями")
    
    elif (message.text == "Вернуться в главное меню"):
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        button1 = types.KeyboardButton("wiki")


второй код(его нужно запихнуть в кнопку "wiki"):

import telebot, wikipedia, re
# Создаем экземпляр бота
bot = telebot.TeleBot('токен')
# Устанавливаем русский язык в Wikipedia
wikipedia.set_lang("ru")
# Чистим текст статьи в Wikipedia и ограничиваем его тысячей символов
<spoiler title="">def getwiki(s):
    try:
        ny = wikipedia.page(s)
        # Получаем первую тысячу символов
        wikitext=ny.content[:1000]
        # Разделяем по точкам
        wikimas=wikitext.split('.')
        # Отбрасываем всЕ после последней точки
        wikimas = wikimas[:-1]
        # Создаем пустую переменную для текста
        wikitext2 = ''
        # Проходимся по строкам, где нет знаков «равно» (то есть все, кроме заголовков)
        for x in wikimas:
            if not('==' in x):
                    # Если в строке осталось больше трех символов, добавляем ее к нашей переменной и возвращаем утерянные при разделении строк точки на место
                if(len((x.strip()))>3):
                   wikitext2=wikitext2+x+'.'
            else:
                break
        # Теперь при помощи регулярных выражений убираем разметку
        wikitext2=re.sub('\([^()]*\)', '', wikitext2)
        wikitext2=re.sub('\([^()]*\)', '', wikitext2)
        wikitext2=re.sub('\{[^\{\}]*\}', '', wikitext2)
        # Возвращаем текстовую строку
        return wikitext2
    # Обрабатываем исключение, которое мог вернуть модуль wikipedia при запросе
    except Exception as e:
        return 'В энциклопедии нет информации об этом'
  • Вопрос задан
  • 120 просмотров
Пригласить эксперта
Ответы на вопрос 1
RimMirK
@RimMirK
Вроде человек. Вроде учусь. Вроде пайтону
тебе на надо "запихивать код в кнопку". тебе надо создать обработчик той самой кнопки.
вот пару советов
  1. если есть клавиатуры которые придется показывать несколько раз, то запихни их в функцию, например так:
    def getMainButtons():
        kb = types.ReplyKeyboardMarkup(resize_keyboard=True)
        some_button = types.KeyboardButton("КНОПКИ")
        kb.add(some_button )
        return kb
    
    # reply_markup=getMainButtons()

  2. да, если какая-то часть кода большая, ее можно вынести в отдельный файл, но не надо там создавать еще один экземпляр бота. https://qna.habr.com/q/1279018 вот как это можно сделать вызывай функцию в условии if(message.text == "wiki"):
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы