Даниил Линник
Знаток
(443)
3 месяца назад
В вашем коде есть несколько проблем, которые могут мешать корректной работе бота. Вот исправленная версия кода:
1. Неверный уровень отступов у декораторов функций.
2. Ошибка в обработке метода `polling`.
3. Неправильная обработка текста из Википедии.
Вот исправленный код:
python
import telebot
import wikipedia
import re
# Используйте актуальный токен бота
bot = telebot.TeleBot('айпи бота')
wikipedia.set_lang('ru')
def getwiki(s):
try:
n = wikipedia.page(s)
witext = n.content[:1000]
wimas = witext.split('.')
wimas = wimas[:-1]
witext2 = ''
for i in wimas:
if not('==' in i):
if len(i.strip()) > 3:
witext2 = witext2 + i + '.'
else:
break
# Возвращаем текст в конце цикла, а не внутри него
return witext2
except Exception as e:
return 'Нет такой инфы'
# Обработчик команды /start
@bot.message_handler(commands=['start'])
def start(m, res=False):
bot.send_message(m.chat.id, 'Отправь мне слово, я найду it')
# Обработчик текста
@bot.message_handler(content_types=['text'])
def handle_text(message):
bot.send_message(message.chat.id, getwiki(message.text))
# Запуск бота
bot.polling(non_stop=True, interval=0)
Обратите внимание на:
1. Декораторы (`@bot.message_handler`) должны располагаться на одном уровне с функцией, которую они обрабатывают.
2. Метод `polling` вызван корректно (параметр `interval` без значения по умолчанию).
3. Исправлена логика формирования текста из Wikipedia, чтобы `return` выполнялся в конце цикла обработки текста, а не внутри него.
Теперь ваш бот должен корректно отвечать на текстовые сообщения и команды `/start`.
Vlad KoksУченик (108)
3 месяца назад
нету отступов, return был итак в конце цыкла + poling не отличается от моего