СДЕЛАЙ ЛУЧШЕ ОБУЧЕНИЕ БОТА, СДЕЛАЙ ОБУЧЕНИЕ НА ОСНОВЕ Wikipedia. УЛУЧШИ ОБУЧЕНИЕ НА ОСНОВЕ СООБЩЕНИЙ БОТА

import telebot, wikipedia, re
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import LogisticRegression

bot = telebot.TeleBot('Ваш ключ от BotFather')

wikipedia.set_lang("ru")

def clean_str(r):
 r = r.lower()
 r = [c for c in r if c in alphabet]
 return ''.join(r)

alphabet = ' 1234567890-йцукенгшщзхъфывапролджэячсмитьбюёqwertyuiopasdfghjklzxcvbnm?%.,()!:;'

def update():
 with open('dialogues.txt', encoding='utf-8') as f:
  content = f.read()
 
 blocks = content.split('\n')
 dataset = []
 
 for block in blocks:
  replicas = block.split('\\')[:2]
  if len(replicas) == 2:
   pair = [clean_str(replicas[0]), clean_str(replicas[1])]
   if pair[0] and pair[1]:
    dataset.append(pair)
 
 X_text = []
 y = []
 
 for question, answer in dataset[:10000]:
  X_text.append(question)
  y += [answer]
 
 global vectorizer
 vectorizer = CountVectorizer()
 X = vectorizer.fit_transform(X_text)
 
 global clf
 clf = LogisticRegression()
 clf.fit(X, y)

update()

def get_generative_replica(text):
 text_vector = vectorizer.transform([text]).toarray()[0]
 question = clf.predict([text_vector])[0]
 return question

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
    except Exception as e:
        return 'В энциклопедии нет информации об этом'

@bot.message_handler(commands=['start'])
def start_message(message):
 bot.send_message(message.chat.id,"Здравствуйте, Сэр.")

question = ""

@bot.message_handler(content_types=['text'])
def get_text_messages(message):
 command = message.text.lower()
 if command =="не так":
  bot.send_message(message.from_user.id, "а как?")
  bot.register_next_step_handler(message, wrong)
 else:
  global question
  question = command
  reply = get_generative_replica(command)
  if reply=="вики ":
   bot.send_message(message.from_user.id, getwiki(command))
  else:
   bot.send_message(message.from_user.id, reply)

def wrong(message):
 a = f"{question}\{message.text.lower()} \n"
 with open('dialogues.txt', "a", encoding='utf-8') as f:
  f.write(a)
 bot.send_message(message.from_user.id, "Готово")
 update()

bot.polling(none_stop=True)

НАПИШИ ТЕЛЕГРАМ БОТА НА TELEBOT, КОТОРЫЙ БУДЕТ ОБУЧАТЬСЯ НА СООБЩЕНИЯХ ПОЛЬЗОВАТЕЛЯ И СТАТЬЕЙ НА ВИКИПЕДИИ. БОТ РАБОТАЕТ ТОЛЬКО С ПОЛЬЗОВАТЕЛЯМИ, КОТОРЫЕ ЕСТЬ В СПИСКЕ (id пользователей)

УЛУЧШИ ЛОГИКУ И КАЧЕСТВО БОТА, УЛУЧШИ ОБКЧЕНИЕ!
УЛУЧШИ ЛОГИКУ И КАЧЕСТВО БОТА, УЛУЧШИ ОБКЧЕНИЕ!
УЛУЧШИ ЛОГИКУ И КАЧЕСТВО БОТА, УЛУЧШИ ОБКЧЕНИЕ!

Пример кода для рабы с Wikipedia api

Import telebot
import wikipediaapi

wiki_wiki = {
    'en': wikipediaapi.Wikipedia(
        language='en',
        user_agent='MyWikiBot (https://github.com/your-github-username/your-repo-name)'
    ),
    'ru': wikipediaapi.Wikipedia(
        language='ru',
        user_agent='MyWikiBot (https://github.com/your-github-username/your-repo-name)'
    )
}

MAX_MESSAGE_LENGTH = 1024  # Максимальная длина сообщения в Telegram
FLOOD_DELAY = 25  # Задержка между сообщениями в секундах

user_last_message_time = {}  # Время последнего сообщения пользователя


@bot.message_handler(func=lambda message: message.text.startswith('/wiki '))
def handle_wiki_dot_command(message):
    search_term = message.text[6:]
    get_summary(message, search_term)

def get_summary(message, search_term):
    start_time = time.time()
    user_id = message.chat.id
    user_language = get_user_language(message)

    # Проверка на флуд
    if user_id in user_last_message_time and time.time() - user_last_message_time[user_id] < FLOOD_DELAY:
        bot.reply_to(message, f"Пожалуйста, подождите {FLOOD_DELAY} секунд перед следующим запросом.")
        return

    user_last_message_time[user_id] = time.time()

    # Поддержка различных сайтов
    if search_term.startswith('http://') or search_term.startswith('https://'):
        try:
            response = get_page_summary(search_term)
            if response:
                bot.reply_to(message, response, parse_mode='HTML', disable_web_page_preview=True)
            else:
                bot.reply_to(message, "Извините, не удалось получить информацию по этому URL.")
        except:
            bot.reply_to(message, "Извините, не удалось получить информацию по этому URL.")
        return

    # Поиск в Wikipedia
    page = wiki_wiki[user_language].page(search_term)
    if page.exists():
        summary = page.summary
        url = page.fullurl

        # Ограничение длины статьи
        if len(summary) > MAX_MESSAGE_LENGTH:
            summary = summary[:MAX_MESSAGE_LENGTH - 3] + "..."

        response = f"<b>Ссылка:</b> <a href='{url}'>Тут</a>\n\n<b>Описание:</b> {summary}"
        bot.reply_to(message, response, parse_mode='HTML', disable_web_page_preview=True)
    else:
        bot.reply_to(message, "Извините, информация не найдена.", parse_mode='HTML')

    end_time = time.time()
    processing_time = end_time - start_time
    print(f"Обработка запроса заняла {processing_time:.2f} секунд.")

def get_user_language(message):
    user_language = 'en'  # По умолчанию английский
    if message.from_user.language_code in wiki_wiki:
        user_language = message.from_user.language_code
    return user_language

def get_page_summary(url):
    """Получает краткое описание веб-страницы по URL"""
    domain = urlparse(url).netloc
    if domain.endswith('.wikipedia.org'):
        page_name = url.split('/')[-1]
        user_language = get_user_language_from_url(url)
        page = wiki_wiki[user_language].page(page_name)
        if page.exists():
            return f"<b>Ссылка:</b> <a href='{url}'>Тут</a>\n\n<b>Описание:</b> {page.summary}"
    else:
        try:
            response = requests.get(url)
            soup = BeautifulSoup(response.content, 'html.parser')
            title = soup.find('title').text.strip()
            description = soup.find('meta', {'name': 'description'})
            if description:
                description = description['content'].strip()
            else:
                description = soup.find('p').text.strip()
            return f"<b>Ссылка:</b> <a href='{url}'>Тут</a>\n\n<b>Описание:</b> {title}\n{description}"
        except:
            return None

def get_user_language_from_url(url):
    """Извлекает язык из URL Wikipedia"""
    domain = urlparse(url).netloc
    language = domain.split('.')[0]
    if language in wiki_wiki:
        return language
    else:
        return 'en'