Проблема возникает из-за попытки доступа к TeleBotатрибутам объекта до того, как он будет полностью инициализирован. Вероятно, это происходит из-за непонимания того, как TeleBotработает конструктор.
Вот описание проблемы и возможное решение:
Проблема:
Строка bot = TeleBot("Тут токен")инициализирует TeleBotобъект.
Попытка использовать botнепосредственно после этого для доступа к его методам или атрибутам (например get_country) слишком ранняя. Процесс инициализации для TeleBotможет все еще продолжаться.
Решение:
Сначала выполните инициализацию TeleBot, затем определите функции. Правильный порядок — создать экземпляр TeleBot, а затем определить функции, которые его используют.
Использование botвнутри функций: при вызове функций, например, get_countryвнутри функций, обрабатывающих сообщения (например, @bot.message_handler(content_types=['text'])), убедитесь, что вы botправильно ссылаетесь на объект.
Пример:
import telebot
import requests
import json
API = "5bd52697213a9c81196e8fd4063fa37c"
bot = telebot.TeleBot(API) # Initialize TeleBot first
# Define functions that use the bot object
@bot.message_handler(commands=['start'])
def start(message):
bot.send_message(message.chat.id, "Напиши название города")
@bot.message_handler(content_types=['text'])
def get_weather(message):
city = message.text.strip().lower()
res = requests.get(f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid=API_KEY")
if res.status_code == 200:
data = json.loads(res.text)
country = data['sys']['country']
bot.reply_to(message, f"Погода в {city} сейчас \nТемпература - {data['main']['temp']}")
else:
bot.reply_to(message, f"Ошибка - город {city} не существует")
bot.infinity_polling()
Объяснение:
Инициализация: Сначала выполняется строка bot = telebot.TeleBot(API), настраивающая botобъект.
Определение функции: Далее мы определяем функции startи get_weather.
Использование функций: Внутри этих функций botобъект используется корректно для взаимодействия с API Telegram.
Соблюдая этот порядок, вы сможете избежать ошибок AttributeErrorи обеспечить корректную работу вашего Telegram-бота.
на то что при создании функции get_country я ссылаюсь на несуществующий список то так и должно быть там список на 240+ строк так что я не хочу засорять им место код еще пару часов назад работал а теперь без никаких изменений отказывается работать