Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Бот в телеграм на питоне

Vlad Koks Ученик (108), на голосовании 2 месяца назад
В чем может быть ошибка, все запускает,но сам бот не работает
 
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 'Нет такой инфы'
@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)
Голосование за лучший ответ
Даниил Линник Знаток (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`.
Nikassaiop EndПросветленный (40197) 3 месяца назад
Ха-ха, после копирования ответа из нейронки ты тем более все отступы сбил, теперь точно не будет работать!
Vlad KoksУченик (108) 3 месяца назад
нету отступов, return был итак в конце цыкла + poling не отличается от моего
Похожие вопросы